From 464ce3df392a20cc2df7f886c2372da56cd36b57 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Wed, 5 Nov 2025 13:10:21 +0700 Subject: [PATCH] feat(order): tambah poin saat update --- app/Livewire/Forms/Studio/Manage/OrderForm.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/Livewire/Forms/Studio/Manage/OrderForm.php b/app/Livewire/Forms/Studio/Manage/OrderForm.php index 1a37612..1943d7e 100644 --- a/app/Livewire/Forms/Studio/Manage/OrderForm.php +++ b/app/Livewire/Forms/Studio/Manage/OrderForm.php @@ -111,11 +111,15 @@ public function store() // Calculate total (subtotal - manual discount - voucher discount) $total = $afterManual - $voucherDiscount; - $member = User::whereHas('customer', fn ($q) => $q->where('id', $this->member_id))->first(); + $pointsEarned = (int) floor($total / 5000); // Wrap the entire operation in a database transaction // Ensures atomicity — if any step fails, all changes are rolled back - DB::transaction(function () use ($invoiceNumber, $cogs, $subtotal, $discount, $total, $items, $member) { + DB::transaction(function () use ($invoiceNumber, $cogs, $subtotal, $discount, $total, $items, $pointsEarned) { + $member = User::whereHas('customer', fn ($q) => $q->where('id', $this->member_id)) + ->with(['membership' => fn ($q) => $q->lockForUpdate()]) + ->first(); + $order = Order::create([ 'outlet_id' => $this->outlet_id, 'user_id' => auth()->id(), @@ -174,6 +178,14 @@ public function store() } } + // Update member tier points + if ($member && $member->membership) { + $member->membership()->update([ + 'tier_points' => DB::raw("tier_points + $pointsEarned"), + 'reward_points' => DB::raw("reward_points + $pointsEarned"), + 'last_transaction_at' => now(), + ]); + } }); return [