fix: [생산지시] 날짜포맷·개소수·자재투입 시 자동 상태전환
- ProductionOrderService: production_ordered_at를 Y-m-d 포맷으로 변환
- ProductionOrderService: withCount('nodes')로 개소수(node_count) 응답 추가
- WorkOrderService: autoStartWorkOrderOnMaterialInput() 신규 메서드
- 자재투입 시 WO가 unassigned/pending/waiting이면 in_progress로 자동 전환
- syncOrderStatus()로 Order도 IN_PRODUCTION 동기화
- Swagger: node_count 필드 문서화, 날짜 포맷 수정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -850,6 +850,42 @@ private function syncOrderStatus(WorkOrder $workOrder, int $tenantId): void
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 자재 투입 시 작업지시가 대기 상태이면 자동으로 진행중으로 전환
|
||||
*
|
||||
* pending/waiting 상태에서 첫 자재 투입이 발생하면
|
||||
* 작업지시 → in_progress, 수주 → IN_PRODUCTION 으로 자동 전환
|
||||
*/
|
||||
private function autoStartWorkOrderOnMaterialInput(WorkOrder $workOrder, int $tenantId): void
|
||||
{
|
||||
// 아직 진행 전인 상태에서만 자동 전환 (자재투입 = 실질적 작업 시작)
|
||||
if (! in_array($workOrder->status, [
|
||||
WorkOrder::STATUS_UNASSIGNED,
|
||||
WorkOrder::STATUS_PENDING,
|
||||
WorkOrder::STATUS_WAITING,
|
||||
])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$oldStatus = $workOrder->status;
|
||||
$workOrder->status = WorkOrder::STATUS_IN_PROGRESS;
|
||||
$workOrder->updated_by = $this->apiUserId();
|
||||
$workOrder->save();
|
||||
|
||||
// 감사 로그
|
||||
$this->auditLogger->log(
|
||||
$tenantId,
|
||||
self::AUDIT_TARGET,
|
||||
$workOrder->id,
|
||||
'status_auto_changed_on_material_input',
|
||||
['status' => $oldStatus],
|
||||
['status' => WorkOrder::STATUS_IN_PROGRESS]
|
||||
);
|
||||
|
||||
// 연결된 수주(Order) 상태 동기화 (IN_PROGRESS → IN_PRODUCTION)
|
||||
$this->syncOrderStatus($workOrder, $tenantId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 작업지시 품목에 결과 데이터 저장
|
||||
*/
|
||||
@@ -1458,6 +1494,9 @@ public function registerMaterialInput(int $workOrderId, array $inputs): array
|
||||
$totalCount = array_sum(array_column($delegatedResults, 'material_count'));
|
||||
$allResults = array_merge(...array_map(fn ($r) => $r['input_results'], $delegatedResults));
|
||||
|
||||
// 자재 투입 시 작업지시가 대기 상태면 자동으로 진행중으로 전환
|
||||
$this->autoStartWorkOrderOnMaterialInput($workOrder, $tenantId);
|
||||
|
||||
return [
|
||||
'work_order_id' => $workOrderId,
|
||||
'material_count' => $totalCount,
|
||||
@@ -1536,6 +1575,9 @@ public function registerMaterialInput(int $workOrderId, array $inputs): array
|
||||
$allResults = array_merge($allResults, $dr['input_results']);
|
||||
}
|
||||
|
||||
// 자재 투입 시 작업지시가 대기 상태면 자동으로 진행중으로 전환
|
||||
$this->autoStartWorkOrderOnMaterialInput($workOrder, $tenantId);
|
||||
|
||||
return [
|
||||
'work_order_id' => $workOrderId,
|
||||
'material_count' => count($allResults),
|
||||
|
||||
Reference in New Issue
Block a user