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'; } ?>
| Datum | Mitarbeiter | Ticket | Betreff | Zeit | Notiz |
|---|---|---|---|---|---|
| = format_dt($e['logged_at']) ?> | = e($e['staff_name']) ?> | #= e($e['ticket_number']) ?> | = e($e['subject']) ?> | = fmt_minutes((int)$e['minutes']) ?> | = e($e['note'] ?? '') ?> |