feat: [작업지시] 부모 공정 → 자식 공정 자동 감지

- store(): 부모 공정으로 WO 생성 시 아이템의 process_items 매핑으로 자식 공정 자동 설정
- index(): 부모 공정 필터 시 자식 공정 WO도 포함
- 하위 호환: 아이템 매칭 실패 시 원래 process_id 유지
This commit is contained in:
김보곤
2026-03-21 16:23:07 +09:00
parent a071997b42
commit f3bdafc32e

View File

@@ -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);