public function __invoke(array $input) { $userId = $input['userId']; $startTime = null; $endTime = null; $withContactDetails = false; // make sure that employees are not accessing information for another employee if (Auth::isEmployee() && Auth::getId() != $userId) { return InvalidPayload::create('You can only access your own shifts'); } if (!empty($input['startTime'])) { $startTime = urldecode($input['startTime']); } if (!empty($input['endTime'])) { $endTime = urldecode($input['endTime']); } $Employee = new Employee(); $Manager = new Manager(); // Attempt to load employee if ($Employee->load($userId)) { $User = $Employee; $withContactDetails = isset($_GET['manager']) ? true : false; } elseif ($Manager->load($userId)) { $User = $Manager; $withContactDetails = isset($_GET['employee']) ? true : false; } else { return ErrorPayload::create('User not found'); } $shifts = $User->shifts($startTime, $endTime, $withContactDetails); if (count($shifts)) { return SuccessPayload::create($shifts); } else { return ErrorPayload::create('No shifts found'); } }
public function __invoke(array $input) { $employeeId = $input['employeeId']; $shiftId = $input['shiftId']; // Make sure this is a valid employee $Employee = new Employee(); if (!$Employee->load($employeeId)) { return ErrorPayload::create('Employee not found'); } // Make sure this is a valid shift $Shift = new Shift(); if (!$Shift->load($shiftId)) { return ErrorPayload::create('Shift not found'); } if ($Shift->employee_id == $employeeId) { return SuccessPayload::create(['message' => 'Employee already assigned to this shift']); } else { // make sure this employee doesn't have any overlapping shifts that would conflict... $filters = []; $filters[] = ['key' => 'employee_id', 'value' => $employeeId]; if ($Shifts = $Shift->filter($Shift->start_time, $Shift->end_time, $filters)) { if (count($Shifts)) { return ErrorPayload::create('Assiging the employee to this shift would result in overlapping shifts for this employee'); } } try { $Shift->update(['employee_id' => $employeeId]); return SuccessPayload::create(['message' => 'Shift updated successfully']); } catch (\Exception $e) { return ErrorPayload::create('There was an error updating this shift'); } } }
public function __invoke(array $input) { $employeeId = $input['employeeId']; $shiftId = $input['shiftId']; // Make sure this employee isn't looking at another employee's information if (Auth::isEmployee() && Auth::getId() != $employeeId) { return InvalidPayload::create('You can not list coworkers for another employee'); } // Make sure this is a valid employee $Employee = new Employee(); if (!$Employee->load($employeeId)) { return ErrorPayload::create('Employee not found'); } // Make sure this is a valid shift $Shift = new Shift(); if (!$Shift->load($shiftId)) { return ErrorPayload::create('Shift not found'); } // Make sure that this employee is assigned to this shift if ($Shift->employee_id != $employeeId) { return ErrorPayload::create('You do not work this shift'); } $coworkers = $Shift->listCoworkers(); if (count($coworkers)) { return SuccessPayload::create($coworkers); } else { return ErrorPayload::create('No coworkers found for this shift'); } }
public function __invoke(array $input) { $employeeId = $input['employeeId']; $Employee = new Employee(); if ($Employee->load($employeeId)) { $response = ['id' => $Employee->id, 'name' => $Employee->name, 'phone' => $Employee->phone, 'email' => $Employee->email]; return SuccessPayload::create($response); } else { return ErrorPayload::create('Employee not found'); } }
public function __invoke(array $input) { $startTime = urldecode($input['startTime']); $endTime = urldecode($input['endTime']); $Shift = new Shift(); $shifts = $Shift->filter($startTime, $endTime); if (count($shifts)) { return SuccessPayload::create($shifts); } else { return ErrorPayload::create('No shifts found'); } }
public function __invoke(array $input) { $employeeId = $input['employeeId']; $startTime = Carbon::now()->startOfYear(); $endTime = Carbon::now()->endOfYear(); // Make sure this employee isn't looking at another employee's information if (Auth::isEmployee() && Auth::getId() != $employeeId) { return InvalidPayload::create('You can not list the summary for another employee'); } if (!empty($input['startTime'])) { $startTime = $input['startTime']; } if (!empty($input['endTime'])) { $endTime = $input['endTime']; } $Employee = new Employee(); if (!$Employee->load($employeeId)) { return ErrorPayload::create('Employee not found'); } // limit filtered results to this employee and within the start/end times $filters = []; $filters[] = ['key' => 'employee_id', 'value' => $employeeId]; $filters[] = ['key' => 'start_time', 'operator' => '>=', 'value' => $startTime]; $filters[] = ['key' => 'end_time', 'operator' => '<=', 'value' => $endTime]; $summary = []; $Shift = new Shift(); if ($Shifts = $Shift->filter($startTime, $endTime, $filters)) { foreach ($Shifts as $Shift) { $startTime = Carbon::createFromFormat('Y-m-d H:i:s', $Shift['startTime']); $endTime = Carbon::createFromFormat('Y-m-d H:i:s', $Shift['endTime']); $startOfWeek = max($startTime->copy()->startOfWeek(), $startTime->copy()->startOfYear()); $endOfWeek = min($endTime->copy()->endOfWeek(), $endTime->copy()->endOfYear()); $weekDates = $startOfWeek->format('Y-m-d') . ' to ' . $endOfWeek->format('Y-m-d'); $diff = $endTime->diff($startTime); $timeWorked = $diff->d * 24 + $diff->h + $diff->i / 60; $timeWorked = $timeWorked - $Shift['break']; $summary[$weekDates] = @$summary[$weekDates] + $timeWorked; } foreach ($summary as $week => $hours) { $summary[$week] = "{$hours} hour" . ($hours == 1 ? '' : 's'); } } if (count($summary)) { return SuccessPayload::create($summary); } else { return ErrorPayload::create('No shifts found'); } }
public function __invoke(array $input) { $role = $input['role']; $Auth = new Auth(); switch ($role) { case 'employee': $Auth->flagAsEmployee(); return SuccessPayload::create(['message' => 'Logged in as employee']); break; case 'manager': $Auth->flagAsManager(); return SuccessPayload::create(['message' => 'Logged in as manager']); break; default: return ErrorPayload::create('Invalid role: must be employee or manager'); break; } }
public function __invoke(array $input) { // Validate the startTime and endTime variables if (empty($input['startTime']) || empty($input['endTime'])) { return InvalidPayload::create('Missing required inputs: startTime and endTime are required'); } else { try { $startTime = Carbon::createFromFormat('Y-m-d H:i:s', urldecode($input['startTime'])); $endTime = Carbon::createFromFormat('Y-m-d H:i:s', urldecode($input['endTime'])); } catch (\Exception $e) { return InvalidPayload::create('Invalid date format: startTime and endTime must be in "Y-m-d H:i:s" format'); } } $error_message = null; if ($startTime > $endTime) { $error_message = "startTime must be before endTime"; } elseif ($startTime->diffInHours($endTime) > 24) { $error_message = "startTime and endTime can not differ by more than 24 hours"; } if ($error_message) { return ErrorPayload::create($error_message); } // Load shift $shiftId = $input['shiftId']; $Shift = new Shift(); if (!$Shift->load($shiftId)) { return ErrorPayload::create('Shift not found'); } $update_array = ['start_time' => $startTime->format("Y-m-d H:i:s"), 'end_time' => $endTime->format("Y-m-d H:i:s")]; try { $Shift->update($update_array); return SuccessPayload::create(['message' => 'Shift updated successfully']); } catch (\Exception $e) { return ErrorPayload::create('There was an error updating this shift'); } }
public function __invoke(array $input) { $employeeId = $input['employeeId']; $managerId = null; $break = empty($input['break'] ? 0 : $input['break']); $startTime = null; $endTime = null; // Validate the startTime and endTime variables if (empty($input['startTime']) || empty($input['endTime'])) { return InvalidPayload::create('Missing required inputs (startTime and endTime are required'); } else { $startTime = Carbon::createFromFormat('Y-m-d H:i:s', urldecode($input['startTime'])); $endTime = Carbon::createFromFormat('Y-m-d H:i:s', urldecode($input['endTime'])); } // validation for start and end times $error_message = null; if ($startTime > $endTime) { $error_message = "startTime must be before endTime"; } elseif ($startTime->diffInHours($endTime) > 24) { $error_message = "startTime and endTime can not differ by more than 24 hours"; } if ($error_message) { return ErrorPayload::create($error_message); } // validation for employeeId $employeeId = null; if (!empty($input['employeeId'])) { $employeeId = $input['employeeId']; // Make sure this is a valid employee $Employee = new Employee(); if (!$Employee->load($employeeId)) { return ErrorPayload::create('Employee not found'); } else { // make sure this employee doesn't have any overlapping shifts that would conflict... $filters = []; $filters[] = ['key' => 'employee_id', 'value' => $employeeId]; $Shift = new Shift(); if ($Shifts = $Shift->filter($startTime, $endTime, $filters)) { foreach ($Shifts as $checkShift) { if (count($Shifts)) { return ErrorPayload::create('Creating this shift for this employee would result in overlapping shifts for this employee'); } } } } } $managerId = null; if (!empty($input['managerId'])) { $managerId = $input['managerId']; } else { // NOTE: This would pull the actual managerId in the live application (set self to default if no managerId provided) // here we are simply going to assume that it is manager 4 since there isn't a login in this sample project $managerId = Auth::getId(); } // Make sure this is a valid employee $Manager = new Manager(); if (!$Manager->load($managerId)) { return ErrorPayload::create('Manager not found'); } try { Shift::create(['manager_id' => $managerId, 'employee_id' => $employeeId, 'break' => $break, 'start_time' => $startTime, 'end_time' => $endTime]); return SuccessPayload::create(['message' => 'Shift created successfully']); } catch (\Exception $e) { return ErrorPayload::create('There was an error creating this shift'); } }