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 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']; $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'); } }