feat(inventory): 優化盤點顯示與權限設定
This commit is contained in:
@@ -137,7 +137,7 @@ class CountDocController extends Controller
|
||||
if ($request->input('action') === 'complete') {
|
||||
$this->countService->complete($doc, auth()->id());
|
||||
return redirect()->route('inventory.count.index')
|
||||
->with('success', '盤點已完成並過帳');
|
||||
->with('success', '盤點單已完成');
|
||||
}
|
||||
|
||||
return redirect()->back()->with('success', '暫存成功');
|
||||
|
||||
@@ -75,55 +75,8 @@ class CountService
|
||||
public function complete(InventoryCountDoc $doc, int $userId): void
|
||||
{
|
||||
DB::transaction(function () use ($doc, $userId) {
|
||||
foreach ($doc->items as $item) {
|
||||
// 如果沒有輸入實盤數量,預設跳過或是視為 0?
|
||||
// 安全起見:如果 counted_qty 是 null,表示沒盤到,跳過不處理 (或者依業務邏輯視為0)
|
||||
// 這裡假設前端會確保有送出資料,若 null 則不做異動
|
||||
if (is_null($item->counted_qty)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$diff = $item->counted_qty - $item->system_qty;
|
||||
|
||||
// 如果無差異,更新 item 狀態即可 (diff_qty 已經是 computed field 或在儲存時計算)
|
||||
// 這裡 update 一下 diff_qty 以防萬一
|
||||
$item->update(['diff_qty' => $diff]);
|
||||
|
||||
if (abs($diff) > 0.0001) {
|
||||
// 找回原本的 Inventory
|
||||
$inventory = Inventory::where('warehouse_id', $doc->warehouse_id)
|
||||
->where('product_id', $item->product_id)
|
||||
->where('batch_number', $item->batch_number)
|
||||
->first();
|
||||
|
||||
if (!$inventory) {
|
||||
// 如果原本沒庫存紀錄 (例如是新增的盤點項目),需要新建 Inventory
|
||||
// 但目前 snapshot 邏輯只抓現有。若允許 "盤盈" (發現不在帳上的),需要額外邏輯
|
||||
// 暫時略過 "新增 Inventory" 的複雜邏輯,假設只能針對 existing batch 調整
|
||||
continue;
|
||||
}
|
||||
|
||||
$oldQty = $inventory->quantity;
|
||||
$newQty = $oldQty + $diff;
|
||||
|
||||
$inventory->quantity = $newQty;
|
||||
$inventory->total_value = $inventory->unit_cost * $newQty;
|
||||
$inventory->save();
|
||||
|
||||
// 寫入 Transaction
|
||||
$inventory->transactions()->create([
|
||||
'type' => '盤點調整',
|
||||
'quantity' => $diff,
|
||||
'unit_cost' => $inventory->unit_cost,
|
||||
'balance_before' => $oldQty,
|
||||
'balance_after' => $newQty,
|
||||
'reason' => "盤點單 {$doc->doc_no} 過帳",
|
||||
'actual_time' => now(),
|
||||
'user_id' => $userId,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// 僅更新單據狀態為「已完成」,不執行庫存入庫/調整
|
||||
// 盤點單僅作為記錄,後續調整由盤調單 (AdjustDoc) 執行
|
||||
$doc->update([
|
||||
'status' => 'completed',
|
||||
'completed_at' => now(),
|
||||
|
||||
Reference in New Issue
Block a user