Inital
This commit is contained in:
@@ -0,0 +1,241 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once('./../admin/tcpdf/tcpdf.php');
|
||||
require_once("inc/config.inc.php");
|
||||
require_once("inc/functions.inc.php");
|
||||
|
||||
// Überprüfen, ob eine Benutzer-ID in der Session vorhanden ist
|
||||
if (!isset($_SESSION['userid'])) {
|
||||
die("Kein Benutzer angemeldet.");
|
||||
}
|
||||
|
||||
$user = check_user();
|
||||
|
||||
if($_GET['id'] && $user["admin"] == 1){
|
||||
$user_id = $_GET['id'];
|
||||
}else{
|
||||
$user_id = $_SESSION['userid'];
|
||||
}
|
||||
|
||||
$mitarbeiterName = ""; // Holen Sie den Namen des Mitarbeiters aus der Datenbank
|
||||
$firmaName = "Praxis Creutzburg"; // Setzen Sie den Firmennamen
|
||||
|
||||
|
||||
$selectedMonth = $_GET['month'] ?? date('m'); // Monat vom Benutzer oder aktueller Monat
|
||||
$selectedYear = $_GET['year'] ?? date('Y'); // Jahr vom Benutzer oder aktuelles Jahr
|
||||
|
||||
$selectedMonthSQL = str_pad($selectedMonth, 2, '0', STR_PAD_LEFT);
|
||||
|
||||
#echo $selectedMonthSQL;
|
||||
|
||||
try {
|
||||
|
||||
$query2 = "
|
||||
SELECT
|
||||
DATE(timestamp_datetime) AS datum,
|
||||
GROUP_CONCAT(timestamp_type ORDER BY timestamp_datetime) AS day_sequence
|
||||
FROM
|
||||
timestamps
|
||||
WHERE
|
||||
employee_id = :employee_id AND
|
||||
MONTH(timestamp_datetime) = :selectedMonth AND
|
||||
YEAR(timestamp_datetime) = :selectedYear
|
||||
GROUP BY
|
||||
DATE(timestamp_datetime);";
|
||||
|
||||
$stmt = $pdo->prepare($query2);
|
||||
$stmt->bindParam(':employee_id', $user_id, PDO::PARAM_INT);
|
||||
$stmt->bindParam(':selectedMonth', $selectedMonth, PDO::PARAM_INT);
|
||||
$stmt->bindParam(':selectedYear', $selectedYear, PDO::PARAM_INT);
|
||||
$stmt->execute();
|
||||
$result = $stmt->fetchAll();
|
||||
|
||||
#$invalidDates = [];
|
||||
|
||||
} catch(PDOException $e) {
|
||||
echo "Datenbankfehler: " . $e->getMessage();
|
||||
}
|
||||
|
||||
foreach ($result as $row) {
|
||||
|
||||
if (!isValidSequence($row["day_sequence"])) {
|
||||
$fehlerhafteTage[] = $row["datum"];
|
||||
}
|
||||
}
|
||||
|
||||
if ($fehlerhafteTage){
|
||||
|
||||
include 'header.php'; ?>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h2>Stempelkarten-System</h2>
|
||||
<?php
|
||||
|
||||
echo "<h1>Fehlzeiten erkannt</h1><br><h4>Bitte erst beheben.</h4><br>";
|
||||
|
||||
?>
|
||||
|
||||
<a href="index.php" class="btn btn-info btn-lg btn-block">Zurück</a>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php include 'footer.php';
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
// Holen Sie den Namen des Mitarbeiters aus der Datenbank
|
||||
$user_stmt = $pdo->prepare("SELECT vorname, nachname FROM users WHERE id = ?");
|
||||
$user_stmt->bindParam(1, $user_id);
|
||||
$user_stmt->execute();
|
||||
$user = $user_stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($user) {
|
||||
$mitarbeiterName = $user['vorname'] . ' ' . $user['nachname'];
|
||||
} else {
|
||||
die("Mitarbeiter nicht gefunden.");
|
||||
}
|
||||
|
||||
// Holen Sie die Zeiten des Mitarbeiters aus der Datenbank
|
||||
$times_stmt = $pdo->prepare("SELECT
|
||||
DATE(timestamp_datetime) AS day,
|
||||
MIN(CASE WHEN timestamp_type = 'KOMMEN' THEN timestamp_datetime END) AS first_come,
|
||||
MAX(CASE WHEN timestamp_type = 'GEHEN' THEN timestamp_datetime END) AS last_go,
|
||||
|
||||
SEC_TO_TIME(SUM(
|
||||
CASE
|
||||
WHEN timestamp_type = 'GEHEN' THEN UNIX_TIMESTAMP(timestamp_datetime)
|
||||
WHEN timestamp_type = 'KOMMEN' THEN -UNIX_TIMESTAMP(timestamp_datetime)
|
||||
ELSE 0
|
||||
END
|
||||
)) AS total_time,
|
||||
SEC_TO_TIME(
|
||||
TIME_TO_SEC(
|
||||
SEC_TO_TIME(
|
||||
UNIX_TIMESTAMP(
|
||||
MAX(CASE WHEN timestamp_type = 'GEHEN' THEN timestamp_datetime END)
|
||||
) - UNIX_TIMESTAMP(
|
||||
MIN(CASE WHEN timestamp_type = 'KOMMEN' THEN timestamp_datetime END)
|
||||
)
|
||||
)
|
||||
) - TIME_TO_SEC(SEC_TO_TIME(SUM(
|
||||
CASE
|
||||
WHEN timestamp_type = 'GEHEN' THEN UNIX_TIMESTAMP(timestamp_datetime)
|
||||
WHEN timestamp_type = 'KOMMEN' THEN -UNIX_TIMESTAMP(timestamp_datetime)
|
||||
ELSE 0
|
||||
END
|
||||
)))
|
||||
) AS difference_between_total_time_and_pause_time
|
||||
FROM
|
||||
timestamps
|
||||
WHERE
|
||||
employee_id = :employee_id AND
|
||||
MONTH(timestamp_datetime) = :month AND
|
||||
YEAR(timestamp_datetime) = :year
|
||||
GROUP BY
|
||||
DATE(timestamp_datetime)");
|
||||
|
||||
$times_stmt->bindParam(':employee_id', $user_id, PDO::PARAM_INT);
|
||||
$times_stmt->bindParam(':month', $selectedMonth, PDO::PARAM_INT);
|
||||
$times_stmt->bindParam(':year', $selectedYear, PDO::PARAM_INT);
|
||||
$times_stmt->execute();
|
||||
// Ergebnisse abrufen
|
||||
#$result = $times_stmt->fetchAll();
|
||||
|
||||
#if (count($result) > 0) {
|
||||
|
||||
// Erstellen eines leeren Arrays, um die gesammelten Daten zu speichern
|
||||
$times_data = [];
|
||||
|
||||
// Schleife durch die Ergebnisse der Abfrage und Speichern der Daten in einem assoziativen Array mit dem Tag als Schlüssel
|
||||
while ($row = $times_stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||
$day = date('d', strtotime($row['day']));
|
||||
$times_data[$day] = $row;
|
||||
}
|
||||
|
||||
|
||||
// Erstellen des PDF-Dokuments
|
||||
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
|
||||
|
||||
$pdf->SetCreator(PDF_CREATOR);
|
||||
$pdf->SetAuthor($mitarbeiterName);
|
||||
$pdf->SetTitle('Arbeitszeiten');
|
||||
$pdf->SetSubject('Arbeitszeiten von ' . $mitarbeiterName);
|
||||
|
||||
$pdf->AddPage();
|
||||
$stempdate = $selectedYear . "-" . $selectedMonth . "-1" ;
|
||||
$date = new DateTime($stempdate);
|
||||
|
||||
// the international date formater object
|
||||
$formatter = new IntlDateFormatter(
|
||||
"de-DE",
|
||||
IntlDateFormatter::LONG,
|
||||
IntlDateFormatter::NONE,
|
||||
"Europe/Berlin",
|
||||
IntlDateFormatter::GREGORIAN,
|
||||
"MMMM"
|
||||
);
|
||||
|
||||
// Konvertieren Sie die Monatsnummer in einen Monatsnamen
|
||||
#$dateObj = DateTime::createFromFormat('!m', $selectedMonth);
|
||||
$monthName = $formatter->format($date); // z.B. March
|
||||
|
||||
|
||||
|
||||
$html = '<h1>Arbeitszeiten - ' . $firmaName . '</h1>';
|
||||
$html .= '<h2>Mitarbeiter: ' . $mitarbeiterName . '</h2>';
|
||||
$html .= '<h3>Monat: ' . $monthName . ' ' . $selectedYear . '</h3>';
|
||||
$html .= '<table border="1" style="font-size:14px;" width=100%>';
|
||||
$html .= '<tr><th style="width: 7%;">Tag</th><th style="width: 12%;">Start</th><th style="width: 12%;">Pause</th><th style="width: 12%;">Ende</th><th>Gesamtzeit</th><th style="width: 20%;font-size:12px;">aufgezeichnet am:</th><th style="width: 23%;">Bemerkung</th></tr>';
|
||||
|
||||
// Schleife durch die Tage 1-31
|
||||
for ($day = 1; $day <= 31; $day++) {
|
||||
|
||||
$daytwo = str_pad($day, 2, '0', STR_PAD_LEFT);
|
||||
// Überprüfen, ob Daten für diesen Tag vorhanden sind
|
||||
if (isset($times_data[$daytwo])) {
|
||||
// Daten für diesen Tag aus dem Array abrufen
|
||||
$row = $times_data[$daytwo];
|
||||
|
||||
$html .= '<tr><td>' . $day . '</td><td>' . date('H:i:s', strtotime($row['first_come'])) . '</td><td>' . $row['difference_between_total_time_and_pause_time'] . '</td><td>' . date('H:i:s', strtotime($row['last_go'])) . '</td><td>' . $row['total_time'] . '</td><td>' . date('d.m.Y', strtotime($row['day'])) . '</td><td></td></tr>';
|
||||
list($hours, $minutes, $seconds) = explode(':', $row["total_time"]);
|
||||
$totalSeconds += $hours * 3600 + $minutes * 60 + $seconds;
|
||||
|
||||
|
||||
} else {
|
||||
// Wenn keine Daten für diesen Tag vorhanden sind, eine leere Zeile ausgeben
|
||||
$html .= '<tr><td>' . $day . '</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// Umwandeln der gesamten Sekunden zurück in Stunden, Minuten, Sekunden
|
||||
$hours = floor($totalSeconds / 3600);
|
||||
$mins = floor($totalSeconds / 60 % 60);
|
||||
$secs = floor($totalSeconds % 60);
|
||||
$totalTime = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
|
||||
|
||||
#echo "Gesamtzeit über alle Tage: " . $totalTime;
|
||||
$html .= '<tr><td></td><td></td><td></td><td><b>Gesamt</b></td><td><b>' . $totalTime .'</b></td><td></td><td></td></tr>';
|
||||
|
||||
$html .= '</table>';
|
||||
|
||||
$pdf->writeHTML($html, true, false, true, false, '');
|
||||
|
||||
$pdf->Output('Arbeitszeiten_' . $user['nachname'] . '_' . $selectedYear . '_' . $selectedMonth . '.pdf', 'I');
|
||||
#} else {
|
||||
# echo "Keine Ergebnisse gefunden";
|
||||
#}
|
||||
|
||||
|
||||
|
||||
} catch(PDOException $e) {
|
||||
echo "Datenbankfehler: " . $e->getMessage();
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user