siakad-itm/app/Services/Admin/Finances/TuitionInvoiceService.php
Yoga Pangestu a76ee85c24
Some checks failed
tests / ci (pull_request) Has been cancelled
feat: add filter functionality to various admin pages
- Implemented filter dialogs in the following pages:
  - Academic Classes Assignments
  - Course Registrations
  - Materials
  - Announcements
  - Feedback
  - Tuition Invoices
  - Course Classes
  - Courses
  - Academic Terms
  - Academic Advising Logs
  - Letter Requests
  - Administrators
  - Lecturers
  - Students

- Updated the useServerTable hook to support filter parameters.
- Enhanced the UI with filter options for better data management and retrieval.
2026-08-26 00:32:16 +07:00

50 lines
1.9 KiB
PHP

<?php
namespace App\Services\Admin\Finances;
use App\Models\TuitionInvoice;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
class TuitionInvoiceService
{
public function paginated(int $perPage = 25, string $search = '', string $sort = 'created_at', string $direction = 'desc', ?int $academicTermId = null): LengthAwarePaginator
{
return TuitionInvoice::query()
->select(['id', 'student_id', 'academic_term_id', 'amount_due', 'due_date'])
->withSum('payments as paid_total', 'amount_paid')
->withCount('payments')
->with(['student.user.profile', 'student.department', 'academicTerm:id,name,semester,start_date,end_date'])
->when($search, fn ($q) => $q->whereHas('student', fn ($q) => $q->where('student_number', 'like', "%{$search}%")
->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))))
->when($academicTermId, fn ($q) => $q->where('academic_term_id', $academicTermId))
->orderBy($sort, $direction)
->paginate($perPage);
}
public function create(array $data): TuitionInvoice
{
return TuitionInvoice::create([
'student_id' => $data['student_id'],
'academic_term_id' => $data['academic_term_id'],
'amount_due' => $data['amount_due'],
'due_date' => $data['due_date'] ?? null,
]);
}
public function update(TuitionInvoice $invoice, array $data): TuitionInvoice
{
$invoice->student_id = $data['student_id'];
$invoice->academic_term_id = $data['academic_term_id'];
$invoice->amount_due = $data['amount_due'];
$invoice->due_date = $data['due_date'] ?? null;
$invoice->update();
return $invoice;
}
public function delete(TuitionInvoice $invoice): bool
{
return $invoice->delete();
}
}