logModel = new LateSlipLogModel(); $this->configModel = new ConfigurationModel(); } public function index() { $req = $this->request; $defaultYear = (string) ($this->configModel->getConfig('school_year') ?? ''); $defaultSem = (string) ($this->configModel->getConfig('semester') ?? ''); $schoolYear = trim((string) ($req->getGet('school_year') ?? $defaultYear)); $semester = trim((string) ($req->getGet('semester') ?? $defaultSem)); $q = trim((string) ($req->getGet('q') ?? '')); $dateFrom = trim((string) ($req->getGet('date_from') ?? '')); $dateTo = trim((string) ($req->getGet('date_to') ?? '')); // Normalize dates to Y-m-d for filtering $toDbDate = static function (?string $s): ?string { $s = trim((string) $s); if ($s === '') return null; $ts = strtotime($s); return $ts ? date('Y-m-d', $ts) : null; }; $df = $toDbDate($dateFrom); $dt = $toDbDate($dateTo); $model = $this->logModel; if ($schoolYear !== '') $model = $model->where('school_year', $schoolYear); if ($semester !== '') $model = $model->where('semester', $semester); if ($q !== '') $model = $model->like('student_name', $q); if ($df) $model = $model->where('slip_date >=', $df); if ($dt) $model = $model->where('slip_date <=', $dt); // Limit to most recent 200 entries $logs = $model->orderBy('id', 'DESC')->findAll(200); return view('administrator/late_slip_logs', [ 'schoolYear' => $schoolYear, 'semester' => $semester, 'filters' => [ 'q' => $q, 'date_from' => $dateFrom, 'date_to' => $dateTo, ], 'logs' => $logs, ]); } }