| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | <?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 saved(Document $document): void
    {
        $this->recalculateTotals($document);
    }
    protected function recalculateTotals(Document $document): void
    {
        // Sum up values from line items
        $subtotalCents = $document->lineItems()->sum('subtotal'); // Use the computed column directly
        $taxTotalCents = $document->lineItems()->sum('tax_total'); // Sum from line items
        $discountTotalCents = $document->lineItems()->sum('discount_total'); // Sum from line items
        $grandTotalCents = $subtotalCents + $taxTotalCents - $discountTotalCents; // Calculated as before
        // Convert from cents to dollars
        $subtotal = $subtotalCents / 100;
        $taxTotal = $taxTotalCents / 100;
        $discountTotal = $discountTotalCents / 100;
        $grandTotal = $grandTotalCents / 100;
        // Update document totals
        $document->updateQuietly([
            'subtotal' => $subtotal, // Use database-computed subtotal
            'tax_total' => $taxTotal,
            'discount_total' => $discountTotal,
            'total' => $grandTotal, // Use calculated grand total
        ]);
    }
    /**
     * Handle the Document "force deleted" event.
     */
    public function forceDeleted(Document $document): void
    {
        //
    }
}
 |