From 31fab34e97e207f1e9f89a2e01ba58c095e25369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sun, 22 Mar 2026 11:34:26 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[status]=20=EC=9E=AC=EA=B3=B5=ED=92=88?= =?UTF-8?q?=20=EA=B2=80=EC=82=AC=EC=99=84=EB=A3=8C=20=EC=8B=9C=20WO+?= =?UTF-8?q?=EC=88=98=EC=A3=BC=20=EC=9E=90=EB=8F=99=20=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20(=EB=8B=A8=EC=9D=BC=EB=B6=80=ED=92=88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/WorkOrderService.php | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/app/Services/WorkOrderService.php b/app/Services/WorkOrderService.php index fc295c01..98b19908 100644 --- a/app/Services/WorkOrderService.php +++ b/app/Services/WorkOrderService.php @@ -2480,7 +2480,6 @@ public function storeItemInspection(int $workOrderId, int $itemId, array $data): ); // 검사 완료 시 WO 상태 자동 전이 - // 1. waiting/pending → in_progress (아직 진행중 아니면) $workOrder->refresh(); if (in_array($workOrder->status, [WorkOrder::STATUS_PENDING, WorkOrder::STATUS_WAITING])) { $workOrder->status = WorkOrder::STATUS_IN_PROGRESS; @@ -2490,12 +2489,35 @@ public function storeItemInspection(int $workOrderId, int $itemId, array $data): $this->syncOrderStatus($workOrder, $tenantId); } - // 2. 모든 공정 단계 완료 확인 → WO 자동 완료 - $this->autoCompleteWorkOrderIfAllStepsDone($workOrder, $tenantId, $userId); + // 재공품(STOCK): 검사 완료 = 전체 완료 (단일 부품이므로) + $order = $workOrder->sales_order_id + ? Order::withoutGlobalScopes()->find($workOrder->sales_order_id) + : null; + $isStock = $order && $order->order_type_code === 'STOCK'; + + if ($isStock) { + // 미완료 단계 일괄 완료 + WorkOrderStepProgress::where('work_order_id', $workOrder->id) + ->where('status', '!=', 'completed') + ->update([ + 'status' => 'completed', + 'completed_at' => now(), + 'completed_by' => $userId, + ]); + + // WO → completed + if ($workOrder->status !== WorkOrder::STATUS_COMPLETED) { + $this->updateStatus($workOrder->id, WorkOrder::STATUS_COMPLETED); + } + } else { + // 일반 수주: 모든 공정 단계 완료 확인 → WO 자동 완료 + $this->autoCompleteWorkOrderIfAllStepsDone($workOrder, $tenantId, $userId); + } return [ 'item_id' => $item->id, 'inspection_data' => $item->getInspectionData(), + 'work_order_completed' => $isStock && $workOrder->fresh()->status === WorkOrder::STATUS_COMPLETED, ]; }