Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
timerec3public/missed.php
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
119 lines (110 sloc)
4.81 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<table class='tabelle'> | |
<tr class='topline'> | |
<th>Datum / Zeit</th><th>Name</th> | |
</tr> | |
<?php | |
error_reporting(E_ALL & ~E_NOTICE); | |
if(!$include){ | |
echo "nicht innerhalb einer anderen Seite geöffnet!"; | |
exit; | |
} | |
/* if($userarray['userid'] != 'kirstaedter' && $userarray['userid'] != 'ziebarth'){ | |
echo "derzeit in wartung"; | |
exit; | |
} */ | |
//Feiertag-Funktion, abgewandelt vom Kalender | |
function feiertag($datum){ | |
global $dbc; | |
$tag = $datum->format('d'); | |
$monat = $datum->format('m'); | |
$jahr = $datum->format('Y'); | |
//abfrage, um mehrere DB Querys zu verhindern | |
if(empty($feiertage)){ | |
// Feste Feiertage werden nach dem Schema ddmm eingetragen | |
$feiertage[] = "0101"; // Neujahrstag | |
$feiertage[] = "0105"; // Tag der Arbeit | |
$feiertage[] = "0310"; // Tag der Deutschen Einheit | |
$feiertage[] = "2512"; // Erster Weihnachtstag | |
$feiertage[] = "2612"; // Zweiter Weihnachtstag | |
// Bewegliche Feiertage berechnen | |
$tage = 60 * 60 * 24; | |
$ostersonntag = easter_date($jahr); | |
$feiertage[] = date("dm", $ostersonntag - 2 * $tage); // Karfreitag | |
$feiertage[] = date("dm", $ostersonntag + 1 * $tage); // Ostermontag | |
$feiertage[] = date("dm", $ostersonntag + 39 * $tage); // Himmelfahrt | |
$feiertage[] = date("dm", $ostersonntag + 50 * $tage); // Pfingstmontag | |
//freie Tage FHI aus Datenbank nehmen | |
$getfree = $dbc->query("select daymon from feiertag where year = $jahr;"); | |
foreach($getfree as $free){ | |
$feiertage[] = $free['daymon']; | |
} | |
} | |
// Prüfen, ob Feiertag | |
$code = $tag.$monat; | |
return in_array($code, $feiertage); | |
} | |
$heute = new DateTime; | |
$datum = new DateTime; | |
$missed_year = $heute->format('Y'); | |
$datum->modify('-30 days'); | |
$datumstr = $datum->format('Y-m-d'); | |
//mitarbeiter zeiten bis 30 tage zurück holen | |
$getbefore = $dbc->query("select distinct date(datumzeit) as datum, maID from zeit | |
where date(datumzeit) >= '$datumstr' order by datum, maID;"); | |
foreach($getbefore as $before){ | |
$wasthere[$before['datum']][] = $before['maID']; | |
} | |
//print_r($wasthere); | |
//alle an Gleitzeit teilnehmenden MA holen | |
$getma = $dbc->query("select * from mitarbeiter where gleitzeit = 1;"); | |
foreach($getma as $ma){ | |
$allma[$ma['maID']] = $ma; | |
} | |
//azmodelle holen | |
$getaz = $dbc->query("select * from az_data_copy az join az_time azt on az.azdID = azt.azdID order by maID, az.azdID desc, datum_ab;"); | |
foreach($getaz as $az){ | |
$allaz[$az['maID']][$az['azdID']][$az['tag']] = $az; | |
} | |
//alle kalendereinträge bis 30 tage zurück holen für abgleich auf urlaub | |
$getkalender = $dbc->query("select maID, datum, zt_op from kalender k | |
join zeittyp zt on zt.zt_ID = k.typ | |
where year(datum) = $missed_year | |
and datum >= $datumstr | |
order by k_id asc, datum;"); | |
foreach($getkalender as $kalender){ | |
$ereignis[$kalender['maID']][$kalender['datum']] = $kalender['zt_op']; | |
} | |
//rückwärts von heute an durch die daten und mitarbeiter gehen und nach fehlenden zeiten suchen | |
while ($datum < $heute){ | |
$datumstr = $heute->format('Y-m-d'); | |
$wochentag = $heute->format('N'); | |
foreach($allma as $id=>$ma){ | |
$anwesenheit = false; | |
if(!feiertag($heute)){ | |
foreach($allaz[$id] as $azid=>$maaz){ | |
if(!empty($maaz[$wochentag]['datum_ab']) && $maaz[$wochentag]['datum_ab'] <= $datumstr && $maaz[$wochentag]['wochenarbeit']) $anwesenheit = true; | |
break; | |
} | |
if($anwesenheit && !empty($wasthere[$datumstr]) && !in_array($id, $wasthere[$datumstr]) && $ereignis[$id][$datumstr] == ''){ //alle tage ohne zeiten und ohne kalendereintrag | |
$abwesend[$datumstr][] = $ma; | |
} | |
} | |
} | |
$heute->modify('-1 day'); //rückwärts damit die anzeige nachher absteigend sortiert ist | |
} | |
foreach($abwesend as $fehldatum=>$fehltag){ | |
$formatiert = new DateTime($fehldatum); | |
$formatiert = $formatiert->format('d.m.Y'); | |
echo "<tr class='topline'>"; | |
echo "<th>$formatiert</th><th></th> | |
</tr>"; | |
$switch = false; | |
foreach($fehltag as $fehl){ | |
$linecolor = $switch ? "line2" : "line1"; | |
$switch = !$switch; | |
echo "<tr class='$linecolor'><td class='centered'>⟶</td><td><a href='index.php?ma=$fehl[maID]'>$fehl[nachname], $fehl[vorname]</a></td></tr>"; | |
} | |
echo "</tr>"; | |
} | |
?> | |
</table> |