Recent Activity
No recent activity.
At-Risk Items
Overdue Tasks
Inactive Candidates (>7 days)
Incomplete Onboarding
No at-risk items found. Great job!
query("SELECT COUNT(*) FROM candidates WHERE status NOT IN ('Hired', 'Rejected')")->fetchColumn(); $newCandidatesThisWeek = $pdo->query("SELECT COUNT(*) FROM candidates WHERE created_at >= NOW() - INTERVAL 7 DAY")->fetchColumn(); // Assuming tasks with "interview" in the name are interviews $interviewsThisWeek = $pdo->query("SELECT COUNT(*) FROM tasks WHERE title LIKE '%interview%' AND due_date >= CURDATE() AND due_date < CURDATE() + INTERVAL 7 DAY")->fetchColumn(); $pendingTasks = $pdo->query("SELECT COUNT(*) FROM tasks WHERE status NOT IN ('Completed')")->fetchColumn(); $overdueTasksCount = $pdo->query("SELECT COUNT(*) FROM tasks WHERE status NOT IN ('Completed') AND due_date < CURDATE()")->fetchColumn(); $newHiresThisMonth = $pdo->query("SELECT COUNT(*) FROM candidates WHERE status = 'Hired' AND created_at >= NOW() - INTERVAL 1 MONTH")->fetchColumn(); // Recent Activity Feed from workflow_logs $recentActivities = $pdo->query(" SELECT wl.*, w.name as workflow_name, c.name as candidate_name FROM workflow_logs wl LEFT JOIN workflows w ON wl.workflow_id = w.id LEFT JOIN candidates c ON wl.candidate_id = c.id ORDER BY wl.executed_at DESC LIMIT 10 ")->fetchAll(); // At-Risk Items $overdueTasks = $pdo->query(" SELECT t.title, t.due_date, c.name as candidate_name FROM tasks t LEFT JOIN candidates c ON t.assigned_to = c.id WHERE t.status != 'Completed' AND t.due_date < CURDATE() ORDER BY t.due_date ASC ")->fetchAll(); $inactiveCandidates = $pdo->query(" SELECT name, email, created_at FROM candidates WHERE status = 'Applied' AND created_at <= NOW() - INTERVAL 7 DAY ")->fetchAll(); $incompleteOnboarding = $pdo->query(" SELECT t.title, c.name as candidate_name, t.due_date FROM tasks t JOIN candidates c ON t.assigned_to = c.id WHERE c.status = 'Hired' AND t.status != 'Completed' ")->fetchAll(); $all_candidates = $pdo->query("SELECT * FROM candidates ORDER BY name ASC")->fetchAll(); } catch (PDOException $e) { error_log("Dashboard Data Fetch Error: " . $e->getMessage()); // Initialize variables to prevent errors in the view $totalActiveCandidates = $newCandidatesThisWeek = $interviewsThisWeek = $pendingTasks = $overdueTasksCount = $newHiresThisMonth = 0; $recentActivities = $overdueTasks = $inactiveCandidates = $incompleteOnboarding = $all_candidates = []; } function time_ago($datetime, $full = false) { $now = new DateTime; $ago = new DateTime($datetime); $diff = $now->diff($ago); $diff->w = floor($diff->d / 7); $diff->d -= $diff->w * 7; $string = array( 'y' => 'year', 'm' => 'month', 'w' => 'week', 'd' => 'day', 'h' => 'hour', 'i' => 'minute', 's' => 'second', ); foreach ($string as $k => &$v) { if ($diff->$k) { $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); } else { unset($string[$k]); } } if (!$full) $string = array_slice($string, 0, 1); return $string ? implode(', ', $string) . ' ago' : 'just now'; } ?>
No recent activity.
No at-risk items found. Great job!