diff --git a/app/Http/Controllers/Admin/Finances/TuitionInvoiceController.php b/app/Http/Controllers/Admin/Finances/TuitionInvoiceController.php index ec47952..e4c3957 100644 --- a/app/Http/Controllers/Admin/Finances/TuitionInvoiceController.php +++ b/app/Http/Controllers/Admin/Finances/TuitionInvoiceController.php @@ -35,9 +35,7 @@ public function index(PaginatedRequest $request): Response $academicTerms = $this->academicTermService->getAllForSelect(); $requestedTermId = $request->validated('academic_term_id'); - $defaultTermId = $academicTerms->firstWhere('is_active', true)?->id - ?? $academicTerms->sortByDesc('start_date')->first()?->id; - $summaryTermId = $requestedTermId ?? $defaultTermId; + $summaryTermId = $requestedTermId ?? $this->academicTermService->getActive()?->id; return Inertia::render('admin/finances/tuition-invoices/index', [ 'invoices' => $this->service->paginated( diff --git a/app/Services/Admin/Master/AcademicTermService.php b/app/Services/Admin/Master/AcademicTermService.php index f2eb514..0d4dc71 100644 --- a/app/Services/Admin/Master/AcademicTermService.php +++ b/app/Services/Admin/Master/AcademicTermService.php @@ -14,6 +14,16 @@ public function getAllForSelect(): Collection return AcademicTerm::select(['id', 'name', 'semester', 'start_date', 'end_date', 'is_active'])->latest()->get(); } + /** + * The academic term currently marked active, falling back to the one with + * the latest start date if none is explicitly active. + */ + public function getActive(): ?AcademicTerm + { + return AcademicTerm::where('is_active', true)->first() + ?? AcademicTerm::orderByDesc('start_date')->first(); + } + public function paginated(int $perPage = 25, string $search = '', ?string $semester = null, ?bool $isActive = null): LengthAwarePaginator { return AcademicTerm::query() diff --git a/resources/js/pages/admin/finances/tuition-invoices/index.tsx b/resources/js/pages/admin/finances/tuition-invoices/index.tsx index f6070f6..1ae450c 100644 --- a/resources/js/pages/admin/finances/tuition-invoices/index.tsx +++ b/resources/js/pages/admin/finances/tuition-invoices/index.tsx @@ -1,3 +1,14 @@ +import { Head, router } from '@inertiajs/react'; +import { format } from 'date-fns'; +import type { LucideIcon } from 'lucide-react'; +import { + CircleDollarSign, + FileText, + Plus, + UserRoundX, + Wallet, +} from 'lucide-react'; +import { useState } from 'react'; import type { PaginationState } from '@/components/data-table'; import { DataTable } from '@/components/data-table'; import { DatePicker } from '@/components/date-picker'; @@ -55,17 +66,6 @@ import { PaymentStatusLabels, PaymentStatuses, } from '@/types/tuition-payment'; -import { Head, router } from '@inertiajs/react'; -import { format } from 'date-fns'; -import type { LucideIcon } from 'lucide-react'; -import { - CircleDollarSign, - FileText, - Plus, - UserRoundX, - Wallet, -} from 'lucide-react'; -import { useState } from 'react'; import { createTuitionInvoiceColumns } from './columns'; type AcademicTermOption = { id: number; name: string; semester: string }; @@ -208,8 +208,8 @@ export default function TuitionInvoiceIndex({ Ringkasan berikut hanya menampilkan periode{' '} {summaryAcademicTerm ? formatAcademicTermLabel(summaryAcademicTerm) - : '-'} - {' '} dan bisa disesuaikan lewat filter. + : '-'}{' '} + dan bisa disesuaikan lewat filter.