您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

InvoiceObserver.php 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace App\Observers;
  3. use App\Enums\Accounting\InvoiceStatus;
  4. use App\Models\Accounting\DocumentLineItem;
  5. use App\Models\Accounting\Invoice;
  6. use App\Models\Accounting\Transaction;
  7. use Illuminate\Support\Facades\DB;
  8. class InvoiceObserver
  9. {
  10. public function saving(Invoice $invoice): void
  11. {
  12. if (! $invoice->wasApproved()) {
  13. return;
  14. }
  15. if ($invoice->isDirty('due_date') && $invoice->status === InvoiceStatus::Overdue && ! $invoice->shouldBeOverdue() && ! $invoice->hasPayments()) {
  16. $invoice->status = $invoice->hasBeenSent() ? InvoiceStatus::Sent : InvoiceStatus::Unsent;
  17. return;
  18. }
  19. if ($invoice->shouldBeOverdue()) {
  20. $invoice->status = InvoiceStatus::Overdue;
  21. }
  22. }
  23. public function deleted(Invoice $invoice): void
  24. {
  25. DB::transaction(function () use ($invoice) {
  26. $invoice->lineItems()->each(function (DocumentLineItem $lineItem) {
  27. $lineItem->delete();
  28. });
  29. $invoice->transactions()->each(function (Transaction $transaction) {
  30. $transaction->delete();
  31. });
  32. });
  33. }
  34. }