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
+2 -7
View File
@@ -147,7 +147,6 @@ final class FinancialAidService
$classSectionModel = $this->classSectionModel ?? new ClassSectionModel();
$eventChargesModel = $this->eventChargesModel ?? new EventChargesModel();
$configurationModel = $this->configurationModel ?? new ConfigurationModel();
$userModel = $this->userModel ?? new UserModel();
$invoiceIssuanceService = $this->invoiceIssuanceService ?? new InvoiceIssuanceService(
$this->requestModel->db,
$this->invoiceModel,
@@ -155,7 +154,7 @@ final class FinancialAidService
$this->invoiceLedgerService
);
$semester = (string) ($configurationModel->getConfig('semester') ?: '');
$semester = (string) (getSemester() ?: '');
$enrollments = $enrollmentModel
->where('parent_id', $parentId)
->where('school_year', $schoolYear)
@@ -199,16 +198,12 @@ final class FinancialAidService
throw new RuntimeException('Invoice could not be created because this parent has no billable tuition or event charges.');
}
$schoolId = $userModel->getSchoolIdByUserId($parentId);
$invoiceNumber = !empty($schoolId)
? 'INV-' . $schoolId . '-' . uniqid()
: uniqid('INV-');
$issueUtc = (new DateTime('now', new DateTimeZone('UTC')))->format('Y-m-d H:i:s');
$dueUtc = $this->invoiceDueUtc($configurationModel);
$result = $invoiceIssuanceService->issueInvoice(new IssueInvoiceCommand([
'parent_id' => $parentId,
'invoice_number' => $invoiceNumber,
'invoice_number' => $invoiceIssuanceService->generateInvoiceNumber($schoolYear, $parentId),
'total_amount' => $totalAmount,
'paid_amount' => 0,
'balance' => $totalAmount,