AddOn/Datenexport_Zeiterfassung/Kalender-Export-Parser.php hinzugefügt
This commit is contained in:
parent
a5ea93bc6d
commit
5f32f4aa2d
|
|
@ -0,0 +1,157 @@
|
|||
<?php
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
|
||||
|
||||
|
||||
$data = "
|
||||
10;Musterfrau;Max;01.06.2025;Max.Musterfrau@kunde.tld;;;;;2;Sonntag;
|
||||
10;Musterfrau;Max;02.06.2025;Max.Musterfrau@kunde.tld;85;85;Mob.Arb.;Mob.Arb.;3;Montag;
|
||||
10;Musterfrau;Max;03.06.2025;Max.Musterfrau@kunde.tld;85;85;Mob.Arb.;Mob.Arb.;4;Dienstag;
|
||||
10;Musterfrau;Max;04.06.2025;Max.Musterfrau@kunde.tld;85;85;Mob.Arb.;Mob.Arb.;5;Mittwoch;
|
||||
10;Musterfrau;Max;05.06.2025;Max.Musterfrau@kunde.tld;85;85;Mob.Arb.;Mob.Arb.;6;Donnerstag;
|
||||
10;Musterfrau;Max;06.06.2025;Max.Musterfrau@kunde.tld;;;;;7;Freitag;
|
||||
10;Musterfrau;Max;07.06.2025;Max.Musterfrau@kunde.tld;;;;;8;Samstag;
|
||||
10;Musterfrau;Max;08.06.2025;Max.Musterfrau@kunde.tld;;;;;48;Pfingstsonntag;
|
||||
10;Musterfrau;Max;09.06.2025;Max.Musterfrau@kunde.tld;;;;;49;Pfingstmontag;
|
||||
10;Musterfrau;Max;10.06.2025;Max.Musterfrau@kunde.tld;81;81;GLZ;GLZ;4;Dienstag;
|
||||
10;Musterfrau;Max;11.06.2025;Max.Musterfrau@kunde.tld;85;85;Mob.Arb.;Mob.Arb.;5;Mittwoch;
|
||||
10;Musterfrau;Max;12.06.2025;Max.Musterfrau@kunde.tld;85;85;Mob.Arb.;Mob.Arb.;6;Donnerstag;
|
||||
10;Musterfrau;Max;13.06.2025;Max.Musterfrau@kunde.tld;;;;;7;Freitag;
|
||||
10;Musterfrau;Max;14.06.2025;Max.Musterfrau@kunde.tld;;;;;8;Samstag;
|
||||
10;Musterfrau;Max;15.06.2025;Max.Musterfrau@kunde.tld;;;;;2;Sonntag;
|
||||
10;Musterfrau;Max;16.06.2025;Max.Musterfrau@kunde.tld;1;1;Urlaubbez;Urlaubbez;3;Montag;
|
||||
10;Musterfrau;Max;17.06.2025;Max.Musterfrau@kunde.tld;1;1;Urlaubbez;Urlaubbez;4;Dienstag;
|
||||
10;Musterfrau;Max;18.06.2025;Max.Musterfrau@kunde.tld;1;1;Urlaubbez;Urlaubbez;5;Mittwoch;
|
||||
10;Musterfrau;Max;19.06.2025;Max.Musterfrau@kunde.tld;;;;;50;Fronleichnam;
|
||||
10;Musterfrau;Max;20.06.2025;Max.Musterfrau@kunde.tld;;;;;7;Freitag;
|
||||
10;Musterfrau;Max;21.06.2025;Max.Musterfrau@kunde.tld;;;;;8;Samstag;
|
||||
10;Musterfrau;Max;22.06.2025;Max.Musterfrau@kunde.tld;;;;;2;Sonntag;
|
||||
10;Musterfrau;Max;23.06.2025;Max.Musterfrau@kunde.tld;85;85;Mob.Arb.;Mob.Arb.;3;Montag;
|
||||
10;Musterfrau;Max;24.06.2025;Max.Musterfrau@kunde.tld;85;85;Mob.Arb.;Mob.Arb.;4;Dienstag;
|
||||
10;Musterfrau;Max;25.06.2025;Max.Musterfrau@kunde.tld;;;;;5;Mittwoch;
|
||||
10;Musterfrau;Max;26.06.2025;Max.Musterfrau@kunde.tld;;;;;6;Donnerstag;
|
||||
10;Musterfrau;Max;27.06.2025;Max.Musterfrau@kunde.tld;;;;;7;Freitag;
|
||||
10;Musterfrau;Max;28.06.2025;Max.Musterfrau@kunde.tld;;;;;8;Samstag;
|
||||
10;Musterfrau;Max;29.06.2025;Max.Musterfrau@kunde.tld;;;;;2;Sonntag;
|
||||
10;Musterfrau;Max;30.06.2025;Max.Musterfrau@kunde.tld;;;;;3;Montag;
|
||||
33;Musterman;Hans;01.06.2025;Hans.Musterman@kunde.tld;;;;;2;Sonntag;
|
||||
33;Musterman;Hans;02.06.2025;Hans.Musterman@kunde.tld;;;;;3;Montag;
|
||||
33;Musterman;Hans;03.06.2025;Hans.Musterman@kunde.tld;;;;;4;Dienstag;
|
||||
33;Musterman;Hans;04.06.2025;Hans.Musterman@kunde.tld;;;;;5;Mittwoch;
|
||||
33;Musterman;Hans;05.06.2025;Hans.Musterman@kunde.tld;;;;;6;Donnerstag;
|
||||
33;Musterman;Hans;06.06.2025;Hans.Musterman@kunde.tld;;;;;7;Freitag;
|
||||
33;Musterman;Hans;07.06.2025;Hans.Musterman@kunde.tld;;;;;8;Samstag;
|
||||
33;Musterman;Hans;08.06.2025;Hans.Musterman@kunde.tld;;;;;48;Pfingstsonntag;
|
||||
33;Musterman;Hans;09.06.2025;Hans.Musterman@kunde.tld;;;;;49;Pfingstmontag;
|
||||
33;Musterman;Hans;10.06.2025;Hans.Musterman@kunde.tld;81;81;GLZ;GLZ;4;Dienstag;
|
||||
33;Musterman;Hans;11.06.2025;Hans.Musterman@kunde.tld;81;81;GLZ;GLZ;5;Mittwoch;
|
||||
33;Musterman;Hans;12.06.2025;Hans.Musterman@kunde.tld;1;1;Urlaubbez;Urlaubbez;6;Donnerstag;
|
||||
33;Musterman;Hans;13.06.2025;Hans.Musterman@kunde.tld;1;1;Urlaubbez;Urlaubbez;7;Freitag;
|
||||
33;Musterman;Hans;14.06.2025;Hans.Musterman@kunde.tld;;;;;8;Samstag;
|
||||
33;Musterman;Hans;15.06.2025;Hans.Musterman@kunde.tld;;;;;2;Sonntag;
|
||||
33;Musterman;Hans;16.06.2025;Hans.Musterman@kunde.tld;1;1;Urlaubbez;Urlaubbez;3;Montag;
|
||||
33;Musterman;Hans;17.06.2025;Hans.Musterman@kunde.tld;1;1;Urlaubbez;Urlaubbez;4;Dienstag;
|
||||
33;Musterman;Hans;18.06.2025;Hans.Musterman@kunde.tld;81;81;GLZ;GLZ;5;Mittwoch;
|
||||
33;Musterman;Hans;19.06.2025;Hans.Musterman@kunde.tld;;;;;50;Fronleichnam;
|
||||
33;Musterman;Hans;20.06.2025;Hans.Musterman@kunde.tld;81;81;GLZ;GLZ;7;Freitag;
|
||||
33;Musterman;Hans;21.06.2025;Hans.Musterman@kunde.tld;;;;;8;Samstag;
|
||||
33;Musterman;Hans;22.06.2025;Hans.Musterman@kunde.tld;;;;;2;Sonntag;
|
||||
33;Musterman;Hans;23.06.2025;Hans.Musterman@kunde.tld;;;;;3;Montag;
|
||||
33;Musterman;Hans;24.06.2025;Hans.Musterman@kunde.tld;;;;;4;Dienstag;
|
||||
33;Musterman;Hans;25.06.2025;Hans.Musterman@kunde.tld;;;;;5;Mittwoch;
|
||||
33;Musterman;Hans;26.06.2025;Hans.Musterman@kunde.tld;;;;;6;Donnerstag;
|
||||
33;Musterman;Hans;27.06.2025;Hans.Musterman@kunde.tld;;;;;7;Freitag;
|
||||
33;Musterman;Hans;28.06.2025;Hans.Musterman@kunde.tld;;;;;8;Samstag;
|
||||
33;Musterman;Hans;29.06.2025;Hans.Musterman@kunde.tld;;;;;2;Sonntag;
|
||||
33;Musterman;Hans;30.06.2025;Hans.Musterman@kunde.tld;;;;;3;Montag;";
|
||||
|
||||
|
||||
|
||||
|
||||
print_r($data); // Daten vorhanden
|
||||
|
||||
echo "<hr/>";
|
||||
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);
|
||||
}
|
||||
Loading…
Reference in New Issue