public static function prepare(array $sheet) { $sheet['lang'] = []; foreach (range(1, 6) as $day) { $sheet['lang'][$day] = ['day' => $day, 'lang' => Calendar::weekdays($day), 'start' => \Arr::get($sheet, 's' . $day, NULL), 'end' => \Arr::get($sheet, 'e' . $day, NULL)]; } $sheet['lang']['0'] = ['day' => 0, 'lang' => Calendar::weekdays(0), 'start' => \Arr::get($sheet, 's0', NULL), 'end' => \Arr::get($sheet, 'e0', NULL)]; return $sheet; }
/** * @param integer $id * * @Method (AJAX) */ public function editAction($id) { $form = $this->form('TimeManagerEdit'); $tmanager = $this->model('ManagerTimeSheet')->getById($id); if ($tmanager) { $form->setData($tmanager); } else { $form->setData('user_id', $id); } if ($this->request->is('POST')) { $form->handle($this->request->post); if (!$form->validate()) { return ['errors' => $form->getErrors()]; } if ($form->isSubmitted()) { $tmanager = $form->save(); $tmanager_progress = $this->model('ManagerTimeSheet')->progress($tmanager); return ['tmanager' => $tmanager, 'progress' => $tmanager_progress]; } } else { $days = []; foreach (range(0, 6) as $_d) { $days[$_d] = Calendar::weekdays($_d); } unset($days[0]); $days['0'] = Calendar::weekdays(0); $tmanager_progress = $this->model('ManagerTimeSheet')->progress($tmanager); return $this->renderPartial('tmanager/edit', ['form' => $form->createBuilder(), 'tmanager' => $tmanager, 'days' => $days, 'tmanager_progress' => $tmanager_progress, 'is_rule' => $this->is_allow]); } }
/** * @param integer $id * * @Method (AJAX) */ public function editorAction($id) { $employee = $this->model('EmployeeData')->getById($id); $form0 = $this->form('EmployeeEdit'); $form0->setData($employee); //Doc $doc = $this->model('EmployeeDoc')->getById($id); $docs = $this->model('EmployeeDoc')->getDocs(); $_docmap = $this->model('EmployeeDocMap')->getByUserId($id); $docmap = $this->model('EmployeeDocMap')->getMapUser($_docmap); $doc_progress = $this->model('EmployeeDoc')->progress($doc, $docmap); $form1 = $this->form('Employee\\Doc'); if (null != $doc) { $form1->setData($doc); } else { $form1->setData('user_id', $id); } //Contact $contacts = $this->model('EmployeeContact')->getGroupContacts(); $econtacts = $this->model('EmployeeContact')->getById($id); $_cmap = $this->model('EmployeeContactMap')->getByUserId($id); $cmap = $this->model('EmployeeContactMap')->getMapUser($_cmap); $contact_progress = $this->model('EmployeeContact')->progress($econtacts, $cmap); $form2 = $this->form('Employee\\Contact'); $form2->setData($employee); //department $form3 = $this->form('Employee\\Department'); $form3->setData($employee); $departments = []; $edepartments = []; foreach ($this->model('Department')->getList() as $d) { $departments[] = ['id' => $d['id'], 'name' => str_repeat(' - ', $d['level'] - 1) . $d['number'] . '. ' . $d['name']]; $edepartments[$d['id']] = $d; } //Rule $form4 = $this->form('Employee\\Codex'); $form4->setData($employee); $userrule = $this->model('Codex')->getByUser($id); $userrule = $this->model('Codex')->asArrayGroup($userrule); $disallow = [3 => 'USER_CLIENT', 17 => 'USER_WHOLESALER', 18 => 'USER_FRANCHISER']; if (isset($disallow[$employee['role_id']])) { unset($disallow[$employee['role_id']]); } $disallow = array_flip($disallow); $roles = $this->model('Codex')->getByAllowList($disallow); // Grafik $form5 = $this->form('TimeManagerEdit'); $tmanager = $this->model('ManagerTimeSheet')->getByUserId($id); $tmanager_progress = $this->model('ManagerTimeSheet')->progress($tmanager); if ($tmanager) { $form5->setData($tmanager); } else { $form5->setData('user_id', $id); } $days = []; foreach (range(1, 6) as $_d) { $days[$_d] = Calendar::weekdays($_d); } $days['0'] = Calendar::weekdays(0); $form6 = $this->form('EmployeePlanEdit'); $form6->setData('user_id', $id); $f = Calendar::getPeriodMonth(date('Y-m') . '-01'); $eplans = $this->model('EmployeePlan')->getByUserId($id, $f); $plans = $this->model('Plan')->getByGroups(); $form7 = $this->form('ESalaryAdd'); $esalary = $this->model('EmployeeSalary')->getByUserId($id); if (null != $esalary) { $form7->setData($esalary); } else { $form7->setData('user_id', $id); } return $this->renderPartial('employee/editor/base', ['employee' => $employee, 'form0' => $form0->createBuilder(), 'form1' => $form1->createBuilder(), 'doc' => $doc, 'docmap' => $docmap, 'docs' => $docs, 'doc_progress' => $doc_progress, 'form2' => $form2->createBuilder(), 'contacts' => $contacts, 'econtacts' => $econtacts, 'cmap' => $cmap, 'contact_progress' => $contact_progress, 'form3' => $form3->createBuilder(), 'departments' => $departments, 'form4' => $form4->createBuilder(), 'userrule' => $userrule, 'roles' => $roles, 'form5' => $form5->createBuilder(), 'days' => $days, 'tmanager' => $tmanager, 'tmanager_progress' => $tmanager_progress, 'form6' => $form6->createBuilder(), 'edepartments' => $edepartments, 'plans' => $plans, 'eplans' => $eplans, 'form7' => $form7->createBuilder(), 'esalary' => $esalary, 'is_rule' => 1, 'user_id' => $id]); }
public static function cluiningTime($tmanager, $timesheet = [], $workdays = [], $end_mount = NULL) { $times = []; //weekdays foreach ($tmanager as $_tmanager) { $period_start = strtotime($_tmanager['since']); $period_end = strtotime(\Arr::get($_tmanager, 'till', $end_mount . ' 23:59:59')); foreach ($workdays as $_wodrk_day) { $notclose = false; $recast = 0; if (strtotime($_wodrk_day) < time()) { $sheet = \Arr::get($timesheet, $_wodrk_day, NULL); if ($sheet) { $stamp = strtotime($sheet['start']); $stamp_end = strtotime($sheet['finish']); $w = date('w', $stamp); $time = strtotime(date('H:i:s', $stamp)); $finish_day = date('Y-m-d', $stamp_end); if ($finish_day != $_wodrk_day) { $d = strtotime($finish_day) - strtotime($_wodrk_day); // //$time = null; //$finish = null; if ($d > 0) { $notclose = true; } } else { $finish = strtotime(date('H:i:s', $stamp)); } $time_work = $finish - $time; $hour = $time_work / 3600; $hour = ceil($hour / 0.5) * 0.5; $timetable_start = \Arr::get($_tmanager, 's' . $w, 0); $timetable_end = \Arr::get($_tmanager, 'e' . $w, 0); if (!empty($timetable_start) and !empty($timetable_end)) { if ($stamp > $period_start and $stamp < $period_end) { //входит в отрезок //recast if ($time > 0) { $recast_before = strtotime($timetable_start) - $time; if ($recast_before > 0) { $recast += floor($recast_before / 3600); } } if ($finish > 0) { $recast_after = $finish - strtotime($timetable_end); if ($recast_after > 0) { $recast += floor($recast_after / 3600); } } $times[$_wodrk_day] = ['day' => $w, 'lang' => Calendar::weekdays($w), 'date' => $_wodrk_day, 'start' => $sheet['start'], 'finish' => $sheet['finish'], 's' => $timetable_start, 'e' => $timetable_end, 'hour' => $hour, 'notclose' => $notclose, 'recast' => $recast]; unset($timesheet[$_wodrk_day]); } } } else { $stamp = strtotime($_wodrk_day); $w = date('w', $stamp); $timetable_start = \Arr::get($_tmanager, 's' . $w, NULL); $timetable_end = \Arr::get($_tmanager, 'e' . $w, NULL); if ($timetable_start) { if ($stamp > $period_start and $stamp < $period_end) { //входит в отрезок $times[$_wodrk_day] = ['day' => $w, 'lang' => Calendar::weekdays($w), 'date' => $_wodrk_day, 'late' => $timetable_start, 'start' => 0, 'finish' => 0, 's' => $timetable_start, 'e' => $timetable_end]; } } } } else { } } } /** обработаем выходные дни */ if (!empty($timesheet)) { foreach ($tmanager as $_tmanager) { $period_start = strtotime($_tmanager['since']); $period_end = strtotime(\Arr::get($tmanager, 'till', $end_mount . ' 23:59:59')); foreach ($timesheet as $sheet) { if ($sheet) { $stamp = strtotime($sheet['start']); $stamp_end = strtotime($sheet['finish']); $w = date('w', $stamp); $time = strtotime(date('H:i:s', $stamp)); $finish = strtotime(date('H:i:s', $stamp_end)); $timetable_start = \Arr::get($_tmanager, 's' . $w, NULL); $timetable_end = \Arr::get($_tmanager, 'e' . $w, NULL); if ($stamp > $period_start and $stamp < $period_end) { //входит в отрезок $_wodrk_day = date('Y-m-d', $stamp); $time_work = $finish - $time; $hour = $time_work / 3600; $hour = ceil($hour / 0.5) * 0.5; $times[$_wodrk_day] = ['day' => $w, 'lang' => Calendar::weekdays($w), 'date' => $_wodrk_day, 'start' => $sheet['start'], 'finish' => $sheet['finish'], 's' => $timetable_start, 'e' => $timetable_end, 'hour' => $hour]; } } } } } ksort($times); return $times; }