quantity; switch ($item->purchasable_type) { case Perfume::class: $relation = 'perfumes'; break; case Product::class: $relation = 'products'; break; case Bottle::class: $relation = 'bottles'; break; default: return; } $existing = $outlet->{$relation}()->withPivot('stock')->where("{$relation}.id", $item->purchasable_id)->first(); if ($existing) { $previousStock = $existing->pivot->stock ?? 0; $outlet->{$relation}()->updateExistingPivot($item->purchasable_id, [ 'stock' => $previousStock + $quantity, ]); } else { $previousStock = 0; $outlet->{$relation}()->attach($item->purchasable_id, [ 'stock' => $quantity, ]); } activity('Belanja') ->performedOn($item->purchasable) ->causedBy(auth()->user()) ->withProperties([ 'purchasable_id' => $item->purchasable_id, 'purchasable_type' => $item->purchasable_type, 'outlet_id' => $outlet->id, 'quantity_change' => $quantity, 'previous_stock' => $previousStock, 'new_stock' => $previousStock + $quantity, 'purchase_id' => $item->purchase_id ?? null, ]) ->event('Menambah') ->log('Stok '.$item->purchasable->name.' di '.$outlet->name.' bertambah '.currency($quantity)); } public function decreaseOutletStock($outlet, $item) { $quantity = $item->quantity; switch ($item->purchasable_type) { case Perfume::class: $relation = 'perfumes'; break; case Product::class: $relation = 'products'; break; case Bottle::class: $relation = 'bottles'; break; default: return; } $existing = $outlet->{$relation}()->withPivot('stock')->where("{$relation}.id", $item->purchasable_id)->first(); if ($existing) { $currentStock = $existing->pivot->stock ?? 0; $newStock = max(0, $currentStock - $quantity); $outlet->{$relation}()->updateExistingPivot($item->purchasable_id, [ 'stock' => $newStock, ]); } activity('Belanja') ->performedOn($item->purchasable) ->causedBy(auth()->user()) ->withProperties([ 'purchasable_id' => $item->purchasable_id, 'purchasable_type' => $item->purchasable_type, 'outlet_id' => $outlet->id, 'quantity_change' => $quantity, 'previous_stock' => $currentStock, 'new_stock' => $newStock, 'purchase_id' => $item->purchase_id, ]) ->event('Mengurangi') ->log('Stok '.$item->purchasable->name.' di '.$outlet->name.' berkurang '.$quantity); } }