diff --git a/Layout/default/TimerecordingReportExport/Index.php b/Layout/default/TimerecordingReportExport/Index.php index 5a36e5b43..42919b1ac 100644 --- a/Layout/default/TimerecordingReportExport/Index.php +++ b/Layout/default/TimerecordingReportExport/Index.php @@ -29,16 +29,24 @@
+
"> +

Auswertungen Stichtag

+

Hier wird eine XLS Auswertung pro Mitarbeiter generiert mit Urlaub, Mehrstunden und + Gutstunden + zum Stichtag X
+ Zur Zeit ist der Stichtag auf den letzten Tag des ausgewählten Monats gesetzt.
+

+
+ +
+ + +
-

Auswertungen Stichtag

-

Hier wird eine XLS Auswertung pro Mitarbeiter generiert mit Urlaub, Mehrstunden und Gutstunden - zum Stichtag X

-
-
- -
-
+
diff --git a/Layout/default/menu.php b/Layout/default/menu.php index fd2dd7619..36e4c4a43 100644 --- a/Layout/default/menu.php +++ b/Layout/default/menu.php @@ -44,6 +44,7 @@
  • "> Freigaben
  • "> Auswertung/Korrektur
  • "> Verrechnung
  • +
  • "> Reports
  • "> Buchungsarten
  • "> Feiertage
  • "> Personaladministration
  • diff --git a/application/TimerecordingReportExport/TimerecordingReportExportController.php b/application/TimerecordingReportExport/TimerecordingReportExportController.php index f4decabab..ffb55b610 100644 --- a/application/TimerecordingReportExport/TimerecordingReportExportController.php +++ b/application/TimerecordingReportExport/TimerecordingReportExportController.php @@ -28,17 +28,28 @@ class TimerecordingReportExportController extends mfBaseController protected function exportdeadlineAction() { + $r = $this->request; + $month=$r->date; + if (!$month) { + $month = date('Y-m-d'); + } + $timerecordingBillings = TimerecordingBillingModel::getAll(); + foreach ($timerecordingBillings as $value) { + $timerecordingBilling[$value->month] = $value; + } $timerecordingBillingsEmployees = TimerecordingBillingEmployeeModel::getAllOrderbyNameDate(); + + $timerecordingemployees = TimerecordingEmployeeModel::getAll(); - $enddate = strtotime("01." . '12.2024'); + $enddate = strtotime($month); $enddate = strtotime("last day of this month", $enddate); $enddate = strtotime("23:59:59", $enddate); $holidays = []; - $generateTimerecording=new TimerecordingController(); - $newtimerecordings=$generateTimerecording->getTimerecordingsApi(6, '1672527600', '1672527600', '1672527600', '1672527600', '1735685940', 25); - var_dump($newtimerecordings); - die(); +// $generateTimerecording=new TimerecordingController(); +// $newtimerecordings=$generateTimerecording->getTimerecordingsApi(6, '1672527600', '1672527600', '1672527600', '1672527600', '1735685940', 25); +// var_dump($newtimerecordings); +// die(); foreach ($timerecordingemployees as $timerecordingemployee) { @@ -51,8 +62,7 @@ class TimerecordingReportExportController extends mfBaseController $headers = [ - 'Monat', 'Mitarbeiter', 'LZ', 'NLZ', 'Urlaub', 'LZ + NLZ', - 'Sollst.', 'Sollabweichung', 'Mehrstunden', 'Gutstunden' + 'Stichtag', 'Pers. Nr.', 'Mitarbeiter', 'Urlaub', 'Mehrstunden', 'Gutstunden' ]; if ($this->me->superexpertEnabled()) { $headers[] = 'Black P. St.'; @@ -68,67 +78,43 @@ class TimerecordingReportExportController extends mfBaseController $bpadiff = 0; $overtimediff = 0; $plushoursdiff = 0; + + foreach ($timerecordingBillingsEmployees as $timerecordingbillingsemployee) { // Daten vorbereiten (Logik aus der View übernehmen) $user = new User($timerecordingbillingsemployee->timerecordingEmployee->user->id); $employee_number = (string)$user->getFlag('employee_number'); - $nlz_text = ""; - if ($timerecordingbillingsemployee->nlz) { - $nlz_details = json_decode($timerecordingbillingsemployee->nlz, true); - foreach ($nlz_details as $key => $nlz_detail) { - if ($nlz_detail > 0) { - if ($nlz_detail < 100) { - $nlz_text .= $key . ": " . $nlz_detail . " Tag(e)\n"; - } else { - $nlz_text .= $key . ": " . round($nlz_detail / 3600, 2) . " Stunden\n"; - } - } - } - } - $nlz_text = rtrim($nlz_text, "\n"); // Letzten Zeilenumbruch entfernen if ($oldEmployee_id != $timerecordingbillingsemployee->timerecordingEmployee_id) { $bpadiff = 0; $overtimediff = 0; $plushoursdiff = 0; } - $bpadiff += $timerecordingbillingsemployee->transfer_bpahours; - $overtimediff += $timerecordingbillingsemployee->transfer_overtime; - $plushoursdiff += $timerecordingbillingsemployee->transfer_plushours; + $bpadiff = $bpadiff + $timerecordingbillingsemployee->transfer_bpahours; + $overtimediff = $overtimediff + $timerecordingbillingsemployee->transfer_overtime; + $plushoursdiff = $plushoursdiff + $timerecordingbillingsemployee->transfer_plushours; - // Werte berechnen - $ishours = round($timerecordingbillingsemployee->ishours / 3600, 2); - $ishourssum = round($timerecordingbillingsemployee->ishourssum / 3600, 2); - $musthours = round($timerecordingbillingsemployee->musthours / 3600, 2); - $deviation = round(($timerecordingbillingsemployee->ishourssum - $timerecordingbillingsemployee->musthours) / 3600, 2); - $plushours_all = round(($timerecordingbillingsemployee->plushours_all + $timerecordingbillingsemployee->transfer_plushours) / 3600, 2); - $overtime_now = round(($timerecordingbillingsemployee->timerecordingEmployee->overtime_now + $overtimediff) / 3600, 2); - $bpahours = round(($timerecordingbillingsemployee->timerecordingEmployee->bpahours + $bpadiff) / 3600, 2); - - // Zeile mit Daten füllen - $sheet->setCellValue('A' . $row, $timerecordingbillingsemployee->timerecordingBilling->month); - $sheet->setCellValue('B' . $row, "(" . $employee_number . ") " . $timerecordingbillingsemployee->timerecordingEmployee->user->name); - $sheet->setCellValue('C' . $row, $ishours); - $sheet->setCellValue('D' . $row, $nlz_text); - $sheet->setCellValue('E' . $row, $holidays[$timerecordingbillingsemployee->timerecordingEmployee->user_id]); - $sheet->setCellValue('F' . $row, $ishourssum); - $sheet->setCellValue('G' . $row, $musthours); - $sheet->setCellValue('H' . $row, $deviation); - $sheet->setCellValue('I' . $row, $plushours_all); - $sheet->setCellValue('J' . $row, $overtime_now); - - if ($this->me->superexpertEnabled()) { - $sheet->setCellValue('K' . $row, $bpahours); + if ($timerecordingbillingsemployee->timerecordingBilling->month != date("m.Y",$enddate)) { + $oldEmployee_id = $timerecordingbillingsemployee->timerecordingEmployee_id; + continue; } + $sheet->setCellValue('A' . $row, date("d.m.Y",$enddate). " "); + $sheet->setCellValue('B' . $row, $employee_number); + $sheet->setCellValue('C' . $row, $timerecordingbillingsemployee->timerecordingEmployee->user->name); + $sheet->setCellValue('D' . $row, $holidays[$timerecordingbillingsemployee->timerecordingEmployee->user_id]); + $sheet->setCellValue('E' . $row, number_format(round(($timerecordingbillingsemployee->plushours_all + $timerecordingbillingsemployee->transfer_plushours) / 3600, 2), "2", ",", ".")); + $sheet->setCellValue('F' . $row, number_format(round(($timerecordingbillingsemployee->timerecordingEmployee->overtime_now + $overtimediff) / 3600, 2), "2", ",", ".")); + $oldEmployee_id = $timerecordingbillingsemployee->timerecordingEmployee_id; $row++; } - // 5. Spalten formatieren und optimieren - // Zahlenformat für Stunden (2 Dezimalstellen) $number_format_code = '#,##0.00'; + + + $sheet->getStyle('A2:A' . $row)->getNumberFormat()->setFormatCode('@'); $sheet->getStyle('C2:C' . $row)->getNumberFormat()->setFormatCode($number_format_code); $sheet->getStyle('F2:F' . $row)->getNumberFormat()->setFormatCode($number_format_code); $sheet->getStyle('G2:G' . $row)->getNumberFormat()->setFormatCode($number_format_code); @@ -145,7 +131,7 @@ class TimerecordingReportExportController extends mfBaseController } $writer = new Xlsx($spreadsheet); - $filename = 'Monatsuebersicht_' . date('Y-m-d') . '.xlsx'; + $filename = 'Monatsuebersicht_' . date('Y-m-d',$enddate) . '.xlsx'; header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $filename . '"');