'error', 'message' => 'Unauthorized']); exit; } $conn = Database::getInstance(); // 1. Fetch Stats $stats_query = " SELECT COUNT(*) as total, SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) as pending, SUM(CASE WHEN status IN ('assigned', 'in_progress', 'waiting_for_return') THEN 1 ELSE 0 END) as in_progress, SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) as completed FROM jobs WHERE DATE(created_at) = CURDATE() "; $stmt = $conn->query($stats_query); $stats = $stmt->fetch(); // 2. Fetch Latest Jobs (Limit 10) $jobs_query = " SELECT j.*, fd.name as from_dept, COALESCE(td.name, j.to_department_custom) as to_dept FROM jobs j LEFT JOIN departments fd ON j.from_department_id = fd.id LEFT JOIN departments td ON j.to_department_id = td.id ORDER BY j.created_at DESC LIMIT 10 "; $stmt2 = $conn->query($jobs_query); $jobs = $stmt2->fetchAll(); // 3. Fetch Online Staff $staff_query = " SELECT id, username, full_name, status FROM users WHERE role IN ('staff', 'nurse') AND status != 'offline' ORDER BY status DESC, username ASC "; $stmt3 = $conn->query($staff_query); $staff = $stmt3->fetchAll(); echo json_encode([ 'status' => 'success', 'data' => [ 'stats' => [ 'total' => $stats['total'] ?? 0, 'pending' => $stats['pending'] ?? 0, 'in_progress' => $stats['in_progress'] ?? 0, 'completed' => $stats['completed'] ?? 0 ], 'jobs' => $jobs, 'staff' => $staff ] ]);