From 5f32f4aa2d7742f921c0a10245a818c43b52b683 Mon Sep 17 00:00:00 2001 From: "olaf.braun" Date: Thu, 26 Jun 2025 23:58:39 +0200 Subject: [PATCH] =?UTF-8?q?AddOn/Datenexport=5FZeiterfassung/Kalender-Expo?= =?UTF-8?q?rt-Parser.php=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Kalender-Export-Parser.php | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 AddOn/Datenexport_Zeiterfassung/Kalender-Export-Parser.php 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