feat(inventory): 重構庫存盤點流程與優化操作日誌
1. 重構盤點流程:實作自動狀態轉換(盤點中/盤點完成)、整合按鈕為「儲存盤點結果」、更名 UI 狀態標籤。 2. 優化操作日誌: - 實作全域 ID 轉名稱邏輯(倉庫、使用者)。 - 合併單次操作的日誌記錄,避免重複產生。 - 修復日誌產生過程中的 Collection 修改錯誤。 3. 修正 TypeScript lint 錯誤(Index, Show 頁面)。
This commit is contained in:
@@ -84,7 +84,7 @@ class CountDocController extends Controller
|
||||
);
|
||||
|
||||
// 自動執行快照
|
||||
$this->countService->snapshot($doc);
|
||||
$this->countService->snapshot($doc, false);
|
||||
|
||||
return redirect()->route('inventory.count.show', [$doc->id])
|
||||
->with('success', '已建立盤點單並完成庫存快照');
|
||||
@@ -173,14 +173,37 @@ class CountDocController extends Controller
|
||||
$this->countService->updateCount($doc, $validated['items']);
|
||||
}
|
||||
|
||||
// 如果是按了 "完成盤點"
|
||||
if ($request->input('action') === 'complete') {
|
||||
$this->countService->complete($doc, auth()->id());
|
||||
// 重新讀取以獲取最新狀態
|
||||
$doc->refresh();
|
||||
|
||||
if ($doc->status === 'completed') {
|
||||
return redirect()->route('inventory.count.index')
|
||||
->with('success', '盤點單已完成');
|
||||
->with('success', '盤點完成,單據已自動存檔並完成。');
|
||||
}
|
||||
|
||||
return redirect()->back()->with('success', '暫存成功');
|
||||
return redirect()->back()->with('success', '盤點資料已暫存');
|
||||
}
|
||||
|
||||
public function reopen(InventoryCountDoc $doc)
|
||||
{
|
||||
// 權限檢查 (通常僅允許有權限者執行,例如 inventory.adjust)
|
||||
// 注意:前端已經用 <Can> 保護按鈕,後端這裡最好也加上檢查
|
||||
if (!auth()->user()->can('inventory.adjust')) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
if ($doc->status !== 'completed') {
|
||||
return redirect()->back()->with('error', '僅能針對已完成的盤點單重新開啟盤點');
|
||||
}
|
||||
|
||||
// 執行取消核准邏輯
|
||||
$doc->update([
|
||||
'status' => 'counting', // 回復為盤點中
|
||||
'completed_at' => null, // 清除完成時間
|
||||
'completed_by' => null, // 清除完成者
|
||||
]);
|
||||
|
||||
return redirect()->back()->with('success', '已重新開啟盤點,單據回復為盤點中狀態');
|
||||
}
|
||||
|
||||
public function destroy(InventoryCountDoc $doc)
|
||||
@@ -189,18 +212,7 @@ class CountDocController extends Controller
|
||||
return redirect()->back()->with('error', '已完成的盤點單無法刪除');
|
||||
}
|
||||
|
||||
// 記錄活動
|
||||
activity()
|
||||
->performedOn($doc)
|
||||
->causedBy(auth()->user())
|
||||
->event('deleted')
|
||||
->withProperties([
|
||||
'snapshot' => [
|
||||
'doc_no' => $doc->doc_no,
|
||||
'warehouse_name' => $doc->warehouse?->name,
|
||||
]
|
||||
])
|
||||
->log('deleted');
|
||||
// Activity Log handled by Model Trait
|
||||
|
||||
$doc->items()->delete();
|
||||
$doc->delete();
|
||||
|
||||
Reference in New Issue
Block a user