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'; ?>

Stempelkarten-System

Fehlzeiten erkannt

Bitte erst beheben.


"; ?> Zurück
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 = '

Arbeitszeiten - ' . $firmaName . '

'; $html .= '

Mitarbeiter: ' . $mitarbeiterName . '

'; $html .= '

Monat: ' . $monthName . ' ' . $selectedYear . '

'; $html .= ''; $html .= ''; // 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 .= ''; 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 .= ''; } } // 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 .= ''; $html .= '
TagStartPauseEndeGesamtzeitaufgezeichnet am:Bemerkung
' . $day . '' . date('H:i:s', strtotime($row['first_come'])) . '' . $row['difference_between_total_time_and_pause_time'] . '' . date('H:i:s', strtotime($row['last_go'])) . '' . $row['total_time'] . '' . date('d.m.Y', strtotime($row['day'])) . '
' . $day . '
Gesamt' . $totalTime .'
'; $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(); } ?>