Zeiterfassung
* Anpassungen für Conny Reports für Stichtagauswertungen
This commit is contained in:
@@ -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 . '"');
|
||||
|
||||
Reference in New Issue
Block a user