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

DocumentObserver.php 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Observers;
  3. use App\Models\Accounting\Document;
  4. class DocumentObserver
  5. {
  6. /**
  7. * Handle the Document "created" event.
  8. */
  9. public function created(Document $document): void
  10. {
  11. //
  12. }
  13. /**
  14. * Handle the Document "deleted" event.
  15. */
  16. public function deleted(Document $document): void
  17. {
  18. //
  19. }
  20. /**
  21. * Handle the Document "restored" event.
  22. */
  23. public function restored(Document $document): void
  24. {
  25. //
  26. }
  27. public function saved(Document $document): void
  28. {
  29. $this->recalculateTotals($document);
  30. }
  31. protected function recalculateTotals(Document $document): void
  32. {
  33. // Sum up values from line items
  34. $subtotalCents = $document->lineItems()->sum('subtotal'); // Use the computed column directly
  35. $taxTotalCents = $document->lineItems()->sum('tax_total'); // Sum from line items
  36. $discountTotalCents = $document->lineItems()->sum('discount_total'); // Sum from line items
  37. $grandTotalCents = $subtotalCents + $taxTotalCents - $discountTotalCents; // Calculated as before
  38. // Convert from cents to dollars
  39. $subtotal = $subtotalCents / 100;
  40. $taxTotal = $taxTotalCents / 100;
  41. $discountTotal = $discountTotalCents / 100;
  42. $grandTotal = $grandTotalCents / 100;
  43. // Update document totals
  44. $document->updateQuietly([
  45. 'subtotal' => $subtotal, // Use database-computed subtotal
  46. 'tax_total' => $taxTotal,
  47. 'discount_total' => $discountTotal,
  48. 'total' => $grandTotal, // Use calculated grand total
  49. ]);
  50. }
  51. /**
  52. * Handle the Document "force deleted" event.
  53. */
  54. public function forceDeleted(Document $document): void
  55. {
  56. //
  57. }
  58. }