Skip to content
Permalink
master
Switch branches/tags

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?
Go to file
 
 
Cannot retrieve contributors at this time
#!/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";
//*/
?>