echo $employeename; ?> - <?php echo monthname($_GET["month"]) . " " . $_GET["year"]; ?> </h2> <?php $res = db_query("\n\tSELECT MIN(since) AS since\n\tFROM uvazky\n\tWHERE employee='" . $_GET["employee"] . "'\n;"); $row = pg_fetch_array($res); $since = $row["since"]; $date = getdate(strtotime($since)); $y = $date["year"]; $m = $date["mon"]; $prev_tots["plusminus"] = datetime_to_secs(db_get("employees", "plusminus", $_GET["employee"])); $prev_tots["days_dovolena"] = 0; if ($y == $_GET["year"]) { $prev_tots["days_dovolena"] += db_get("employees", "dovolene", $_GET["employee"]); } while ($y * 12 + $m < $_GET["year"] * 12 + $_GET["month"]) { $mt = month_totals($y, $m, $_GET["employee"], false); if ($mt["error"]) { echo "<p>"; echo "Chyba v mesici " . $y . "/" . $m . "!"; echo "</p>"; //break; } $prev_tots["plusminus"] += $mt["plusminus"] - $mt["overtime"]; if ($y == $_GET["year"]) { $prev_tots["days_dovolena"] += $mt["days_dovolena"];
<tr> <th>datum</th> <th>druh dne</th> <th>přesčas</th> <th>poznamka</th> </tr> <?php $total = 0; for ($day = 1; checkdate($_GET["month"], $day, $_GET["year"]); $day++) { $date = date_to_string($_GET["year"], $_GET["month"], $day); $time = db_get_condition("overtimes", "time", "date='" . $date . "' AND employee='" . $_GET["employee"] . "'"); if (!$time) { continue; } $time = datetime_to_secs($time); if ($time == 0) { continue; } $daytype = weekdayname($_GET["year"], $_GET["month"], $day); if (db_get_condition("vacancies", "date", "date='" . $date . "'")) { $daytype .= " + svatek"; } $note = db_get_condition("comments", "text", "date='" . $date . "' AND employee='" . $_GET["employee"] . "'"); $total += $time; echo "<tr>"; echo "<td>" . $day . "." . $_GET["month"] . ". " . $_GET["year"] . "</td>"; echo "<td>" . $daytype . "</td>"; echo "<td>" . secs_to_time($time) . "</td>"; echo "<td>" . $note . "</td>"; echo "</tr>";
function day_totals($year, $month, $day, $employee) { $at_work = false; $at_lunch = false; $at_cesta_praha = false; $at_cesta_mimopraha = false; $at_doctor = false; $secs_old = 0; $total["odpracovano"] = 0; $total["stravenky"] = 0; $total["diety_kc"] = 0; $total["daylog"] = ""; $total["error"] = false; $str_date = $year . "-" . $month . "-" . $day; $res = db_query("\n\t\tSELECT time,type\n\t\tFROM actions\n\t\tWHERE\n\t\t\temployee='" . $employee . "'\n\t\t\tAND date='" . $str_date . "'\n\t\tORDER BY time ASC\n\t;"); // This is nasty for (;;) { $row = pg_fetch_array($res); if (!$row) { if ($at_work || $at_lunch || $at_cesta_praha || $at_cesta_mimopraha || $at_doctor) { $total["daylog"] .= "neočekávaný konec dne"; $total["error"] = true; } break; } // Get rid of this somehow if (!$at_work && !$at_lunch && !$at_cesta_praha && !$at_cesta_mimopraha && !$at_doctor && strlen($total["daylog"])) { $total["daylog"] .= " - nic - "; } $secs = datetime_to_secs($row["time"]); $total["daylog"] .= secs_to_time($secs); if ($row["type"] == "prichod") { if ($at_work) { $total["daylog"] .= "dvojí příchod"; $total["error"] = true; break; } if ($at_cesta_mimopraha) { $total["odpracovano"] += $secs - $secs_old; if ($secs - $secs_old > 18 * 60 * 60) { if ($year >= 2016) { $total["diety_kc"] = 166; } elseif ($year >= 2015) { $total["diety_kc"] = 163; } elseif ($year >= 2014) { $total["diety_kc"] = 160; } elseif ($year >= 2013) { $total["diety_kc"] = 157; } elseif ($year >= 2012) { $total["diety_kc"] = 166; } else { $total["diety_kc"] = 150; } } else { if ($secs - $secs_old > 12 * 60 * 60) { if ($year >= 2016) { $total["diety_kc"] = 106; } elseif ($year >= 2015) { $total["diety_kc"] = 104; } elseif ($year >= 2014) { $total["diety_kc"] = 102; } elseif ($year >= 2013) { $total["diety_kc"] = 100; } elseif ($year >= 2012) { $total["diety_kc"] = 106; } else { $total["diety_kc"] = 96; } } else { if ($secs - $secs_old > 5 * 60 * 60) { if ($year >= 2016) { $total["diety_kc"] = 70; } elseif ($year >= 2015) { $total["diety_kc"] = 69; } elseif ($year >= 2014) { $total["diety_kc"] = 67; } elseif ($year >= 2013) { $total["diety_kc"] = 66; } elseif ($year >= 2012) { $total["diety_kc"] = 70; } else { $total["diety_kc"] = 63; } } } } $at_cesta_mimopraha = false; } if ($at_cesta_praha) { $total["odpracovano"] += $secs - $secs_old; $at_cesta_praha = false; } if ($at_lunch) { $at_lunch = false; } if ($at_doctor) { $total["odpracovano"] += $secs - $secs_old; $at_doctor = false; } $at_work = true; } else { if ($row["type"] == "odchod") { if (!$at_work) { $total["daylog"] .= "odchod bez příchodu"; $total["error"] = true; break; } $total["odpracovano"] += $secs - $secs_old; $at_work = false; } else { if ($row["type"] == "odchod-obed") { if (!$at_work) { $total["daylog"] .= "odchod na oběd bez příchodu"; $total["error"] = true; break; } $total["odpracovano"] += $secs - $secs_old; $at_work = false; $at_lunch = true; } else { if ($row["type"] == "odchod-sluzebne-mimopraha") { if (!$at_work) { $total["daylog"] .= "odchod na sl. cestu bez příchodu"; $total["error"] = true; break; } $total["odpracovano"] += $secs - $secs_old; $at_work = false; $at_cesta_mimopraha = true; } else { if ($row["type"] == "odchod-sluzebne-praha") { if (!$at_work) { $total["daylog"] .= "odchod na sl. cestu bez příchodu"; $total["error"] = true; break; } $total["odpracovano"] += $secs - $secs_old; $at_work = false; $at_cesta_praha = true; } else { if ($row["type"] == "odchod-lekar") { if (!$at_work) { $total["daylog"] .= "odchod k lékaři bez příchodu"; $total["error"] = true; break; } $total["odpracovano"] += $secs - $secs_old; $at_work = false; $at_doctor = true; } else { $total["daylog"] .= "neznamý typ průchodu"; $total["error"] = true; break; } } } } } } $secs_old = $secs; if ($at_work) { $total["daylog"] .= " - práce - "; } if ($at_lunch) { $total["daylog"] .= " - oběd - "; } if ($at_cesta_praha) { $total["daylog"] .= " - cesta Praha - "; } if ($at_cesta_mimopraha) { $total["daylog"] .= " - cesta mimo Prahu - "; } if ($at_doctor) { $total["daylog"] .= " - lékař - "; } } pg_free_result($res); $res = db_query("\n\t\tSELECT id,time\n\t\tFROM overtimes\n\t\tWHERE\n\t\t\tdate='" . $str_date . "'\n\t\t\tAND employee='" . $employee . "'\n\t;"); $row = pg_fetch_array($res); $total["overtime_id"] = $total["overtime_time"] = 0; if ($row) { $total["overtime_id"] = $row["id"]; $total["overtime_time"] = datetime_to_secs($row["time"]); } pg_free_result($res); $res = db_query("\n\t\tSELECT id,type\n\t\tFROM days\n\t\tWHERE\n\t\t\tdate='" . $str_date . "'\n\t\t\tAND employee='" . $employee . "'\n\t;"); $row = pg_fetch_array($res); $total["status_id"] = 0; $total["status_type"] = ""; if ($row) { $total["status_id"] = $row["id"]; $total["status_type"] = $row["type"]; } pg_free_result($res); $res = db_query("\n\t\tSELECT id,amount\n\t\tFROM diety\n\t\tWHERE\n\t\t\tdate='" . $str_date . "'\n\t\t\tAND employee='" . $employee . "'\n\t;"); $row = pg_fetch_array($res); $total["diety_id"] = 0; if ($row) { $total["diety_kc"] = $row["amount"]; $total["diety_id"] = $row["id"]; } pg_free_result($res); $res = db_query("\n\t\tSELECT id,text\n\t\tFROM comments\n\t\tWHERE\n\t\t\temployee='" . $employee . "'\n\t\t\tAND date='" . $str_date . "'\n\t;"); $row = pg_fetch_array($res); $total["comment_id"] = 0; $total["comment_text"] = ""; if ($row) { $total["comment_id"] = $row["id"]; $total["comment_text"] = $row["text"]; } pg_free_result($res); $res = db_query("\n\t\tSELECT uvazek\n\t\tFROM uvazky\n\t\tWHERE\n\t\t\temployee='" . $employee . "'\n\t\t\tAND since<='" . $str_date . "'\n\t\t\tAND (till>='" . $str_date . "' OR till IS NULL)\n\t;"); $row = pg_fetch_array($res); $uvazek = $row["uvazek"]; $ratio = $uvazek / 8.0; $total["plusminus"] = $total["odpracovano"]; if (is_workday($year, $month, $day) && $total["status_type"] != "nemoc" && $total["status_type"] != "dovolena" && $total["status_type"] != "nahrada" && $total["status_type"] != "neplacene_volno") { $total["plusminus"] -= $uvazek * 60 * 60; if (!$total["diety_id"] && $total["diety_kc"] == 0) { $total["stravenky"] += $ratio; } } // We don't want negative plusminus for days in the future if (mktime() < mktime(0, 0, 0, $month, $day, $year)) { $total["plusminus"] = 0; } return $total; }