query('SELECT id, name FROM staff WHERE is_active=1 ORDER BY name')->fetchAll(); $where = ['te.logged_at BETWEEN ? AND ?']; $params = [$filterFrom . ' 00:00:00', $filterTo . ' 23:59:59']; if ($filterStaff !== '') { $where[] = 'te.staff_id = ?'; $params[] = $filterStaff; } $stmt = $pdo->prepare( "SELECT te.*, s.name AS staff_name, t.ticket_number, t.subject FROM ticket_time_entries te JOIN staff s ON s.id = te.staff_id JOIN tickets t ON t.id = te.ticket_id WHERE " . implode(' AND ', $where) . " ORDER BY te.logged_at DESC LIMIT 500" ); $stmt->execute($params); $entries = $stmt->fetchAll(); // Summen je Mitarbeiter $byStaff = []; foreach ($entries as $e) { $byStaff[$e['staff_name']] = ($byStaff[$e['staff_name']] ?? 0) + (int)$e['minutes']; } $totalMinutes = array_sum(array_column($entries, 'minutes')); $pageTitle = 'Zeiterfassung'; $activePage = 'time_entries'; require __DIR__ . '/_header.php'; function fmt_minutes(int $m): string { return floor($m / 60) . 'h ' . ($m % 60) . 'min'; } ?>

⏱ Zeiterfassung

$mins): ?>
Gesamt
Keine Zeiteinträge im gewählten Zeitraum.
Datum Mitarbeiter Ticket Betreff Zeit Notiz
#