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/saldorun.php.old
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
244 lines (219 sloc)
8.61 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
#!/usr/bin/php | |
<?php | |
///* | |
//benchmark | |
$time = microtime(); | |
$time = explode(' ', $time); | |
$time = $time[1] + $time[0]; | |
$start = $time; | |
//ob_start(); //output buffer starten | |
//*/ | |
include('dbconnect.php'); | |
//Feiertag-Funktion, abgewandelt vom Kalender | |
function feiertag($datum){ | |
global $dbc; | |
$tag = $datum->format('d'); | |
$monat = $datum->format('m'); | |
$jahr = $datum->format('Y'); | |
// 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); | |
} | |
if(php_sapi_name() != "cli"){ | |
echo "<h3>keine Rechte, diese Seite einzusehen!</h3>"; | |
exit; | |
} | |
if(isset($argv[1])){ | |
$ab = new DateTime($argv[1]); | |
}else{ | |
$ab = new DateTime(); | |
$ab->modify("-1 day"); | |
} | |
echo "Ab Datum: " . $ab->format("Y-m-d H:i:s") . "\n------------\n"; | |
$heute = new DateTime(); | |
$tage = $ab->diff($heute); | |
$tage = $tage->days -1; //es soll ja nur bis einschließlich gestern gerechnet werden | |
echo "Anzahl Tage bis gestern: $tage\n-----------\n"; | |
$result = $dbc->query("select maID from mitarbeiter where gleitzeit = 1;"); | |
for($i = 0; $i <= $tage; $i++){ | |
echo "ab wert: ".$ab->format('d.m.Y')."\n"; | |
$tag = new DateTime($ab->format('Y-m-d')); //direkte zuweisung tag = ab geht nicht, überschreibt immer ab | |
echo "zuweisung: ".$tag->format('d.m.Y')."\n"; | |
$tag->modify("+$i days"); | |
echo "veränderung: ".$tag->format('d.m.Y')."\n"; | |
$datumstr = $tag->format("Y-m-d"); | |
$wochentag = $tag->format('N'); | |
echo ">>>> $datumstr | Tag $wochentag <<<<\n"; | |
foreach ($result as $row){ | |
$fehler = false; | |
$saldo = 0; | |
$summe = 0; | |
$longest = "00:00"; | |
$pausesumme = 0; | |
$anzahlkommen = 0; | |
$anzahlgehen = 0; | |
$maID = $row['maID']; | |
echo $maID . ": \n"; | |
$gettimes = "select * from zeit where maID = '$maID' and date(datumzeit) = '$datumstr' order by datumzeit;"; | |
$times = $dbc->query($gettimes); | |
$getazm = "select *, (mon+die+mit+don+fre+sam+son) as arbeitstage from az_data | |
where maID = '$maID' and datum_ab <= '$datumstr' | |
order by datum_ab desc, azdID desc limit 1;"; | |
$azm = $dbc->query($getazm); | |
$az = $azm->fetch_array(); | |
foreach($times as $time){ | |
echo $time['datumzeit'] . " - status: " . $time['status'] . "\n"; | |
if($time['status'] == 'kommt'){ | |
echo "azstart: ".$az['azstart']."\n"; | |
if(substr($time['datumzeit'], -8) < $az['azstart']){ | |
//vor azstart erschienen? -> azstart als Startzeit nehmen | |
$von = new DateTime(substr($time['datumzeit'], 0, 10).' '.$az['azstart']); | |
}else{ | |
$von = new DateTime($time['datumzeit']); | |
} | |
if($anzahlkommen > 0){ | |
$pauseende = new DateTime($time['datumzeit']); | |
$pausediff = $pausestart->diff($pauseende); | |
$pausesumme += ($pausediff->h * 60); | |
$pausesumme += $pausediff->i; | |
$pausesumme += ceil($pausediff->s/60); | |
echo "pausediff: $pausesumme\n"; | |
} | |
$anzahlkommen++; | |
}elseif($time['status'] == 'geht'){ | |
echo "azende: ".$az['azende']."\n"; | |
if(substr($time['datumzeit'], -8) > $az['azende']){ | |
//nach azende gegangen? -> azende als Stoppzeit nehmen | |
$bis = new DateTime(substr($time['datumzeit'], 0, 10).' '.$az['azende']); | |
}else{ | |
$bis = new DateTime($time['datumzeit']); | |
} | |
$diff = $von->diff($bis); | |
if($diff->h*60 + $diff->i > $longest){ | |
$longest = $diff->h*60 + $diff->i; | |
} | |
$summe += ($diff->h * 60); | |
$summe += $diff->i; | |
$summe += floor($diff->s/60); | |
$anzahlgehen++; | |
echo "summe: $summe\n"; | |
$pausestart = new DateTime($time['datumzeit']); | |
} | |
} | |
//------------------------- | |
//pause abziehen | |
$pauseab = new DateTime($az['pauseab']); | |
$pause = new DateTime($az['pause']); | |
$pauseminuten = $pause->format('H')*60 + $pause->format('i'); | |
$pauseab = $pauseab->format('H')*60 + $pauseab->format('i'); | |
if($longest >= $pauseab){ | |
$summe -= $pauseminuten; | |
}elseif($pausesumme < $pauseminuten){ | |
$pauserest = $pauseminuten - $pausesumme; | |
echo "Pauserest: $pauserest\n"; | |
$summe -= $pauserest; | |
} | |
echo "Summe nach Pausenabzug: $summe\n"; | |
//--------------------------- | |
if($anzahlgehen != $anzahlkommen){ | |
echo "kommen / gehen ist irgendwie durcheinander! Saldo kann falsch sein!\n"; | |
$fehler = true; | |
} | |
echo "------------\n"; | |
$eintragen = false; | |
if($az[$wochentag+2] == 1 && feiertag($tag) === false){ | |
$tagesminuten = $az['wochenarbeit'] / $az['arbeitstage']; | |
echo "tagesminuten: $tagesminuten\n"; | |
$saldo = $summe - $tagesminuten; | |
$eintragen = true; | |
}elseif($summe > 0){ | |
$saldo = $summe; | |
$eintragen = true; | |
} | |
echo "\n--------------\n"; | |
$frei = false; | |
$getcal = "select * from kalender where maID = '$maID' and datum = '$datumstr' order by k_id desc limit 1;"; | |
$rescal = $dbc->query($getcal); | |
$cal = $rescal->fetch_assoc(); | |
if($cal){ | |
echo "Typ und Status: \n"; | |
echo $cal['typ'] . " --> " . $cal['status']."\n"; | |
$getmode = $dbc->query("select zt_op from zeittyp where zt_ID = ".$cal['typ'].";"); | |
$mode = $getmode->fetch_array()[0]; | |
if($mode == '+'){ | |
if($cal['status'] != ''){ | |
echo "\nstatus gesetzt: ".$cal['status']."\n"; | |
if($cal['status'] == 'genehmigt') $frei = true; | |
}else{ | |
echo "\nkein status gesetzt, aber trotzdem plus\n"; | |
$frei = true; | |
} | |
} | |
if($frei && $summe > 0){ //MA ist trotzdem erschienen -> Zeit wird gutgeschrieben | |
$frei = false; //wieder false setzen, damit wert eingetragen wird. | |
$saldo = $summe; | |
} | |
} | |
if($frei){ //frei ist immer true, wenn jemand rechtmäßigerweise nicht erschienen ist -> negative Saldi werden ggf gelöscht | |
$getsaldo = $dbc->query("select saldomin from saldo where maID = '$maID' and datum = '$datumstr';"); | |
$oldsaldo = $getsaldo->fetch_array()[0]; | |
if($oldsaldo != 0){ | |
//falls frei hat und schon mal saldo gerechnet wurde -> eintrag löschen | |
$dbc->query("delete from saldo where maID = $maID and datum = '$datumstr';"); | |
echo "\n --> old saldo deleted <--\n"; | |
} | |
echo "frei!\n"; | |
}else{ | |
echo "nicht frei :(\n"; | |
} | |
echo "-------------\n"; | |
if($eintragen && !$fehler && !$frei){ | |
echo "saldo: $saldo\n"; | |
//olddata: falls schon Saldo vorhanden ist, updaten statt inserten (ersatz für on duplicate key da special NULL sein kann und damit unique key zerstört) | |
$getolddata = $dbc->query("select sid from saldo where maID = '$maID' and datum = '$datumstr' and special is NULL;"); | |
$olddata = $getolddata->fetch_array()[0]; | |
if($olddata){ | |
echo "old data @: $olddata\n"; | |
$insert = "update saldo set saldomin = $saldo where sid = $olddata;"; | |
}else{ | |
echo "neue Daten!\n"; | |
$insert = "insert into saldo (maID, datum, saldomin) values ('$maID', '$datumstr', '$saldo');"; | |
} | |
$dbc->query($insert); | |
if($dbc->error){ | |
echo $dbc->error; | |
exit; | |
} | |
} | |
echo "------------\n"; | |
} | |
} | |
///* | |
//benchmark | |
//ob_end_clean(); //output buffer verwerfen ( = echo unterdrücken) | |
$time = microtime(); | |
$time = explode(' ', $time); | |
$time = $time[1] + $time[0]; | |
$finish = $time; | |
$total_time = round(($finish - $start), 4); | |
echo "==============\nPage generated in ".$total_time." seconds.\n"; | |
//*/ | |
?> |