0 ? "WHERE " . implode(" AND ", $where_conditions) : ""; $sql = "SELECT a.*, s.student_id as student_number, s.full_name as student_name, s.year_level, c.code as course_code, c.name as course_name, d.code as department_code, d.name as department_name, ac.name as activity_name, ac.date as activity_date, ac.time_in as activity_time_in, ac.time_out as activity_time_out, ac.location as activity_location FROM attendance a LEFT JOIN students s ON a.student_id = s.id LEFT JOIN courses c ON s.course_id = c.id LEFT JOIN departments d ON s.department_id = d.id LEFT JOIN activities ac ON a.activity_id = ac.id $join_tables $where_clause ORDER BY a.created_at DESC"; $result = query($conn, $sql); while ($row = mysqli_fetch_assoc($result)) { $attendance_records[] = $row; } // Get statistics $stats = [ 'total' => 0, 'present' => 0, 'late' => 0, 'absent' => 0, 'excused' => 0 ]; foreach ($attendance_records as $record) { $stats['total']++; switch($record['status']) { case 'present': $stats['present']++; break; case 'late': $stats['late']++; break; case 'absent': $stats['absent']++; break; case 'excused': $stats['excused']++; break; } } // Get filter dropdown data $activities = []; $courses = []; $departments = []; // All activities $result = query($conn, "SELECT * FROM activities ORDER BY date DESC, name ASC"); while ($row = mysqli_fetch_assoc($result)) { $activities[] = $row; } // All courses $result = query($conn, "SELECT * FROM courses WHERE status = 1 ORDER BY code"); while ($row = mysqli_fetch_assoc($result)) { $courses[] = $row; } // All departments $result = query($conn, "SELECT * FROM departments WHERE status = 1 ORDER BY code"); while ($row = mysqli_fetch_assoc($result)) { $departments[] = $row; } // Get daily attendance trend $daily_trend = []; $sql = "SELECT DATE(created_at) as date, COUNT(*) as total, SUM(CASE WHEN status = 'present' THEN 1 ELSE 0 END) as present, SUM(CASE WHEN status = 'late' THEN 1 ELSE 0 END) as late, SUM(CASE WHEN status = 'absent' THEN 1 ELSE 0 END) as absent, SUM(CASE WHEN status = 'excused' THEN 1 ELSE 0 END) as excused FROM attendance WHERE DATE(created_at) BETWEEN '$start_date' AND '$end_date' GROUP BY DATE(created_at) ORDER BY date ASC"; $result = query($conn, $sql); while ($row = mysqli_fetch_assoc($result)) { $daily_trend[] = $row; } // Get activity-wise statistics $activity_stats = []; $sql = "SELECT ac.name as activity_name, COUNT(a.id) as total_attendance, SUM(CASE WHEN a.status = 'present' THEN 1 ELSE 0 END) as present, SUM(CASE WHEN a.status = 'late' THEN 1 ELSE 0 END) as late, ROUND((SUM(CASE WHEN a.status IN ('present', 'late') THEN 1 ELSE 0 END) * 100.0 / COUNT(a.id)), 1) as attendance_rate FROM activities ac LEFT JOIN attendance a ON ac.id = a.activity_id WHERE ac.date BETWEEN '$start_date' AND '$end_date' GROUP BY ac.id ORDER BY ac.date DESC, ac.name ASC"; $result = query($conn, $sql); while ($row = mysqli_fetch_assoc($result)) { $activity_stats[] = $row; } // Get department-wise statistics $department_stats = []; $sql = "SELECT d.code as department_code, d.name as department_name, COUNT(a.id) as total_attendance, SUM(CASE WHEN a.status = 'present' THEN 1 ELSE 0 END) as present, SUM(CASE WHEN a.status = 'late' THEN 1 ELSE 0 END) as late, ROUND((SUM(CASE WHEN a.status IN ('present', 'late') THEN 1 ELSE 0 END) * 100.0 / COUNT(a.id)), 1) as attendance_rate FROM departments d LEFT JOIN students s ON d.id = s.department_id LEFT JOIN attendance a ON s.id = a.student_id WHERE DATE(a.created_at) BETWEEN '$start_date' AND '$end_date' GROUP BY d.id HAVING total_attendance > 0 ORDER BY attendance_rate DESC"; $result = query($conn, $sql); while ($row = mysqli_fetch_assoc($result)) { $department_stats[] = $row; } include '../includes/header.php'; ?>

Attendance Reports

View and analyze attendance data with detailed reports.

Filter Reports
Clear Filters
Total Records
Attendance records
Present
On-time attendance
Late
Late arrivals
Absent
No attendance
Attendance Summary
Present
Late
Absent
Excused
Daily Attendance Trend
to
Activity-wise Statistics
Activity Total Present Late Attendance Rate Actions

No activity data for selected period

%
View
Department Performance
Department Total Present Late Attendance Rate Performance

No department data for selected period


%
= 90) { echo 'Excellent'; } elseif ($rate >= 80) { echo 'Good'; } elseif ($rate >= 70) { echo 'Fair'; } else { echo 'Poor'; } ?>
Detailed Attendance Records
Student Activity Date & Time Time In/Out Status Course Recorded By

No attendance records found for the selected filters


Year
QR System
'; include '../includes/footer.php'; ?>