Spaces:
Running
Running
| /** | |
| * API Endpoint: Fetch Term Invoice (Fee Breakdown) | |
| * | |
| * Returns the breakdown of fees billed to a student for a specific term/session. | |
| * Includes billed amount, paid amount, and outstanding balance per fee. | |
| * | |
| * Method: GET | |
| * URL: /api/students/invoice?student_id=...&academic_session=...&term=... | |
| */ | |
| require_once '../../db_config.php'; | |
| require_once '../../includes/PaymentProcessor.php'; | |
| require_once '../../includes/ApiValidator.php'; | |
| require_once '../../config/api_config.php'; | |
| // Initialize core classes | |
| $validator = new ApiValidator($pdo, defined('API_KEYS') ? API_KEYS : []); | |
| $processor = new PaymentProcessor($pdo); | |
| // 1. Validate Request | |
| $validation = $validator->validateRequest(['GET']); | |
| if (!$validation['valid']) { | |
| http_response_code($validation['http_code']); | |
| echo json_encode(['status' => 'error', 'message' => $validation['error']]); | |
| exit; | |
| } | |
| // 2. Validate Input Parameters | |
| $studentId = trim($_GET['student_id'] ?? ''); | |
| $session = trim($_GET['academic_session'] ?? ''); | |
| $term = trim($_GET['term'] ?? ''); // term_of_session | |
| $errors = []; | |
| if (empty($studentId)) | |
| $errors[] = "Student ID is required"; | |
| if (empty($session)) | |
| $errors[] = "Academic Session is required"; | |
| if (empty($term)) | |
| $errors[] = "Term is required"; | |
| if (!empty($errors)) { | |
| http_response_code(400); | |
| echo json_encode(['status' => 'error', 'message' => implode(', ', $errors)]); | |
| exit; | |
| } | |
| // 3. Validate Student Exists | |
| $studentCheck = $validator->validateStudentExists($studentId); | |
| if (!$studentCheck['valid']) { | |
| http_response_code($studentCheck['http_code']); | |
| echo json_encode(['status' => 'error', 'message' => $studentCheck['error']]); | |
| exit; | |
| } | |
| try { | |
| // 4. Fetch Data | |
| $invoice = $processor->getTermInvoice($studentId, $session, $term); | |
| // 5. Send Response | |
| echo json_encode([ | |
| 'status' => 'success', | |
| 'data' => [ | |
| 'student_id' => $studentId, | |
| 'academic_session' => $session, | |
| 'term' => $term, | |
| 'items' => $invoice | |
| ] | |
| ]); | |
| } catch (Exception $e) { | |
| http_response_code(500); | |
| echo json_encode(['status' => 'error', 'message' => 'Internal server error: ' . $e->getMessage()]); | |
| } | |