fetch("SELECT * FROM workers WHERE id = :id", ['id' => $workerId]); if (!$worker) { header('Location: /admin/index.php'); exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; if ($action === 'set_day') { $date = $_POST['date'] ?? ''; $status = $_POST['status'] ?? ''; $reason = trim($_POST['reason'] ?? ''); $location = trim($_POST['location'] ?? ''); if (in_array($status, ['full', 'half', 'absent'], true) && $date) { $weekStart = getWeekStart($date); db()->query(" INSERT INTO day_entries (worker_id, work_date, week_start, status, absence_reason, location) VALUES (:wid, :date, :week, :status, :reason, :location) ON DUPLICATE KEY UPDATE status = :status2, absence_reason = :reason2, location = :location2, week_start = :week2 ", [ 'wid' => $workerId, 'date' => $date, 'week' => $weekStart, 'status' => $status, 'reason' => $reason ?: null, 'location' => $location ?: null, 'status2' => $status, 'reason2' => $reason ?: null, 'location2' => $location ?: null, 'week2' => $weekStart, ]); } header('Location: /admin/worker.php?id=' . $workerId); exit; } if ($action === 'clear_day') { $date = $_POST['date'] ?? ''; db()->query("DELETE FROM day_entries WHERE worker_id = :wid AND work_date = :date", ['wid' => $workerId, 'date' => $date]); header('Location: /admin/worker.php?id=' . $workerId); exit; } if ($action === 'toggle_paid') { $weekStart = $_POST['week_start'] ?? ''; $existing = db()->fetch("SELECT * FROM week_settlements WHERE worker_id = :wid AND week_start = :w", ['wid' => $workerId, 'w' => $weekStart]); if ($existing) { $newPaid = $existing['paid'] ? 0 : 1; db()->update('week_settlements', ['paid' => $newPaid, 'paid_at' => $newPaid ? date('Y-m-d H:i:s') : null], 'id = :id', ['id' => $existing['id']]); } else { db()->insert('week_settlements', ['worker_id' => $workerId, 'week_start' => $weekStart, 'paid' => 1, 'paid_at' => date('Y-m-d H:i:s')]); } header('Location: /admin/worker.php?id=' . $workerId); exit; } } // Gather all weeks that have entries, plus the current week even if empty $weekStarts = db()->fetchAll("SELECT DISTINCT week_start FROM day_entries WHERE worker_id = :wid ORDER BY week_start DESC", ['wid' => $workerId]); $weekStartList = array_column($weekStarts, 'week_start'); if (!in_array(currentWeekStart(), $weekStartList, true)) { array_unshift($weekStartList, currentWeekStart()); } rsort($weekStartList); $settlements = db()->fetchAll("SELECT * FROM week_settlements WHERE worker_id = :wid", ['wid' => $workerId]); $paidMap = []; foreach ($settlements as $s) { $paidMap[$s['week_start']] = (bool) $s['paid']; } $allEntries = db()->fetchAll("SELECT * FROM day_entries WHERE worker_id = :wid", ['wid' => $workerId]); $entriesByDate = []; foreach ($allEntries as $en) { $entriesByDate[$en['work_date']] = $en; } $pageTitle = $worker['name'] . ' - ChuckCo Time Keeper'; require_once __DIR__ . '/../includes/header.php'; ?>

← Back

Links

Week of

Owed