feat: [공정관리] 공정 복제 API 추가

This commit is contained in:
김보곤
2026-03-21 08:38:47 +09:00
parent da1ea6d3b4
commit e402b03452
3 changed files with 98 additions and 0 deletions

View File

@@ -267,6 +267,92 @@ private function syncProcessItems(Process $process, array $itemIds): void
}
}
/**
* 공정 복제
*/
public function duplicate(int $id)
{
$tenantId = $this->tenantId();
$userId = $this->apiUserId();
$source = Process::where('tenant_id', $tenantId)
->with(['classificationRules', 'processItems', 'steps'])
->find($id);
if (! $source) {
throw new NotFoundHttpException(__('error.not_found'));
}
return DB::transaction(function () use ($source, $tenantId, $userId) {
$newCode = $this->generateProcessCode($tenantId);
$newProcess = Process::create([
'tenant_id' => $tenantId,
'process_code' => $newCode,
'process_name' => $source->process_name.' (복사)',
'description' => $source->description,
'process_type' => $source->process_type,
'department' => $source->department,
'manager' => $source->manager,
'process_category' => $source->process_category,
'use_production_date' => $source->use_production_date,
'work_log_template' => $source->work_log_template,
'document_template_id' => $source->document_template_id,
'work_log_template_id' => $source->work_log_template_id,
'options' => $source->options,
'required_workers' => $source->required_workers,
'equipment_info' => $source->equipment_info,
'work_steps' => $source->work_steps,
'note' => $source->note,
'is_active' => $source->is_active,
'created_by' => $userId,
]);
// 분류 규칙 복제
foreach ($source->classificationRules as $rule) {
ProcessClassificationRule::create([
'process_id' => $newProcess->id,
'registration_type' => $rule->registration_type,
'rule_type' => $rule->rule_type,
'matching_type' => $rule->matching_type,
'condition_value' => $rule->condition_value,
'priority' => $rule->priority,
'description' => $rule->description,
'is_active' => $rule->is_active,
]);
}
// 품목 연결 복제
foreach ($source->processItems as $item) {
ProcessItem::create([
'process_id' => $newProcess->id,
'item_id' => $item->item_id,
'priority' => $item->priority,
'is_active' => $item->is_active,
]);
}
// 공정 단계 복제
foreach ($source->steps as $step) {
$newProcess->steps()->create([
'step_code' => $step->step_code,
'step_name' => $step->step_name,
'is_required' => $step->is_required,
'needs_approval' => $step->needs_approval,
'needs_inspection' => $step->needs_inspection,
'is_active' => $step->is_active,
'sort_order' => $step->sort_order,
'connection_type' => $step->connection_type,
'connection_target' => $step->connection_target,
'completion_type' => $step->completion_type,
'options' => $step->options,
]);
}
return $newProcess->load(['classificationRules', 'processItems.item:id,code,name', 'steps', 'documentTemplate:id,name,category', 'workLogTemplateRelation:id,name,category']);
});
}
/**
* 드롭다운용 공정 옵션 목록
*/