needlogin = true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me", $me); if (!$me->can(["Fibu"])) { $this->redirect("Dashboard"); } } protected function indexAction() { $this->layout()->setTemplate("TimerecordingReport/Index"); $timerecordingCategoriess = TimerecordingCategoryModel::getAll(); $this->layout()->set("timerecordingCategoriess", $timerecordingCategoriess); $timerecordingusers = UserModel::search(['employee' => 'true']); $this->layout()->set("timerecordingusers", $timerecordingusers); $timerecordings = TimerecordingModel::getAll(); $this->layout()->set("timerecordings", $timerecordings); } protected function apiAction() { $do = $this->request->do; $datatype = $this->request->datatype; $dataweek = $this->request->dataweek; $datamonth = $this->request->datamonth; $datayear = $this->request->datayear; $data = []; switch ($do) { case "getTimerecordings": $return = $this->getTimerecordingsApi($datatype, $dataweek, $datamonth, $datayear); break; case "getTimerecordingsTimes": $return = $this->getTimerecordingsTimes($datatype, $dataweek, $datamonth, $datayear); break; default: $return = false; } if (!is_array($return) || !count($return)) { $data = ["status" => "error"]; $this->returnJson($data); } $data['status'] = "OK"; $data['result'] = $return; $this->returnJson($data); } protected function getTimerecordingsApi($datatype, $dataweek, $datamonth, $datayear) { $mustSeconds = 0; $isSeconds = 0; $holiDays = 0; $plusHours = 0; $rows = []; $employee = TimerecordingEmployeeModel::getAll(); if ($employee) { $holiDays = $employee[0]->holidays; $plusHours = $employee[0]->plushours; } $workinghours = TimerecordingEmployeeWorkingHourModel::getAll(); $holidays = TimerecordingHolidayModel::getAll(); foreach ($workinghours as $workinghour) { $whstart = strtotime(date('Y-m-d', time()) . " " . $workinghour->start . ":00"); $whend = strtotime(date('Y-m-d', time()) . " " . $workinghour->end . ":00"); if (!$workingHours[$workinghour->user_id][$workinghour->day]) { $workingHours[$workinghour->user_id][$workinghour->day] = $whend - $whstart; } else { $workingHours[$workinghour->user_id][$workinghour->day] = $workingHours[$workinghour->user_id][$workinghour->day] + $whend - $whstart; } } foreach ($holidays as $holiday) { $holiDay[date('Y-m-d', $holiday->timestamp)] = $holiday->timestamp; } if ($datatype == 1) { $kw = date('W', $dataweek); $year = date('Y', $dataweek); $timestamp_montag = strtotime("{$year}-W{$kw}"); $timestamp_sonntag = strtotime("{$year}-W{$kw}-7"); $firstdate = strtotime(date("Y-m-d", $timestamp_montag) . " 00:00:00"); $lastdate = strtotime(date("Y-m-d", $timestamp_sonntag) . ' 23:59:59'); $searchArray = ['start' => $timestamp_montag, 'end' => $lastdate]; $daycounter = '0'; $timestamp = $timestamp_montag; for ($i = 1; $i <= 7; $i++) { $dDate = date('Y-m-d', $timestamp); $dDay = date('w', $timestamp); if (!$holiDay[$dDate]) { // $mustSeconds = $mustSeconds + $workingHours[$dDay]; } $timestamp = $timestamp + 86400; } } else if ($datatype == 2) { $firstdate = strtotime(date("Y-m-01", $datamonth)); $lastdate = strtotime(date("Y-m-t", $datamonth)); $daycount = date("t", $datamonth); $lastdate = strtotime(date("Y-m-d", $lastdate) . ' 23:59:59'); $searchArray = ['start' => $firstdate, 'end' => $lastdate]; $timestamp = $firstdate; for ($i = 1; $i <= $daycount; $i++) { $dDate = date('Y-m-d', $timestamp); $dDay = date('w', $timestamp); if (!$holiDay[$dDate]) { // $mustSeconds = $mustSeconds + $workingHours[$dDay]; } $timestamp = $timestamp + 86400; } } else if ($datatype == 3) { $firstdate = strtotime(date("Y-01-01", $datayear)); $lastdate = strtotime(date("Y-12-31 23:59:59", $datayear)); $daycount = date("t", $datamonth); $lastdate = strtotime(date("Y-m-d", $lastdate) . ' 23:59:59'); $searchArray = ['start' => $firstdate, 'end' => $lastdate]; $timestamp = $firstdate; for ($i = 1; $i <= $daycount; $i++) { $dDate = date('Y-m-d', $timestamp); $dDay = date('w', $timestamp); if (!$holiDay[$dDate]) { //$mustSeconds = $mustSeconds + $workingHours[$dDay]; } $timestamp = $timestamp + 86400; } } $daysgerm = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"); $timerecordingcategories = TimerecordingCategoryModel::getAll(); $timerecordings = TimerecordingModel::search($searchArray); $responsecount = count($timerecordings); foreach ($timerecordings as $timerecording): $state = ""; $enddate = ""; $sum = "-"; $day = ""; $orderdate = $timerecording->start; if ($timerecording->timerecordingCategory->hourday == 1) { $date = date("d.m.Y", $timerecording->start); $datadate = date("Y-m-d", $timerecording->start); $start = date("H:i", $timerecording->start); $end = date("H:i", $timerecording->end); $seconds = $timerecording->end - $timerecording->start; $minutes = floor(($seconds % 3600) / 60); $hours = floor($seconds / 3600); $sum = sprintf("%02d", $hours) . ":" . sprintf("%02d", $minutes); $day = $daysgerm[date("w", $timerecording->start)]; $isSeconds = $isSeconds + $seconds; } else if ($timerecording->timerecordingCategory->hourday == 2 || ($timerecording->timerecordingCategory->hourday == 3 && $timerecording->end)) { $date = date("d.m.", $timerecording->start) . " - " . $daysgerm[date("w", $timerecording->end)] . " " . date("d.m.Y", $timerecording->end); $datadate = date("Y-m-d", $timerecording->start); $enddate = date("Y-m-d", $timerecording->end + 7200); $start = "-"; $end = "-"; $day = $daysgerm[date("w", $timerecording->start)]; if ($lastdate < $timerecording->end) { $endtimecalc = $lastdate; } else { $endtimecalc = $timerecording->end; } if ($firstdate > $timerecording->start) { $starttimecalc = $firstdate; } else { $starttimecalc = $timerecording->start; } $summcounter = 0; $savecounter = 0; // echo $starttimecalc."
"; for ($i = $starttimecalc; $i <= $endtimecalc; $i = $i + 86400) { $holidaycounter = $workingHours[$timerecording->user_id][date("w", $i)]; $daycheck = date("Y-m-d", $i); if (!$holiDay[$daycheck]) { $isSeconds = $isSeconds + $holidaycounter; $summcounter = $summcounter + $holidaycounter;; } if ($savecounter == 1000) { echo $savecounter; die(); } $savecounter++; } $seconds = $summcounter; $minutes = floor(($seconds % 3600) / 60); $hours = floor($seconds / 3600); $sum = sprintf("%02d", $hours) . ":" . sprintf("%02d", $minutes); } else if ($timerecording->timerecordingCategory->hourday == 3 && !$timerecording->end) { $date = date("d.m.Y", $timerecording->start) . " - " . $daysgerm[date("w", time())] . " " . date("d.m.Y", time());; $datadate = date("Y-m-d", $timerecording->start); $enddatetemp = date("Y-m-d", time()); $enddatetemp = strtotime($enddatetemp . " 23:59:59"); $enddate = date("Y-m-d", $enddatetemp + 7200); $start = "-"; $end = "-"; $day = $daysgerm[date("w", $timerecording->start)]; if ($lastdate < time()) { $endtimecalc = $lastdate; } else { $endtimecalc = time(); } $summcounter = 0; if ($firstdate > $timerecording->start) { $starttimecalc = $firstdate; } else { $starttimecalc = $timerecording->start; } $summcounter = 0; $savecounter = 0; // echo $starttimecalc."
"; for ($i = $starttimecalc; $i <= $endtimecalc; $i = $i + 86400) { $holidaycounter = $workingHours[$timerecording->user_id][date("w", $i)]; $daycheck = date("Y-m-d", $i); if (!$holiDay[$daycheck]) { $isSeconds = $isSeconds + $holidaycounter; $summcounter = $summcounter + $holidaycounter;; } if ($savecounter == 1000) { echo $savecounter; die(); } $savecounter++; } $seconds = $summcounter; $minutes = floor(($seconds % 3600) / 60); $hours = floor($seconds / 3600); $sum = sprintf("%02d", $hours) . ":" . sprintf("%02d", $minutes); } if ($timerecording->timerecordingCategory->approval == 1 && $timerecording->approved == 0) { $state = ''; } else if ($timerecording->timerecordingCategory->approval == 1 && $timerecording->approved == 1) { $state = ''; } $edit = ""; if ($timerecording->businesstrip == 1) { $category = "" . $timerecording->timerecordingCategory->name . " (Dienstreise: " . $timerecording->businesstrip_info . ")"; } else { $category = $timerecording->timerecordingCategory->name; } if ($timerecording->timerecordingCategory->hourday == 3 && !$timerecording->end) { $category = $category . " (Offen)"; } if ($timerecording->completed == 0): if ($timerecording->approved == 0) : $edit = ''; else : $edit .= '
'; endif; $edit .= ''; endif; if ($datatype == 3 && $timerecording->timerecordingCategory->hourday == 1) { } else { $rows[] = array( 'user' => array('user' => $timerecording->user->name, 'order' => $timerecording->user->name), 'date' => array('date' => $state . $day . " " . $date, 'order' => $orderdate), 'start' => array('start' => $start, 'order' => $start), 'end' => array('end' => $end, 'order' => $end), 'sum' => array('sum' => $sum, 'order' => $sum), 'cstart' => array('cstart' => $datadate, 'order' => $datadate), 'cend' => array('cend' => $enddate, 'order' => $enddate), 'ccategory' => array('ccategory' => $timerecording->timerecordingCategory->name, 'order' => $timerecording->timerecordingCategory->name), 'category' => array('category' => $category, 'order' => $timerecording->timerecordingCategory->name), 'comment' => array('comment' => $timerecording->comment, 'order' => $timerecording->comment), 'edit' => array('edit' => $edit, 'order' => $edit), ); } endforeach; $json['success'] = true; $json['time']['is'] = sprintf('%02dh:%02dm', floor($isSeconds / 3600), floor($isSeconds / 60 % 60)); $json['time']['must'] = sprintf('%02dh:%02dm', floor($mustSeconds / 3600), floor($mustSeconds / 60 % 60)); $json['time']['holidays'] = $holiDays; $json['time']['plushours'] = sprintf('%02dh:%02dm', floor($plusHours / 3600), floor($plusHours / 60 % 60)); $json['data'] = $rows; $json['recordsFiltered'] = $responsecount; $json['recordsTotal'] = $responsecount; $json = json_encode($json); echo trim($json); die(); } protected function getTimerecordingsTimes($datatype, $dataweek, $datamonth, $datayear) { $r = $this->request; $mustSeconds = 0; $isSeconds = 0; $holiDays = 0; $plusHours = 0; $rows = []; $employee = TimerecordingEmployeeModel::search(['user_id' => $r->user_id]); if ($employee) { $holiDays = $employee[0]->holidays; $plusHours = $employee[0]->plushours; $auto_workinghours = $employee[0]->auto_workinghours; $startdate = $employee[0]->startdate; } $workinghours = TimerecordingEmployeeWorkingHourModel::search(['user_id' => $r->user_id]); $holidays = TimerecordingHolidayModel::getAll(); foreach ($workinghours as $workinghour) { $whstart = strtotime(date('Y-m-d', time()) . " " . $workinghour->start . ":00"); $whend = strtotime(date('Y-m-d', time()) . " " . $workinghour->end . ":00"); if (!$workingHours[$workinghour->day]) { $workingHours[$workinghour->day] = $whend - $whstart; } else { $workingHours[$workinghour->day] = $workingHours[$workinghour->day] + $whend - $whstart; } } foreach ($holidays as $holiday) { $holiDay[date('Y-m-d', $holiday->timestamp)] = $holiday->timestamp; } if ($datatype == 1) { $kw = date('W', $dataweek); $year = date('Y', $dataweek); $timestamp_montag = strtotime("{$year}-W{$kw}"); $timestamp_sonntag = strtotime("{$year}-W{$kw}-7"); $firstdate = strtotime(date("Y-m-d", $timestamp_montag) . " 00:00:00"); $lastdate = strtotime(date("Y-m-d", $timestamp_sonntag) . ' 23:59:59'); $searchArray = ['user_id' => $r->user_id, 'start' => $timestamp_montag, 'end' => $lastdate]; $daycounter = '0'; $timestamp = $timestamp_montag; for ($i = 1; $i <= 7; $i++) { $dDate = date('Y-m-d', $timestamp); $dDay = date('w', $timestamp); if (!$holiDay[$dDate] && $dDate >= date('Y-m-d', $startdate)) { $mustSeconds = $mustSeconds + $workingHours[$dDay]; } $timestamp = $timestamp + 86400; } } else if ($datatype == 2) { $firstdate = strtotime(date("Y-m-01", $datamonth)); $lastdate = strtotime(date("Y-m-t", $datamonth)); $daycount = date("t", $datamonth); $lastdate = strtotime(date("Y-m-d", $lastdate) . ' 23:59:59'); $searchArray = ['user_id' => $r->user_id, 'start' => $firstdate, 'end' => $lastdate]; $timestamp = $firstdate; for ($i = 1; $i <= $daycount; $i++) { $dDate = date('Y-m-d', $timestamp); $dDay = date('w', $timestamp); if (!$holiDay[$dDate] && $dDate >= date('Y-m-d', $startdate)) { $mustSeconds = $mustSeconds + $workingHours[$dDay]; } $timestamp = $timestamp + 86400; } } else if ($datatype == 3) { $firstdate = strtotime(date("Y-01-01", $datayear)); $lastdate = strtotime(date("Y-12-31 23:59:59", $datayear)); $daycount = date("t", $datamonth); $lastdate = strtotime(date("Y-m-d", $lastdate) . ' 23:59:59'); $searchArray = ['user_id' => $r->user_id, 'start' => $firstdate, 'end' => $lastdate]; $timestamp = $firstdate; for ($i = 1; $i <= $daycount; $i++) { $dDate = date('Y-m-d', $timestamp); $dDay = date('w', $timestamp); if (!$holiDay[$dDate]) { $mustSeconds = $mustSeconds + $workingHours[$dDay]; } $timestamp = $timestamp + 86400; } } $daysgerm = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"); $timerecordingcategories = TimerecordingCategoryModel::getAll(); $timerecordings = TimerecordingModel::search($searchArray); $responsecount = count($timerecordings); foreach ($timerecordings as $timerecording): $state = ""; $enddate = ""; $sum = "-"; $day = ""; $orderdate = $timerecording->start; if ($timerecording->timerecordingCategory->hourday == 1) { $date = date("d.m.Y", $timerecording->start); $datadate = date("Y-m-d", $timerecording->start); $start = date("H:i", $timerecording->start); $end = date("H:i", $timerecording->end); $seconds = $timerecording->end - $timerecording->start; $minutes = floor(($seconds % 3600) / 60); $hours = floor($seconds / 3600); $sum = sprintf("%02d", $hours) . ":" . sprintf("%02d", $minutes); $day = $daysgerm[date("w", $timerecording->start)]; $isSeconds = $isSeconds + $seconds; } else if ($timerecording->timerecordingCategory->hourday == 2 || ($timerecording->timerecordingCategory->hourday == 3 && $timerecording->end)) { $date = date("d.m.", $timerecording->start) . " - " . $daysgerm[date("w", $timerecording->end)] . " " . date("d.m.Y", $timerecording->end); $datadate = date("Y-m-d", $timerecording->start); $enddate = date("Y-m-d", $timerecording->end); $start = "-"; $end = "-"; $day = $daysgerm[date("w", $timerecording->start)]; if ($lastdate < $timerecording->end) { $endtimecalc = $lastdate; } else { $endtimecalc = $timerecording->end; } if ($firstdate > $timerecording->start) { $starttimecalc = $firstdate; } else { $starttimecalc = $timerecording->start; } $summcounter = 0; $savecounter = 0; for ($i = $starttimecalc; $i <= $endtimecalc; $i = $i + 86400) { $holidaycounter = $workingHours[date("w", $i)]; $isSeconds = $isSeconds + $holidaycounter; $summcounter = $summcounter + $holidaycounter; if ($savecounter == 1000) { echo $savecounter; die(); } $savecounter++; } $seconds = $summcounter; $minutes = floor(($seconds % 3600) / 60); $hours = floor($seconds / 3600); $sum = sprintf("%02d", $hours) . ":" . sprintf("%02d", $minutes); } else if ($timerecording->timerecordingCategory->hourday == 3 && !$timerecording->end) { $date = date("d.m.Y", $timerecording->start) . " - " . $daysgerm[date("w", time())] . " " . date("d.m.Y", time());; $datadate = date("Y-m-d", $timerecording->start); $start = "-"; $end = "-"; $day = $daysgerm[date("w", $timerecording->start)]; if ($lastdate < $timerecording->end) { $endtimecalc = $lastdate; } else { $endtimecalc = $timerecording->end; } if ($firstdate > $timerecording->start) { $starttimecalc = $firstdate; } else { $starttimecalc = $timerecording->start; } $summcounter = 0; $savecounter = 0; for ($i = $starttimecalc; $i <= $endtimecalc; $i = $i + 86400) { $holidaycounter = $workingHours[date("w", $i)]; $isSeconds = $isSeconds + $holidaycounter; $summcounter = $summcounter + $holidaycounter; if ($savecounter == 1000) { echo $savecounter; die(); } $savecounter++; } $seconds = $summcounter; $minutes = floor(($seconds % 3600) / 60); $hours = floor($seconds / 3600); $sum = sprintf("%02d", $hours) . ":" . sprintf("%02d", $minutes); } if ($timerecording->timerecordingCategory->approval == 1 && $timerecording->approved == 0) { $state = ''; } else if ($timerecording->timerecordingCategory->approval == 1 && $timerecording->approved == 1) { $state = ''; } $edit = ""; if ($timerecording->businesstrip == 1) { $category = "" . $timerecording->timerecordingCategory->name . " (Dienstreise: " . $timerecording->businesstrip_info . ")"; } else { $category = $timerecording->timerecordingCategory->name; } if ($timerecording->timerecordingCategory->hourday == 3 && !$timerecording->end) { $category = $category . "(offen)"; } if ($timerecording->completed == 0 && $timerecording->timerecordingCategory->only_admin == 0): if ($timerecording->approved == 0) : $edit = ''; else : $edit .= '
'; endif; $edit .= ''; endif; if ($datatype == 3 && $timerecording->timerecordingCategory->hourday == 1) { } else { } endforeach; $json['success'] = true; $json['time']['auto_workinghours'] = $auto_workinghours; $json['time']['is'] = sprintf('%02dh:%02dm', floor($isSeconds / 3600), floor($isSeconds / 60 % 60)); $json['time']['must'] = sprintf('%02dh:%02dm', floor($mustSeconds / 3600), floor($mustSeconds / 60 % 60)); $json['time']['holidays'] = $holiDays; $json['time']['plushours'] = sprintf('%02dh:%02dm', floor($plusHours / 3600), floor($plusHours / 60 % 60)); $json['recordsFiltered'] = $responsecount; $json['recordsTotal'] = $responsecount; $json = json_encode($json); echo trim($json); die(); } protected function addAction() { } protected function editAction() { } protected function saveAction() { } protected function deleteAction() { } }