| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | <?php
namespace App\Observers;
use App\Models\Accounting\Document;
class DocumentObserver
{
    /**
     * Handle the Document "created" event.
     */
    public function created(Document $document): void
    {
        //
    }
    /**
     * Handle the Document "deleted" event.
     */
    public function deleted(Document $document): void
    {
        //
    }
    /**
     * Handle the Document "restored" event.
     */
    public function restored(Document $document): void
    {
        //
    }
    public function updated(Document $document): void
    {
        $this->recalculateTotals($document);
    }
    public function saved(Document $document): void
    {
        $this->recalculateTotals($document);
    }
    protected function recalculateTotals(Document $document): void
    {
        // Sum up totals in cents
        $subtotalCents = $document->lineItems()->sum('total');
        $taxTotalCents = $document->lineItems()->sum('tax_total');
        $discountTotalCents = $document->lineItems()->sum('discount_total');
        $grandTotalCents = $subtotalCents + $taxTotalCents - $discountTotalCents;
        $subtotal = $subtotalCents / 100; // Convert to dollars
        $taxTotal = $taxTotalCents / 100;
        $discountTotal = $discountTotalCents / 100;
        $grandTotal = $grandTotalCents / 100;
        ray([
            'subtotal' => $subtotal,
            'tax_total' => $taxTotal,
            'discount_total' => $discountTotal,
            'grand_total' => $grandTotal,
        ]);
        $document->updateQuietly([
            'subtotal' => $subtotal,
            'tax_total' => $taxTotal,
            'discount_total' => $discountTotal,
            'total' => $grandTotal,
        ]);
    }
    /**
     * Handle the Document "force deleted" event.
     */
    public function forceDeleted(Document $document): void
    {
        //
    }
}
 |