Fix semester context, attendance rosters, and billing workflows
Deploy to Shared Hosting / Shared hosting deploy (push) Failing after 31s
Tests / PHPUnit (push) Failing after 55s

- load global semester helpers consistently and use date-based semester defaults
- fix grading and daily attendance duplicate student/section rows
- keep attendance violations scoped to the current semester by default
- update invoice, refund, discount, payment, and financial aid flows
- add configuration cleanup migrations for duplicate calendar/semester keys
- refresh parent registration/report-card and print request handling
- update related models, services, views, cron notes, and test coverage
This commit is contained in:
root
2026-08-16 17:41:11 -04:00
parent 36c7e3fc6d
commit 0ac3a8375e
99 changed files with 1598 additions and 814 deletions
+6 -3
View File
@@ -67,7 +67,7 @@ class GradingController extends BaseController
$this->configModel = new ConfigurationModel();
$this->db = \Config\Database::connect();
$this->schoolYear = $this->configModel->getConfig('school_year');
$this->semester = $this->configModel->getConfig('semester');
$this->semester = getSemester();
$this->classSection = new ClassSectionModel();
$this->attendanceCalculator = new AttendanceCalculator(
new AttendanceRecordModel(),
@@ -93,7 +93,7 @@ class GradingController extends BaseController
$configModel = new ConfigurationModel();
$schoolYear = $configModel->getConfig('school_year');
$semester = $configModel->getConfig('semester');
$semester = getSemester();
$student = $studentModel->find($studentId);
$scores = $scoreModel->where([
@@ -140,7 +140,7 @@ class GradingController extends BaseController
$studentModel = new StudentModel();
$schoolYear = $configModel->getConfig('school_year');
$semester = $configModel->getConfig('semester');
$semester = getSemester();
$model = $this->getModelByType($type);
$classSectionIdInt = (int) ($classSectionId ?? 0);
@@ -433,6 +433,7 @@ class GradingController extends BaseController
// Build structures keyed by BUSINESS section id
$grades = []; // class_id => [ ['class_section_id','class_section_name'], ... ]
$studentsBySection = []; // section_id => [ students... ]
$seenStudentsBySection = [];
foreach ($rows as $r) {
$sectionId = (int) ($r['section_id'] ?? 0); // BUSINESS id
@@ -457,6 +458,8 @@ class GradingController extends BaseController
$sid = (int) ($r['student_id'] ?? 0);
if ($sid <= 0) continue;
if (isset($seenStudentsBySection[$sectionId][$sid])) continue;
$seenStudentsBySection[$sectionId][$sid] = true;
$ptapScore = $r['ss_ptap_score'] ?? null;
$semesterScore = $r['ss_semester_score'] ?? null;