public static function dailyUpdate() { $log = ''; //echo "<h1>Adding New Entities to Roster</h1>"; $log .= "Adding New Entities to Roster\n\n"; $capecod = '3'; $company = Company::findOrFail($capecod); $allowedSites = $company->siteList('1')->pluck('id')->toArray(); $allowedSites = Site::all()->pluck('id')->toArray(); $date = Carbon::now()->format('Y-m-d'); //$date = '2016-08-17'; $planner = SitePlanner::select(['id', 'site_id', 'entity_type', 'entity_id', 'task_id', 'from', 'to', 'days'])->where('from', '<=', $date)->where('to', '>=', $date)->whereIn('site_id', $allowedSites)->orderBy('site_id')->get(); foreach ($planner as $plan) { if ($plan->entity_type == 'c') { $site = Site::find($plan->site_id); $company = Company::findOrFail($plan->entity_id); $staff = $company->staffActive()->pluck('id')->toArray(); $log .= "\nf:" . $plan->from->format('Y-m-d') . ' t:' . $plan->to->format('Y-m-d') . ' [' . $plan->id . '] (' . $company->name . ") Task:{$plan->task_id} Site: {$site->name} ({$plan->site_id})\n"; foreach ($staff as $staff_id) { $user = User::findOrFail($staff_id); if (!$site->isUserOnRoster($staff_id, $date)) { //echo 'adding '.$user->fullname.' ('.$user->username.') to roster<br>'; $log .= 'adding ' . $user->fullname . ' (' . $user->username . ") to roster\n"; $newRoster = SiteRoster::create(array('site_id' => $site->id, 'user_id' => $staff_id, 'date' => $date . ' 00:00:00', 'created_by' => '1', 'updated_by' => '1')); } } } } //echo "<h1>Completed</h1>"; $log .= "\nCompleted"; $now = Carbon::now()->format('Y-m-d-G-i-s'); $bytes_written = File::put(public_path('filebank/log/nightly/' . $now . '.txt'), $log); if ($bytes_written === false) { die("Error writing to file"); } else { echo 'Logfile filebank/log/nightly/' . $now . '.txt'; } echo $log; }
/** * Process Site Check-in. * * @return \Illuminate\Http\Response */ public function processCheckin(SiteCheckinRequest $request, $slug) { $site = Site::where(compact('slug'))->firstOrFail(); if ($request->has('safe_site')) { $site->attendance()->save(new SiteAttendance(['safe_site' => '1'])); } else { $site->attendance()->save(new SiteAttendance(['safe_site' => '0'])); // Create Issue + attach to site if ($request->has('action_required')) { $issue = $site->issues()->save(new SiteIssue($request->only('reason', 'action_required'))); } else { $issue = $site->issues()->save(new SiteIssue($request->only('reason'))); } //Create action taken + attach to issue if ($issue) { $action_request = $request->only('action'); $action = $issue->actions()->save(new SiteIssueAction($action_request)); // Handle attached Photo or Video if ($request->hasFile('media')) { $issue->saveAttachedMedia($request->file('media')); } // Email issue $issue->emailIssue($action); } } // if Today add them to Roster if Company is on Planer but user not on Roster $today = Carbon::now()->format('Y-m-d'); if ($site->isCompanyOnPlanner(Auth::user()->company->id, $today) && !$site->isUserOnRoster(Auth::user()->id, $today)) { $newRoster = SiteRoster::create(array('site_id' => $site->id, 'user_id' => Auth::user()->id, 'date' => $today . ' 00:00:00', 'created_by' => '1', 'updated_by' => '1')); } Toastr::success("Checked in"); return redirect('/dashboard'); }
/** * Is a specific user on site roster * * @return record */ public function isUserOnRoster($user_id, $date = '') { if (!$date) { $date = Carbon::today()->format('Y-m-d'); } $onsite = SiteRoster::where('site_id', $this->id)->where('user_id', $user_id)->whereDate('date', '=', $date)->first(); return $onsite ? $onsite->id : 0; }
/** * Get Site Attendance for specific site */ public function getSiteAttendance(Request $request, $site_id, $date) { $today = Carbon::now()->format('Y-m-d'); $carbon_date = Carbon::createFromFormat('Y-m-d H:i:s', $date . ' 00:00:00'); $weekend = $carbon_date->isWeekend() ? 1 : 0; $planner = SitePlanner::select(['id', 'site_id', 'entity_type', 'entity_id', 'task_id', 'from', 'to', 'days'])->whereDate('from', '<=', $date)->whereDate('to', '>=', $date)->where('site_id', $site_id)->where('weekend', $weekend)->get(); $site = Site::find($site_id); $dayplan = []; $r_entities = []; $planner_ids = []; $user_list = []; foreach ($planner as $plan) { $planner_ids[] = $plan->id; $array = $this->getPlanData($plan); $key = $plan->entity_type . '.' . $plan->entity_id; // Add task to Entity's existing task else add Entity to list if (isset($r_entities[$key])) { $r_entities[$key]['tasks'] .= ', ' . $array['task_name']; $r_entities[$key]['plan_ids'] .= ', ' . $plan->id; } else { $attendance = []; if ($plan->entity_type == 'c') { // Get Staff Attendance on Current Site $staff = Company::find($plan->entity_id)->staff->pluck('id')->toArray(); $roster = SiteRoster::where('site_id', $plan->site_id)->where('date', '=', $date)->whereIn('user_id', $staff)->get(); // If today Roster will be all active company to give us the ability to add/remove them from Roster database if ($date == $today) { $roster = Company::findOrFail($plan->entity_id)->staffActive(); } foreach ($roster as $rostered) { // If today then determine if user is on planner otherwise we know they already are if ($date == $today) { $user = User::find($rostered->id); $roster_id = $site->isUserOnRoster($user->id, $date); //echo "rid:" . $roster_id . ' user:'******' date:' . $date . "<br>"; } else { $user = User::find($rostered->user_id); $roster_id = $rostered->id; //echo "rid:" . $rostered->id . ' user:'******' date:' . $rostered->date . "<br>"; } $user_list[] = $user->id; // add to user_list to determine non-rostered users later // Current Site attendance $attended = ($onsite = $site->isUserOnsite($user->id, $date)) ? $onsite->date->format('H:i:s') : ''; // Other Site attendance $attend_other = SiteAttendance::where('user_id', $user->id)->where('site_id', '<>', $site_id)->whereDate('date', '=', $date)->orderBy('date')->get(); $other_sites = ''; foreach ($attend_other as $attend) { $other_site = Site::find($attend->site_id); $other_sites ? $other_sites .= ', ' . $other_site->nameShort . ' (' . $attend->date->format('g:i a') . ')' : ($other_sites = $other_site->nameShort . ' (' . $attend->date->format('g:i a') . ')'); } $attendance[] = ['user_id' => $user->id, 'name' => $user->fullname, 'roster_id' => $roster_id, 'attended' => $attended, 'other_sites' => $other_sites]; //echo "Company:".$array['entity_name']."<br>"; } } $r_entities[$key] = ['key' => $key, 'entity_type' => $plan->entity_type, 'entity_id' => $plan->entity_id, 'entity_name' => $array['entity_name'], 'tasks' => $array['task_name'], 'plan_ids' => $plan->id, 'attendance' => $attendance, 'open' => false]; } $dayplan[] = $array; } // Non-Rostered attendees $n_entities = []; $non_rostered = SiteAttendance::where('site_id', $site_id)->whereDate('date', '=', $date)->whereNotIn('user_id', $user_list)->get(); foreach ($non_rostered as $non) { $company = User::find($non->user_id)->company; $key = 'c.' . $company->id; $attendance = []; // Get All Staff Non Rostered Attendance $staff = $company->staff->pluck('id')->toArray(); foreach ($staff as $s) { $user = User::find($s); // Current Site attendance $attended = ($onsite = $site->isUserOnsite($user->id, $date)) ? $onsite->date->format('H:i:s') : ''; if ($attended) { // Other Site attendance $attend_other = SiteAttendance::where('user_id', $user->id)->where('site_id', '<>', $site_id)->whereDate('date', '=', $date)->orderBy('date')->get(); $other_sites = ''; foreach ($attend_other as $attend) { $other_site = Site::find($attend->site_id); $other_sites ? $other_sites .= ', ' . $other_site->nameShort . ' (' . $attend->date->format('g:i a') . ')' : ($other_sites = $other_site->nameShort . ' (' . $attend->date->format('g:i a') . ')'); } $attendance[] = ['user_id' => $user->id, 'name' => $user->fullname, 'attended' => $attended, 'other_sites' => $other_sites]; } } if (!isset($n_entities[$key])) { $n_entities[$key] = ['key' => $key, 'entity_type' => 'c', 'entity_id' => $company->id, 'entity_name' => $company->name, 'tasks' => 'Unrostered', 'attendance' => $attendance, 'open' => false]; } } // // Get Site List 'Select' options + bold sites currently on planner for date. $sel_site = []; if (Auth::user()->company->subscription) { $site_list = Auth::user()->supervisorSiteListSelect('1', 'prompt'); } else { $site_list = Auth::user()->company->sitePlannerListSelect('prompt'); } foreach ($site_list as $key => $value) { $s = Site::find($key); if ($s) { if (Auth::user()->company->subscription) { $site_name = $s->anyTasksOnDate($date) ? '<b>' . $value . '</b>' : $value; } else { $site_name = $s->isCompanyOnPlanner(Auth::user()->company->id, $date) ? '<b>' . $value . '</b>' : $value; } $sel_site[] = ['value' => $key, 'text' => $site_name]; } else { $sel_site[] = ['value' => $key, 'text' => $value]; } } // Sort Rostered $roster = []; foreach ($r_entities as $entity) { usort($entity['attendance'], 'sortName'); $roster[] = $entity; } usort($roster, 'sortEntityName'); // Sort Non Rostered $non_roster = []; foreach ($n_entities as $entity) { usort($entity['attendance'], 'sortName'); $non_roster[] = $entity; } usort($non_roster, 'sortEntityName'); // Get Users permissions $permission = ''; if (Auth::user()->can('view.attendance|view.p.attendance')) { $permission = 'view'; } if (Auth::user()->can('edit.attendance|edit.p.attendance')) { $permission = 'edit'; } $json = []; $json[] = $dayplan; $json[] = $roster; $json[] = $non_roster; $json[] = $sel_site; $json[] = $permission; return $json; }
public static function roster() { $log = ''; echo "<h2>Adding Users to Roster</h2>"; $log .= "Adding New Users to Roster\n"; $log .= "------------------------------------------------------------------------\n\n"; $allowedSites = Site::all()->pluck('id')->toArray(); if (Auth::check()) { $allowedSites = Auth::user()->company->siteList('1')->pluck('id')->toArray(); } $date = Carbon::now()->format('Y-m-d'); //$date = '2016-08-17'; $planner = SitePlanner::where('from', '<=', $date)->where('to', '>=', $date)->whereIn('site_id', $allowedSites)->orderBy('site_id')->get(); foreach ($planner as $plan) { if ($plan->entity_type == 'c') { $site = Site::find($plan->site_id); $company = Company::findOrFail($plan->entity_id); $staff = $company->staffActive()->pluck('id')->toArray(); $task = Task::find($plan->task_id); echo "<br><b>Site:{$site->name} ({$plan->site_id}) Company: {$company->name} Task: {$task->name} PID: {$plan->id}</b><br>"; $log .= "\nSite: {$site->name} ({$plan->site_id}) Company: {$company->name} Task: {$task->name} PID: {$plan->id}\n"; $found = false; foreach ($staff as $staff_id) { $user = User::findOrFail($staff_id); if (!$site->isUserOnRoster($staff_id, $date)) { echo 'adding ' . $user->fullname . ' (' . $user->username . ') to roster<br>'; $log .= 'adding ' . $user->fullname . ' (' . $user->username . ") to roster\n"; $newRoster = SiteRoster::create(array('site_id' => $site->id, 'user_id' => $staff_id, 'date' => $date . ' 00:00:00', 'created_by' => '1', 'updated_by' => '1')); $found = true; } } if (!$found) { echo "There were no users to add or they were already on the roster<br>"; $log .= "There were no users to add or they were already on the roster\n"; } } } echo "<h4>Completed</h4>"; $log .= "\nCompleted\n\n\n"; $bytes_written = File::append(public_path('filebank/log/nightly/' . Carbon::now()->format('Ymd') . '.txt'), $log); if ($bytes_written === false) { die("Error writing to file"); } }
function duplicateRoster() { $roster = SiteRoster::all(); $onRoster = []; foreach ($roster as $r) { if (isset($onRoster[$r->planner_id . '.' . $r->user_id])) { $onRoster[$r->planner_id . '.' . $r->user_id]++; } else { $onRoster[$r->planner_id . '.' . $r->user_id] = 1; } } sort($onRoster); $reverse = array_reverse($onRoster); dd($reverse); }