dress/app/Observers/OrderObserver.php

48 lines
1.1 KiB
PHP

<?php
namespace App\Observers;
use App\Models\Order;
class OrderObserver
{
/**
* Handle the Order "creating" event.
*/
public function creating(Order $order): void
{
$date = $order->created_at ?? now();
$lastOrder = Order::whereDate('created_at', $date->format('Y-m-d'))
->lockForUpdate()
->count();
$sequence = str_pad($lastOrder + 1, 3, '0', STR_PAD_LEFT);
$order->order_number = 'ORD-'.$date->format('Ymd').'-'.$sequence;
if (! $order->user_id) {
$order->user_id = auth()->id();
}
$order->total = $order->subtotal - $order->discount;
}
/**
* Handle the Order "updating" event.
*/
public function updating(Order $order): void
{
$order->total = $order->subtotal - $order->discount;
}
/**
* Handle the Order "deleting" event.
*/
public function deleting(Order $order): void
{
foreach ($order->items as $item) {
$item->product->increment('stock', $item->qty);
}
}
}