diff --git a/app/Livewire/Studio/Manage/Order/Index.php b/app/Livewire/Studio/Manage/Order/Index.php index 4cac088..08de2ba 100644 --- a/app/Livewire/Studio/Manage/Order/Index.php +++ b/app/Livewire/Studio/Manage/Order/Index.php @@ -19,7 +19,7 @@ class Index extends Component public function delete(Order $order) { foreach ($order->items as $item) { - $this->decreaseOutletStock($order->outlet, $item); + $this->increaseOutletStock($order->outlet, $item); } $order->delete(); diff --git a/app/Traits/Order/WithAddItem.php b/app/Traits/Order/WithAddItem.php index 9ffbf9d..d5fb7d7 100644 --- a/app/Traits/Order/WithAddItem.php +++ b/app/Traits/Order/WithAddItem.php @@ -111,16 +111,14 @@ protected function handleRefillPerfume() $perfume = Perfume::find($this->form->perfume_id); $quality = Formula::find($this->form->quality_id); - $size = $this->form->bottle_size; + $quantity = $quality->volume; - if (! $perfume || ! $quality || $size <= 0) { + if (! $perfume || ! $quality || $quantity <= 0) { $this->toast('Parfum, ukuran, atau kualitas tidak valid.', 'Gagal', 'danger'); return; } - $quantity = $size; - $this->addOrUpdateOrderItem($perfume, $quantity); $this->toast('Parfum isi ulang ditambahkan ke keranjang.', 'Berhasil'); diff --git a/app/Traits/Order/WithUpdateStock.php b/app/Traits/Order/WithUpdateStock.php index 89558b6..bbf7ca5 100644 --- a/app/Traits/Order/WithUpdateStock.php +++ b/app/Traits/Order/WithUpdateStock.php @@ -12,7 +12,7 @@ public function increaseOutletStock($outlet, $item) { $quantity = $item->quantity; - switch ($item->purchasable_type) { + switch ($item->orderable_type) { case Perfume::class: $relation = 'perfumes'; break; @@ -26,25 +26,40 @@ public function increaseOutletStock($outlet, $item) return; } - $existing = $outlet->{$relation}()->where("{$relation}.id", $item->purchasable_id)->first(); + $existing = $outlet->{$relation}()->withPivot('stock')->where("{$relation}.id", $item->orderable_id)->first(); if ($existing) { $currentStock = $existing->pivot->stock ?? 0; - $outlet->{$relation}()->updateExistingPivot($item->purchasable_id, [ + $outlet->{$relation}()->updateExistingPivot($item->orderable_id, [ 'stock' => $currentStock + $quantity, ]); } else { - $outlet->{$relation}()->attach($item->purchasable_id, [ + $outlet->{$relation}()->attach($item->orderable_id, [ 'stock' => $quantity, ]); } + + activity('Order') + ->performedOn($item->orderable) + ->causedBy(auth()->user()) + ->withProperties([ + 'orderable_id' => $item->orderable_id, + 'orderable_type' => $item->orderable_type, + 'outlet_id' => $outlet->id, + 'quantity_change' => $quantity, + 'previous_stock' => $currentStock, + 'new_stock' => $currentStock + $quantity, + 'purchase_id' => $item->purchase_id ?? null, + ]) + ->event('Menambah') + ->log('Stok '.$item->orderable->name.' di '.$outlet->name.' bertambah '.currency($quantity)); } public function decreaseOutletStock($outlet, $item) { $quantity = $item->quantity; - switch ($item->purchasable_type) { + switch ($item->orderable_type) { case Perfume::class: $relation = 'perfumes'; break; @@ -58,14 +73,29 @@ public function decreaseOutletStock($outlet, $item) return; } - $existing = $outlet->{$relation}()->where("{$relation}.id", $item->purchasable_id)->first(); + $existing = $outlet->{$relation}()->withPivot('stock')->where("{$relation}.id", $item->orderable_id)->first(); if ($existing) { $currentStock = $existing->pivot->stock ?? 0; $newStock = max(0, $currentStock - $quantity); - $outlet->{$relation}()->updateExistingPivot($item->purchasable_id, [ + $outlet->{$relation}()->updateExistingPivot($item->orderable_id, [ 'stock' => $newStock, ]); } + + activity('Order') + ->performedOn($item->orderable) + ->causedBy(auth()->user()) + ->withProperties([ + 'orderable_id' => $item->orderable_id, + 'orderable_type' => $item->orderable_type, + 'outlet_id' => $outlet->id, + 'quantity_change' => $quantity, + 'previous_stock' => $currentStock, + 'new_stock' => $currentStock - $quantity, + 'purchase_id' => $item->purchase_id ?? null, + ]) + ->event('Mengurangi') + ->log('Stok '.$item->orderable->name.' di '.$outlet->name.' berkurang '.currency($quantity)); } }