Fix semester context, attendance rosters, and billing workflows
- 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:
@@ -1,11 +1,27 @@
|
||||
<?= $this->extend('layout/main_layout') ?>
|
||||
<?= $this->section('content') ?>
|
||||
<?php $isSchoolYearReadonly = (bool) ($isSchoolYearReadonly ?? false); ?>
|
||||
<?php
|
||||
$isSchoolYearReadonly = (bool) ($isSchoolYearReadonly ?? false);
|
||||
$successMessage = session()->getFlashdata('success');
|
||||
$errorMessage = session()->getFlashdata('error');
|
||||
?>
|
||||
|
||||
<div class="container-fluid py-5">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h2>Print/Copy Requests</h2>
|
||||
<?php if ($successMessage): ?>
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
<?= esc($successMessage) ?>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($errorMessage): ?>
|
||||
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||
<?= esc($errorMessage) ?>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($isSchoolYearReadonly): ?>
|
||||
<div class="alert alert-warning">
|
||||
This school year is read-only. Existing requests are visible, but changes are disabled.
|
||||
@@ -46,6 +62,7 @@
|
||||
<div class="tab-pane fade show active" id="tab-print" role="tabpanel" aria-labelledby="tab-print-tab">
|
||||
<form action="<?= site_url('print-requests/create') ?>" method="post" enctype="multipart/form-data">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="request_token" value="<?= esc($printRequestToken ?? '') ?>">
|
||||
<?php if (session()->has('errors')): ?>
|
||||
<div class="alert alert-danger">
|
||||
<ul>
|
||||
@@ -128,6 +145,7 @@
|
||||
</div>
|
||||
<form id="copyRequestForm" method="post" action="<?= site_url('print-requests/create-copy') ?>">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="request_token" value="<?= esc($copyRequestToken ?? '') ?>">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-4">
|
||||
<label for="copy_num_copies" class="form-label">Number of Copies</label>
|
||||
@@ -353,8 +371,14 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
const dateSelect = document.getElementById('required_by_date');
|
||||
const timeSelect = document.getElementById('required_by_time');
|
||||
const hiddenInput = document.getElementById('required_by');
|
||||
const submitButton = createForm.querySelector('button[type="submit"]');
|
||||
if (dateSelect.value && timeSelect.value) {
|
||||
hiddenInput.value = dateSelect.value + 'T' + timeSelect.value;
|
||||
if (submitButton) {
|
||||
submitButton.disabled = true;
|
||||
submitButton.dataset.originalText = submitButton.textContent;
|
||||
submitButton.textContent = 'Submitting...';
|
||||
}
|
||||
} else {
|
||||
if (!dateSelect.value) {
|
||||
alert('Please select a date.');
|
||||
@@ -483,6 +507,7 @@ if (copyForm) {
|
||||
const dateSelect = document.getElementById('copy_required_by_date');
|
||||
const timeSelect = document.getElementById('copy_required_by_time');
|
||||
const hiddenInput = document.getElementById('copy_required_by');
|
||||
const submitButton = copyForm.querySelector('button[type="submit"]');
|
||||
if (!dateSelect || !dateSelect.value) {
|
||||
alert('Please select a date for the copy request.');
|
||||
e.preventDefault();
|
||||
@@ -496,6 +521,11 @@ if (copyForm) {
|
||||
if (hiddenInput) {
|
||||
hiddenInput.value = dateSelect.value + 'T' + timeSelect.value;
|
||||
}
|
||||
if (submitButton) {
|
||||
submitButton.disabled = true;
|
||||
submitButton.dataset.originalText = submitButton.textContent;
|
||||
submitButton.textContent = 'Submitting...';
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user