From f3bdafc32eef9bfd1c02e349443571220069da08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sat, 21 Mar 2026 16:23:07 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[=EC=9E=91=EC=97=85=EC=A7=80=EC=8B=9C]?= =?UTF-8?q?=20=EB=B6=80=EB=AA=A8=20=EA=B3=B5=EC=A0=95=20=E2=86=92=20?= =?UTF-8?q?=EC=9E=90=EC=8B=9D=20=EA=B3=B5=EC=A0=95=20=EC=9E=90=EB=8F=99=20?= =?UTF-8?q?=EA=B0=90=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - store(): 부모 공정으로 WO 생성 시 아이템의 process_items 매핑으로 자식 공정 자동 설정 - index(): 부모 공정 필터 시 자식 공정 WO도 포함 - 하위 호환: 아이템 매칭 실패 시 원래 process_id 유지 --- app/Services/WorkOrderService.php | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) 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);