Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

RecurringInvoiceObserver.php 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Observers;
  3. use App\Enums\Accounting\RecurringInvoiceStatus;
  4. use App\Models\Accounting\DocumentLineItem;
  5. use App\Models\Accounting\RecurringInvoice;
  6. use Illuminate\Support\Facades\DB;
  7. class RecurringInvoiceObserver
  8. {
  9. public function saving(RecurringInvoice $recurringInvoice): void
  10. {
  11. if (
  12. $recurringInvoice->wasApproved() &&
  13. (($recurringInvoice->isDirty('start_date') && ! $recurringInvoice->last_date))
  14. ) {
  15. $recurringInvoice->next_date = $recurringInvoice->calculateNextDate();
  16. }
  17. if ($recurringInvoice->end_type?->isAfter() && $recurringInvoice->occurrences_count >= $recurringInvoice->max_occurrences) {
  18. $recurringInvoice->status = RecurringInvoiceStatus::Ended;
  19. $recurringInvoice->ended_at = company_now();
  20. }
  21. }
  22. public function saved(RecurringInvoice $recurringInvoice): void
  23. {
  24. if ($recurringInvoice->wasChanged('status')) {
  25. $recurringInvoice->generateDueInvoices();
  26. }
  27. }
  28. protected function otherScheduleDetailsChanged(RecurringInvoice $recurringInvoice): bool
  29. {
  30. return $recurringInvoice->isDirty([
  31. 'frequency',
  32. 'interval_type',
  33. 'interval_value',
  34. 'month',
  35. 'day_of_month',
  36. 'day_of_week',
  37. 'end_type',
  38. 'max_occurrences',
  39. 'end_date',
  40. ]);
  41. }
  42. public function deleted(RecurringInvoice $recurringInvoice): void
  43. {
  44. DB::transaction(function () use ($recurringInvoice) {
  45. $recurringInvoice->lineItems()->each(function (DocumentLineItem $lineItem) {
  46. $lineItem->delete();
  47. });
  48. });
  49. }
  50. }