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