This commit is contained in:
@@ -54,14 +54,29 @@ class ExtraChargesController extends BaseController
|
||||
/** Render HTML management page */
|
||||
public function page()
|
||||
{
|
||||
$legacyTermKeys = ['school_year', 'schoolYear', 'year', 'semester'];
|
||||
$query = $this->request->getGet();
|
||||
$hasLegacyTermFilter = false;
|
||||
foreach ($legacyTermKeys as $key) {
|
||||
if (array_key_exists($key, $query)) {
|
||||
unset($query[$key]);
|
||||
$hasLegacyTermFilter = true;
|
||||
}
|
||||
}
|
||||
if ($hasLegacyTermFilter) {
|
||||
$target = site_url('admin/charges') . (!empty($query) ? '?' . http_build_query($query) : '');
|
||||
return redirect()->to($target);
|
||||
}
|
||||
|
||||
$schoolYearContext = $this->resolveSchoolYearContext();
|
||||
$schoolYear = $schoolYearContext->yearName();
|
||||
$parentId = (int)($this->request->getGet('parent_id') ?? 0);
|
||||
$status = $this->request->getGet('status') ?: null;
|
||||
$yearSelect = (string)($this->request->getGet('school_year') ?? $this->schoolYear);
|
||||
|
||||
$rows = [];
|
||||
if ($parentId > 0) {
|
||||
$rows = $this->additionalChargeModel
|
||||
->byParentTerm($parentId, $this->schoolYear, $this->semester, $status);
|
||||
->byParentTerm($parentId, $schoolYear, $this->semester, $status);
|
||||
}
|
||||
|
||||
// Load ALL parents for current view
|
||||
@@ -85,7 +100,7 @@ class ExtraChargesController extends BaseController
|
||||
$parentIds = array_map(fn($r) => (int)$r['id'], $parents);
|
||||
$invoicesByParent = [];
|
||||
if (!empty($parentIds)) {
|
||||
$all = $this->invoiceModel->getAllInvoicesByUserIds($parentIds, $yearSelect);
|
||||
$all = $this->invoiceModel->getAllInvoicesByUserIds($parentIds, $schoolYear);
|
||||
foreach ($all as $inv) {
|
||||
$pid = (int)$inv['parent_id'];
|
||||
$invoicesByParent[$pid][] = [
|
||||
@@ -107,7 +122,7 @@ class ExtraChargesController extends BaseController
|
||||
|
||||
// ✅ Always pull all charges for the selected year & current semester (all parents)
|
||||
$rows = $this->additionalChargeModel->listAllForTerm(
|
||||
$yearSelect,
|
||||
$schoolYear,
|
||||
$this->semester,
|
||||
$status,
|
||||
$q,
|
||||
@@ -115,38 +130,6 @@ class ExtraChargesController extends BaseController
|
||||
);
|
||||
$pager = $this->additionalChargeModel->pager;
|
||||
|
||||
// Build school year options from data (additional_charges + invoices)
|
||||
$schoolYears = [];
|
||||
try {
|
||||
$q1 = $this->db->table('additional_charges')->select('DISTINCT school_year', false)
|
||||
->where('school_year IS NOT NULL', null, false)
|
||||
->orderBy('school_year', 'DESC')->get()->getResultArray();
|
||||
foreach ($q1 as $r) {
|
||||
$val = (string)($r['school_year'] ?? '');
|
||||
if ($val !== '' && !in_array($val, $schoolYears, true)) $schoolYears[] = $val;
|
||||
}
|
||||
} catch (\Throwable $e) {}
|
||||
try {
|
||||
$q2 = $this->db->table('invoices')->select('DISTINCT school_year', false)
|
||||
->where('school_year IS NOT NULL', null, false)
|
||||
->orderBy('school_year', 'DESC')->get()->getResultArray();
|
||||
foreach ($q2 as $r) {
|
||||
$val = (string)($r['school_year'] ?? '');
|
||||
if ($val !== '' && !in_array($val, $schoolYears, true)) $schoolYears[] = $val;
|
||||
}
|
||||
} catch (\Throwable $e) {}
|
||||
if (empty($schoolYears) && is_string($this->schoolYear) && $this->schoolYear !== '') {
|
||||
// fallback: generate recent years around configured schoolYear
|
||||
$schoolYears[] = $this->schoolYear;
|
||||
// Optionally add previous/next
|
||||
[$start, $end] = explode('-', $this->schoolYear) + [0 => date('Y'), 1 => date('Y')+1];
|
||||
$start = (int)$start;
|
||||
for ($i = 1; $i <= 3; $i++) {
|
||||
$schoolYears[] = ($start - $i) . '-' . (($start - $i) + 1);
|
||||
}
|
||||
}
|
||||
rsort($schoolYears);
|
||||
|
||||
return view('payment/extra_charges', [
|
||||
'q' => $q,
|
||||
'pager' => $pager,
|
||||
@@ -157,9 +140,9 @@ class ExtraChargesController extends BaseController
|
||||
'parentId' => $parentId,
|
||||
'selectedParentLabel' => $selectedParentLabel,
|
||||
'status' => $status,
|
||||
'schoolYear' => $yearSelect,
|
||||
'schoolYears' => $schoolYears,
|
||||
'schoolYear' => $schoolYear,
|
||||
'semester' => $this->semester,
|
||||
'isSchoolYearReadonly' => $schoolYearContext->isReadonly(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -273,7 +256,7 @@ class ExtraChargesController extends BaseController
|
||||
public function invoicesForParent()
|
||||
{
|
||||
$parentId = (int)($this->request->getGet('parent_id') ?? 0);
|
||||
$schoolYear = (string)($this->request->getGet('school_year') ?? $this->schoolYear);
|
||||
$schoolYear = $this->currentSchoolYearName((string)($this->schoolYear ?? ''));
|
||||
|
||||
$rows = ($parentId > 0)
|
||||
? ($this->invoiceModel->getInvoicesByUserId($parentId, $schoolYear) ?? [])
|
||||
@@ -304,6 +287,9 @@ class ExtraChargesController extends BaseController
|
||||
|
||||
public function store()
|
||||
{
|
||||
$schoolYearContext = $this->resolveSchoolYearContext();
|
||||
$this->assertSchoolYearWritable($schoolYearContext);
|
||||
$schoolYear = $schoolYearContext->yearName();
|
||||
$data = $this->request->getPost();
|
||||
|
||||
$rules = [
|
||||
@@ -336,8 +322,8 @@ class ExtraChargesController extends BaseController
|
||||
$payload = [
|
||||
'parent_id' => (int)$data['parent_id'], // ← users.id of the parent
|
||||
'invoice_id' => $invoiceId,
|
||||
'school_year' => $data['school_year'] ?? $this->schoolYear,
|
||||
'semester' => $data['semester'] ?? $this->semester,
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => (string)$this->semester,
|
||||
'charge_type' => $chargeType,
|
||||
'title' => trim($data['title']),
|
||||
'description' => trim($data['description'] ?? ''),
|
||||
@@ -351,7 +337,7 @@ class ExtraChargesController extends BaseController
|
||||
$this->db->transStart();
|
||||
|
||||
// BEFORE
|
||||
$invoiceBefore = $this->invoiceModel->getInvoicesByParentId($data['parent_id'], $this->schoolYear);
|
||||
$invoiceBefore = $this->invoiceModel->getInvoicesByParentId($data['parent_id'], $schoolYear);
|
||||
|
||||
// Insert charge
|
||||
$this->additionalChargeModel->insert($payload);
|
||||
@@ -363,7 +349,7 @@ class ExtraChargesController extends BaseController
|
||||
}
|
||||
|
||||
// AFTER
|
||||
$invoiceAfter = $this->invoiceModel->getInvoicesByParentId($data['parent_id'], $this->schoolYear);
|
||||
$invoiceAfter = $this->invoiceModel->getInvoicesByParentId($data['parent_id'], $schoolYear);
|
||||
|
||||
// Parent USER (not parent table)
|
||||
$parentUser = $this->userModel->getUserInfoById($data['parent_id']);
|
||||
@@ -526,8 +512,8 @@ class ExtraChargesController extends BaseController
|
||||
/** JSON: list charges for the current term (with optional filters). */
|
||||
public function apiList()
|
||||
{
|
||||
$year = (string)($this->request->getGet('school_year') ?? $this->schoolYear);
|
||||
$sem = (string)($this->request->getGet('semester') ?? $this->semester);
|
||||
$year = $this->currentSchoolYearName((string)($this->schoolYear ?? ''));
|
||||
$sem = (string)$this->semester;
|
||||
$status = $this->request->getGet('status') ?: null;
|
||||
$q = trim((string)($this->request->getGet('q') ?? '')) ?: null;
|
||||
$per = (int)($this->request->getGet('per_page') ?? 50);
|
||||
|
||||
Reference in New Issue
Block a user