123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- <?php
-
- namespace App\Observers;
-
- use App\Enums\Accounting\RecurringInvoiceStatus;
- use App\Models\Accounting\DocumentLineItem;
- use App\Models\Accounting\RecurringInvoice;
- use Illuminate\Support\Facades\DB;
-
- class RecurringInvoiceObserver
- {
- public function saving(RecurringInvoice $recurringInvoice): void
- {
- if (
- $recurringInvoice->wasApproved() &&
- (($recurringInvoice->isDirty('start_date') && ! $recurringInvoice->last_date))
- ) {
- $recurringInvoice->next_date = $recurringInvoice->calculateNextDate();
- }
-
- if ($recurringInvoice->end_type?->isAfter() && $recurringInvoice->occurrences_count >= $recurringInvoice->max_occurrences) {
- $recurringInvoice->status = RecurringInvoiceStatus::Ended;
- $recurringInvoice->ended_at = now();
- }
- }
-
- public function saved(RecurringInvoice $recurringInvoice): void
- {
- if ($recurringInvoice->wasChanged('status')) {
- $recurringInvoice->generateDueInvoices();
- }
- }
-
- protected function otherScheduleDetailsChanged(RecurringInvoice $recurringInvoice): bool
- {
- return $recurringInvoice->isDirty([
- 'frequency',
- 'interval_type',
- 'interval_value',
- 'month',
- 'day_of_month',
- 'day_of_week',
- 'end_type',
- 'max_occurrences',
- 'end_date',
- ]);
- }
-
- public function deleted(RecurringInvoice $recurringInvoice): void
- {
- DB::transaction(function () use ($recurringInvoice) {
- $recurringInvoice->lineItems()->each(function (DocumentLineItem $lineItem) {
- $lineItem->delete();
- });
- });
- }
- }
|