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