diff --git a/app/Services/WorkOrderService.php b/app/Services/WorkOrderService.php index 551eee97..fc295c01 100644 --- a/app/Services/WorkOrderService.php +++ b/app/Services/WorkOrderService.php @@ -2479,6 +2479,20 @@ public function storeItemInspection(int $workOrderId, int $itemId, array $data): ['item_id' => $itemId, 'inspection_data' => $inspectionData] ); + // 검사 완료 시 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; + $workOrder->started_at = $workOrder->started_at ?? now(); + $workOrder->updated_by = $userId; + $workOrder->save(); + $this->syncOrderStatus($workOrder, $tenantId); + } + + // 2. 모든 공정 단계 완료 확인 → WO 자동 완료 + $this->autoCompleteWorkOrderIfAllStepsDone($workOrder, $tenantId, $userId); + return [ 'item_id' => $item->id, 'inspection_data' => $item->getInspectionData(), @@ -4256,6 +4270,18 @@ public function registerMaterialInputForItem(int $workOrderId, int $itemId, arra ] ); + // 자재 투입 시 WO 상태 자동 전이: waiting/pending → in_progress + $workOrder->refresh(); + if (in_array($workOrder->status, [WorkOrder::STATUS_PENDING, WorkOrder::STATUS_WAITING])) { + $workOrder->status = WorkOrder::STATUS_IN_PROGRESS; + $workOrder->started_at = $workOrder->started_at ?? now(); + $workOrder->updated_by = $userId; + $workOrder->save(); + + // 수주 상태 동기화 (IN_PRODUCTION) + $this->syncOrderStatus($workOrder, $tenantId); + } + return [ 'work_order_id' => $workOrderId, 'work_order_item_id' => $itemId,