stock_adjustments = [ 'outlet' => [], ]; $user = auth()->user(); $userOutletIds = $user->outlets->pluck('id')->toArray(); $itemOutlets = $item->outlets() ->whereIn('outlets.id', $userOutletIds) ->withPivot('stock') ->get(); foreach ($itemOutlets as $outlet) { $stock = $outlet->pivot->stock ?? 0; $this->stock_adjustments['outlet'][$outlet->id] = [ 'name' => $outlet->name, 'stock' => $stock, 'new_stock' => (string) $stock, 'note' => '', ]; } } protected function saveStockAdjustments(Model $item, string $itemType): void { $itemName = $item->name.($itemType === 'bottle' ? " ({$item->size}ml)" : ''); if (isset($this->stock_adjustments['outlet'])) { foreach ($this->stock_adjustments['outlet'] as $id => $adj) { $newStock = (int) str_replace(['.', ','], '', (string) ($adj['new_stock'] ?: '0')); $oldStock = (int) $adj['stock']; if ($newStock === $oldStock) { continue; } $outlet = Outlet::find($id); if ($outlet) { $item->outlets()->syncWithoutDetaching([$id => ['stock' => $newStock]]); StockActivityLogService::logOutlet( logName: 'adjustment', event: 'update', description: "Penyesuaian manual untuk {$itemName}: berubah dari ".formatCurrencyNumber($oldStock).' menjadi '.formatCurrencyNumber($newStock).'. Catatan: '.($adj['note'] ?: '-'), performedOn: $item, outlet: $outlet, quantityChange: $newStock - $oldStock, previousStock: $oldStock, newStock: $newStock, extraProperties: [ 'note' => $adj['note'], 'adjustment_type' => 'manual', 'item_type' => $itemType, 'item_id' => $item->id, ] ); } } } } }