File "initialize.php"

Full path: /home2/santhos2/public_html/bharath-coe.firstmatrix.in.net/api/exam_attendance/initialize.php
File size: 4.45 KiB (4561 bytes)
MIME-type: text/x-php
Charset: utf-8

Download   Open   Back

<?php
header('Content-Type: application/json');
require_once '../../config/config.php';

try {
    $input = json_decode(file_get_contents('php://input'), true);
    
    $exam_id = $input['exam_id'] ?? null;
    $academic_year = $input['academic_year'] ?? null;
    $default_status = $input['default_status'] ?? 'Present';
    $force_update = $input['force_update'] ?? false;
    
    if (!$exam_id && !$academic_year) {
        echo json_encode([
            'status' => 'error',
            'message' => 'Either exam_id or academic_year is required'
        ]);
        exit;
    }
    
    $whereConditions = [];
    $params = [];
    
    if ($exam_id) {
        $whereConditions[] = "es.exam_id = ?";
        $params[] = $exam_id;
    }
    
    if ($academic_year) {
        $whereConditions[] = "e.academic_year = ?";
        $params[] = $academic_year;
    }
    
    $whereClause = "WHERE " . implode(" AND ", $whereConditions);
    
    // Get all registrations that need attendance records
    $query = "SELECT sr.registration_id, et.timetable_id, s.first_name, s.last_name, s.university_rollno,
                     sub.subject_name, et.exam_date, et.session
              FROM student_registrations sr
              JOIN exam_subjects es ON sr.exam_subject_id = es.exam_subject_id
              JOIN exams e ON es.exam_id = e.exam_id
              JOIN exam_timetable et ON es.exam_subject_id = et.exam_subject_id
              JOIN students s ON sr.student_id = s.student_id
              JOIN subjects sub ON es.subject_id = sub.subject_id
              $whereClause
              ORDER BY et.exam_date, et.session, s.university_rollno";
    
    $stmt = $pdo->prepare($query);
    $stmt->execute($params);
    $registrations = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (empty($registrations)) {
        echo json_encode([
            'status' => 'error',
            'message' => 'No registrations found for the specified criteria'
        ]);
        exit;
    }
    
    $results = [
        'created' => 0,
        'updated' => 0,
        'skipped' => 0,
        'errors' => []
    ];
    
    foreach ($registrations as $reg) {
        try {
            // Check if attendance record already exists
            $existing = $pdo->prepare("SELECT attendance_id, attendance_status FROM tbl_exam_attendance WHERE registration_id = ?");
            $existing->execute([$reg['registration_id']]);
            $existingRecord = $existing->fetch(PDO::FETCH_ASSOC);
            
            if ($existingRecord) {
                if ($force_update) {
                    // Update existing record
                    $update = $pdo->prepare("UPDATE tbl_exam_attendance 
                                            SET attendance_status = ?, marked_at = CURRENT_TIMESTAMP 
                                            WHERE registration_id = ?");
                    $update->execute([$default_status, $reg['registration_id']]);
                    $results['updated']++;
                } else {
                    $results['skipped']++;
                }
            } else {
                // Create new attendance record
                $insert = $pdo->prepare("INSERT INTO tbl_exam_attendance 
                                         (registration_id, timetable_id, attendance_status) 
                                         VALUES (?, ?, ?)");
                $insert->execute([$reg['registration_id'], $reg['timetable_id'], $default_status]);
                $results['created']++;
            }
            
        } catch (Exception $e) {
            $results['errors'][] = "Error processing registration {$reg['registration_id']}: " . $e->getMessage();
        }
    }
    
    $message = "Attendance initialization completed. Created: {$results['created']}, Updated: {$results['updated']}, Skipped: {$results['skipped']}";
    if (!empty($results['errors'])) {
        $message .= ". Errors: " . count($results['errors']);
    }
    
    echo json_encode([
        'status' => 'success',
        'message' => $message,
        'data' => [
            'results' => $results,
            'total_registrations' => count($registrations),
            'criteria' => [
                'exam_id' => $exam_id,
                'academic_year' => $academic_year,
                'default_status' => $default_status,
                'force_update' => $force_update
            ]
        ]
    ]);
    
} catch (Exception $e) {
    echo json_encode([
        'status' => 'error',
        'message' => 'Error: ' . $e->getMessage()
    ]);
}
?>

PHP File Manager