feat: [작업지시] 부모 공정 → 자식 공정 자동 감지
- store(): 부모 공정으로 WO 생성 시 아이템의 process_items 매핑으로 자식 공정 자동 설정 - index(): 부모 공정 필터 시 자식 공정 WO도 포함 - 하위 호환: 아이템 매칭 실패 시 원래 process_id 유지
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user