diff --git a/AddOn/Datenexport_Zeiterfassung/Kalender-Export-Parser.php b/AddOn/Datenexport_Zeiterfassung/Kalender-Export-Parser.php new file mode 100644 index 00000000..3231e8c8 --- /dev/null +++ b/AddOn/Datenexport_Zeiterfassung/Kalender-Export-Parser.php @@ -0,0 +1,157 @@ +"; + echo json_encode(parseCsvToFilteredArray($data)); + + + +function parseCsvToFilteredArray(string $csvContent): array { + $feiertage = [ + 'Neujahr', 'Karfreitag', 'Ostermontag', 'Tag der Arbeit', + 'Christi Himmelfahrt', 'Pfingstsonntag', 'Pfingstmontag', + 'Fronleichnam', 'Mariä Himmelfahrt', 'Tag der Deutschen Einheit', + 'Allerheiligen', '1. Weihnachtstag', '2. Weihnachtstag' + ]; + + $personen = []; + $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $csvContent)); + + foreach ($lines as $line) { + $line = trim($line); + if ($line === '') continue; + + $fields = explode(';', $line); + if (count($fields) < 11) continue; + + list( + $nr, + $nachname, + $vorname, + $datum, + $email, + $fehlzeitNR1HT, + $fehlzeitNR2HT, + $fehlzeitName1HT, + $fehlzeitName2HT, + $tagtypNR, + $tagtypName + ) = $fields; + + $hatFehlzeit = !empty($fehlzeitNR1HT) || !empty($fehlzeitNR2HT); + $istFeiertag = in_array($tagtypName, $feiertage); + + if (!$hatFehlzeit && !$istFeiertag) { + continue; // ohne Fehlzeit und kein Feiertag: überspringen + } + + $personKey = "$nr|$nachname|$vorname|$email"; + + if (!isset($personen[$personKey])) { + $personen[$personKey] = [ + 'nr' => $nr, + 'nachname' => $nachname, + 'vorname' => $vorname, + 'email' => $email, + 'tage_fehlzeit' => [], + 'tage_feiertage' => [] + ]; + } + + $tagData = [ + 'datum' => $datum, + 'fehlzeitNR1HT' => $fehlzeitNR1HT, + 'fehlzeitNR2HT' => $fehlzeitNR2HT, + 'fehlzeitName1HT' => $fehlzeitName1HT, + 'fehlzeitName2HT' => $fehlzeitName2HT, + 'tagtypNR' => $tagtypNR, + 'tagtypName' => $tagtypName + ]; + + if ($hatFehlzeit) { + $personen[$personKey]['tage_fehlzeit'][] = $tagData; + } + + if ($istFeiertag) { + $personen[$personKey]['tage_feiertage'][] = $tagData; + } + } + + // Personen ohne Fehlzeit- und Feiertag-Tage entfernen + $personen = array_filter($personen, fn($p) => count($p['tage_fehlzeit']) > 0 || count($p['tage_feiertage']) > 0); + + uasort($personen, fn($a, $b) => [$a['nachname'], $a['vorname']] <=> [$b['nachname'], $b['vorname']]); + + return array_values($personen); +} \ No newline at end of file