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.

@@ -362,9 +362,9 @@ function CreateForm({ const availableStudents = academicTermId ? students.filter( - (student) => - !student.invoiced_term_ids?.includes(Number(academicTermId)), - ) + (student) => + !student.invoiced_term_ids?.includes(Number(academicTermId)), + ) : []; function reset() { @@ -441,7 +441,7 @@ function CreateForm({ > {selectedStudents.length === availableStudents.length && - availableStudents.length > 0 + availableStudents.length > 0 ? 'Batalkan Semua' : 'Pilih Semua'} @@ -478,8 +478,8 @@ function CreateForm({ selectedStudents.length > 0 ? '' : academicTermId - ? 'Pilih mahasiswa (aktif)' - : 'Pilih periode akademik terlebih dahulu' + ? 'Pilih mahasiswa (aktif)' + : 'Pilih periode akademik terlebih dahulu' } />