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
+11
View File
@@ -175,6 +175,7 @@
aria-autocomplete="list"
aria-haspopup="listbox"
value="<?= esc($searchTermUsedInSearch ?? '') ?>">
<button class="btn btn-outline-secondary" type="button" id="manualPayClearSearch">Clear</button>
<button class="btn btn-primary" type="submit">Search</button>
</div>
<div id="manualPaySuggest" class="list-group manual-pay-suggest d-none" role="listbox"></div>
@@ -1001,9 +1002,11 @@
function initSearchSuggest() {
const input = _el('manualPaySearchInput');
const suggest = _el('manualPaySuggest');
const clear = _el('manualPayClearSearch');
if (!input || !suggest) return;
const suggestUrl = <?= json_encode(site_url('payment/manual_pay_suggest')) ?>;
const manualPayUrl = <?= json_encode(site_url('payment/manual_pay')) ?>;
let lastRequest = 0;
function hideSuggest() {
@@ -1089,6 +1092,14 @@
if (e.key === 'Escape') hideSuggest();
});
if (clear) {
clear.addEventListener('click', () => {
input.value = '';
hideSuggest();
window.location.href = manualPayUrl;
});
}
document.addEventListener('click', (e) => {
if (e.target === input || suggest.contains(e.target)) return;
hideSuggest();