diff --git a/app/Services/WorkOrderService.php b/app/Services/WorkOrderService.php index 99d3b65d..afd4493f 100644 --- a/app/Services/WorkOrderService.php +++ b/app/Services/WorkOrderService.php @@ -83,10 +83,15 @@ public function index(array $params) $query->where('status', $status); } - // 공정 필터 (process_id) - // 기본 조건으로 process_id IS NOT NULL이므로 'none'은 무의미 + // 공정 필터 (process_id) — 부모 공정이면 자식 공정도 포함 if ($processId !== null && $processId !== 'none' && $processId !== '0' && $processId !== 0) { - $query->where('process_id', $processId); + $process = \App\Models\Process::find($processId); + if ($process && $process->children()->exists()) { + $processIds = array_merge([$processId], $process->children()->pluck('id')->toArray()); + $query->whereIn('process_id', $processIds); + } else { + $query->where('process_id', $processId); + } } // 공정 코드 필터 (process_code) - 대시보드용 @@ -305,6 +310,24 @@ public function store(array $data) $opts['is_auxiliary'] = true; $data['options'] = $opts; } + + // 부모 공정(자식 있음)으로 요청 시 → 아이템 기반 자식 공정 자동 감지 + if ($process && $process->children()->exists()) { + $itemIds = collect($items)->pluck('item_id')->filter()->values(); + if ($itemIds->isNotEmpty()) { + $childProcessId = \DB::table('process_items') + ->whereIn('item_id', $itemIds) + ->whereIn('process_id', $process->children()->pluck('id')) + ->groupBy('process_id') + ->orderByRaw('COUNT(*) DESC') + ->value('process_id'); + if ($childProcessId) { + $data['process_id'] = $childProcessId; + // 자식 공정 재조회 (is_auxiliary 등 반영) + $process = \App\Models\Process::find($childProcessId); + } + } + } } $workOrder = WorkOrder::create($data);