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
+76 -14
View File
@@ -6,6 +6,68 @@ $disableEmergencyBtn = count($emergencies) >= $maxEmergency;
?>
<?= $this->extend('layout/main_layout') ?>
<?= $this->section('styles') ?>
<style>
@media (max-width: 575.98px) {
.parent-register-stack-table {
border: 0;
}
.parent-register-stack-table thead {
display: none;
}
.parent-register-stack-table tbody,
.parent-register-stack-table tr,
.parent-register-stack-table td {
display: block;
width: 100%;
}
.parent-register-stack-table tr {
border: 1px solid #dee2e6;
border-radius: 8px;
margin-bottom: .85rem;
overflow: hidden;
}
.parent-register-stack-table td {
align-items: flex-start;
border-bottom: 1px solid #eef1f3;
display: flex;
gap: .75rem;
justify-content: space-between;
padding: .75rem;
text-align: right;
}
.parent-register-stack-table td:last-child {
border-bottom: 0;
}
.parent-register-stack-table td::before {
color: #6c757d;
content: attr(data-label);
flex: 0 0 42%;
font-size: .8rem;
font-weight: 700;
text-align: left;
}
.parent-register-stack-table td > * {
max-width: 58%;
}
.parent-register-stack-table td[data-label="Action"] {
align-items: center;
}
.parent-register-stack-table td[data-label="Action"] .btn {
white-space: nowrap;
}
}
</style>
<?= $this->endSection() ?>
<?= $this->section('content') ?>
<div class="container my-5">
<h3 class="text-center text-success mb-3" style="font-family: Arial, sans-serif;">Student Registration</h3>
@@ -67,7 +129,7 @@ $disableEmergencyBtn = count($emergencies) >= $maxEmergency;
<?php endif; ?>
<?php if (!empty($existingKids)): ?>
<h5>Student Information</h5>
<table class="table table-bordered">
<table class="table table-bordered parent-register-stack-table">
<thead class="table-light">
<tr>
<th>School ID</th>
@@ -83,12 +145,12 @@ $disableEmergencyBtn = count($emergencies) >= $maxEmergency;
<tbody>
<?php foreach ($existingKids as $kid): ?>
<tr>
<td><?= esc($kid['school_id']) ?></td>
<td><?= esc($kid['firstname']) ?></td>
<td><?= esc($kid['lastname']) ?></td>
<td><?= esc((new DateTime($kid['dob']))->format('m-d-Y')) ?></td>
<td><?= esc($kid['registration_grade']) ?></td>
<td>
<td data-label="School ID"><?= esc($kid['school_id']) ?></td>
<td data-label="First Name"><?= esc($kid['firstname']) ?></td>
<td data-label="Last Name"><?= esc($kid['lastname']) ?></td>
<td data-label="DOB"><?= esc((new DateTime($kid['dob']))->format('m-d-Y')) ?></td>
<td data-label="Grade"><?= esc($kid['registration_grade']) ?></td>
<td data-label="Medical Conditions">
<?php
$mc = is_array($kid['medical_conditions'] ?? null)
? $kid['medical_conditions']
@@ -99,7 +161,7 @@ $disableEmergencyBtn = count($emergencies) >= $maxEmergency;
echo implode('<br>', array_map('esc', $mc));
?>
</td>
<td>
<td data-label="Allergies">
<?php
$al = is_array($kid['allergies'] ?? null)
? $kid['allergies']
@@ -109,7 +171,7 @@ $disableEmergencyBtn = count($emergencies) >= $maxEmergency;
echo implode('<br>', array_map('esc', $al));
?>
</td>
<td class="text-center">
<td class="text-center" data-label="Action">
<?php if ($isEditable && !empty($kid['can_delete'])): ?>
<form action="<?= base_url('/parent/delete_student/' . $kid['id']) ?>"
method="post"
@@ -141,7 +203,7 @@ $disableEmergencyBtn = count($emergencies) >= $maxEmergency;
<?php if (!empty($emergencies)): ?>
<h5 class="mt-4">Emergency Contacts</h5>
<table class="table table-bordered">
<table class="table table-bordered parent-register-stack-table">
<thead class="table-light">
<tr>
<th>First Name</th>
@@ -159,10 +221,10 @@ $disableEmergencyBtn = count($emergencies) >= $maxEmergency;
$lastName = $nameParts[1] ?? '';
?>
<tr>
<td><?= esc($firstName) ?></td>
<td><?= esc($lastName) ?></td>
<td><?= esc($contact['cellphone']) ?></td>
<td><?= esc($contact['relation']) ?></td>
<td data-label="First Name"><?= esc($firstName) ?></td>
<td data-label="Last Name"><?= esc($lastName) ?></td>
<td data-label="Phone"><?= esc($contact['cellphone']) ?></td>
<td data-label="Relation"><?= esc($contact['relation']) ?></td>
</tr>
<?php include(APPPATH . 'Views/parent/edit_emergency_contact.php'); ?>
<?php endforeach; ?>