itmpwk.ac.id/app/Services/Admin/Manage/Finance/TuitionPaymentService.php
Yoga Pangestu 353829e053
Some checks failed
tests / ci (pull_request) Has been cancelled
feat: Refactor Admin Manage structure into sub-namespaces for better organization
- Created sub-namespaces under Admin\Manage for Course, Academic, Announcement, Finance, and Service.
- Added new FormRequest classes for handling validation in each sub-namespace.
- Implemented Service classes for managing business logic related to each resource.
- Updated routes to reflect the new sub-namespace structure.
- Enhanced code organization and maintainability by grouping related functionalities.
2026-08-25 21:17:48 +07:00

59 lines
1.6 KiB
PHP

<?php
namespace App\Services\Admin\Manage\Finance;
use App\Models\TuitionInvoice;
use App\Models\TuitionPayment;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\UploadedFile;
class TuitionPaymentService
{
public function forInvoice(TuitionInvoice $invoice): Collection
{
return $invoice->payments()
->with('recorder.profile')
->latest('paid_at')
->get();
}
public function create(TuitionInvoice $invoice, array $data, ?UploadedFile $file): TuitionPayment
{
$payment = $invoice->payments()->create([
'amount_paid' => $data['amount_paid'],
'paid_at' => $data['paid_at'],
'payment_method' => $data['payment_method'] ?? null,
'status' => $data['status'],
'recorded_by' => auth()->id(),
'notes' => $data['notes'] ?? null,
]);
if ($file) {
$payment->addMedia($file)->toMediaCollection('payment_proof');
}
return $payment;
}
public function update(TuitionPayment $payment, array $data, ?UploadedFile $file): TuitionPayment
{
$payment->amount_paid = $data['amount_paid'];
$payment->paid_at = $data['paid_at'];
$payment->payment_method = $data['payment_method'] ?? null;
$payment->status = $data['status'];
$payment->notes = $data['notes'] ?? null;
$payment->update();
if ($file) {
$payment->addMedia($file)->toMediaCollection('payment_proof');
}
return $payment;
}
public function delete(TuitionPayment $payment): bool
{
return $payment->delete();
}
}