get(); // 準備可選商品列表 $availableProducts = $allProducts->map(function ($product) { return [ 'id' => (string) $product->id, 'name' => $product->name, 'type' => $product->category ? $product->category->name : '其他', 'unit' => $product->baseUnit?->name ?? '個', ]; }); // 準備現有庫存列表 (用於庫存量對比) $inventories = Inventory::where('warehouse_id', $warehouse->id) ->select('product_id', DB::raw('SUM(quantity) as total_quantity')) ->groupBy('product_id') ->get() ->map(function ($inv) { return [ 'productId' => (string) $inv->product_id, 'quantity' => (float) $inv->total_quantity, ]; }); // 準備安全庫存設定列表 (從新表格讀取) $safetyStockSettings = WarehouseProductSafetyStock::where('warehouse_id', $warehouse->id) ->with(['product.category', 'product.baseUnit']) ->get() ->map(function ($setting) { return [ 'id' => (string) $setting->id, 'warehouseId' => (string) $setting->warehouse_id, 'productId' => (string) $setting->product_id, 'productName' => $setting->product->name, 'productType' => $setting->product->category ? $setting->product->category->name : '其他', 'safetyStock' => (float) $setting->safety_stock, 'unit' => $setting->product->baseUnit?->name ?? '個', 'updatedAt' => $setting->updated_at->toIso8601String(), ]; }); return Inertia::render('Warehouse/SafetyStockSettings', [ 'warehouse' => $warehouse, 'safetyStockSettings' => $safetyStockSettings, 'inventories' => $inventories, 'availableProducts' => $availableProducts, ]); } /** * 批量儲存安全庫存設定 */ public function store(Request $request, Warehouse $warehouse) { $validated = $request->validate([ 'settings' => 'required|array|min:1', 'settings.*.productId' => 'required|exists:products,id', 'settings.*.quantity' => 'required|numeric|min:0', ]); DB::transaction(function () use ($validated, $warehouse) { foreach ($validated['settings'] as $item) { WarehouseProductSafetyStock::updateOrCreate( [ 'warehouse_id' => $warehouse->id, 'product_id' => $item['productId'], ], [ 'safety_stock' => $item['quantity'], ] ); } }); return redirect()->back()->with('success', '安全庫存設定已更新'); } /** * 更新單筆安全庫存設定 */ public function update(Request $request, Warehouse $warehouse, WarehouseProductSafetyStock $safetyStock) { $validated = $request->validate([ 'safetyStock' => 'required|numeric|min:0', ]); $safetyStock->update([ 'safety_stock' => $validated['safetyStock'], ]); return redirect()->back()->with('success', '安全庫存已更新'); } /** * 刪除安全庫存設定 */ public function destroy(Warehouse $warehouse, WarehouseProductSafetyStock $safetyStock) { $safetyStock->delete(); return redirect()->back()->with('success', '安全庫存設定已移除'); } }