Attendance-list/showMonthForm.php

234 lines
11 KiB
PHP

<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
/*
CREATE TABLE `obecnosc` (
`id` int(10) UNSIGNED NOT NULL,
`kto` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`czasZaczecia` time DEFAULT NULL,
`czasKonca` time DEFAULT NULL,
`status` int(10) UNSIGNED NOT NULL,
`zaakceptowane` tinyint(4) NOT NULL DEFAULT 0,
`zdalne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `statusy` (
`id` int(10) UNSIGNED NOT NULL,
`skrot` varchar(10) NOT NULL,
`nazwa` text NOT NULL,
`oznaczaWolne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(4) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `dniwolne` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `data` DATE NOT NULL , `nazwaSwieta` TEXT NOT NULL , `aktywne` INT(1) NOT NULL DEFAULT '1' , PRIMARY KEY (`id`)) ENGINE = InnoDB;
*/
// Lp | Numer Dnia | Czas rozpoczęcia - Czas zakończenia | Status (z tabeli statusy XX - Nazwa) | Zdalne | Zaakceptowane
//nagłówek nad tabelą MIESIĄC - ROK
//poniżej ilość dni pracy zdalnej w danym miesiącu
//pokaż w tabeli dany miesiąc, jeżeli na dany dzień nie ma wpisu zostaw puste pole godzina i czas pracy
// dane podawane przez $_GET['month'] = 2023-08
//dla soboty i niedzieli dodaj klasę weekend
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="monthShow">
<div id="doPodzialu">
<h2>
<?php
if(isset($_GET['month']))
{
$mArray = ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec","Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"];
$month = $_GET['month'];
$month = explode('-', $month);
echo $mArray[$month[1]-1]." ".$month[0];
}
?>
</h2>
<div class="addInfo">
Imię i nazwisko: <b><?php echo $_SESSION['user_imie']." ".$_SESSION['user_nazwisko']; ?> </b><br>
Dział: <b><?php echo $_SESSION['user_dzial_nazwa']; ?></b><br>
<?php
//sprawdź ilość dni pracy zdalnej w danym miesiącu
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND data LIKE :data AND zdalne = 1 AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
//dodaj zero wiodące do miesiąca
$m = $month[1];
if($m < 10 && strlen($m) < 2)
{
$m = "0".$m;
}
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->execute();
$zdalne = $stmt->fetch(PDO::FETCH_ASSOC);
echo "Ilość dni pracy zdalnej: <b>".$zdalne['COUNT(*)']."</b>";
//sprawdź czy są dni niezaakceptowane
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND zaakceptowane = 0 AND aktywne = 1 AND data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$niezaakceptowane = $stmt->fetch(PDO::FETCH_ASSOC);
if($niezaakceptowane['COUNT(*)'] > 0)
{
?>
<br />
<span class="bigError">Masz niezaakceptowane dni pracy</span>
<?php
}
?>
</div>
<table class="month">
<tr>
<th>Dzień</th>
<th>Czas pracy</th>
</tr>
<?php
//sprawdź ilość dni w miesiącu, następnie wykonaj pętlę tyle razy ile jest dni w miesiącu
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month[1], $month[0]);
//pobierz dni wolne na dany miesiąc (o ile są)
$sql = "SELECT * FROM dniwolne WHERE data LIKE :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->execute();
$dniWolne = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dniWolneArray = [];
foreach($dniWolne as $dzienWolny)
{
$dniWolneArray[] = $dzienWolny['data'];
}
for($i = 1; $i <= $daysInMonth; $i++)
{
//sprawdź czy jest wpis w bazie dla danego dnia
$sql = "SELECT * FROM obecnosc, statusy WHERE obecnosc.kto = :kto AND obecnosc.data = :data AND obecnosc.aktywne = 1 AND obecnosc.status = statusy.id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $month[0]."-".$month[1]."-".$i, PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
//sprawdź czy sobota lub niedziela
if(date('N', strtotime($month[0]."-".$month[1]."-".$i)) > 5 || in_array($month[0]."-".$month[1]."-".$i, $dniWolneArray))
{
echo "<tr class='weekend'>";
}
else
{
echo "<tr>";
}
if($work === false)
{
//nie ma wpisu w bazie
echo "<td>".$i."</td>";
echo "<td></td>";
}
else
{
//jest wpis w bazie
echo "<td>".$i;
//jeżeli niezaakceptowane ❌
if($work['zaakceptowane'] == 0)
{
echo " ❌";
}
else
{
echo " ✔️";
}
echo "</td>";
if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
{
echo "<td>".$work['czasZaczecia']." - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
{
echo "<td>".$work['czasZaczecia']." - ";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
{
echo "<td> - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else
{
echo "<td>".$work['skrot']."";
//
}
if($work['zdalne'] == 1)
{
echo " - PZ";
}
else
{
echo "</td>";
}
}
echo "</tr>";
}
?>
</table>
</div>
<div id="legenda">
<a href="showMonthFormPrint.php?month=<?php echo $_GET['month']; ?>" target="_blank">
<button>Wydrukuj</button>
</a>
<a href="showMonth.php">
<button>Wróć</button>
</a>
<?php
//Wypisz legendę z tabeli statusy
$sql = "SELECT * FROM statusy WHERE aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$statusy = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<h2>Legenda</h2>";
echo "<table>";
foreach($statusy as $status)
{
echo "<tr>";
echo "<td>".$status['skrot']."</td>";
echo "<td>".$status['nazwa']."</td>";
echo "</tr>";
}
echo "</table>";
?>
</div>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>