# 수주 관리 Phase 3 - 고급 기능 **날짜:** 2025-01-08 **Phase:** Phase 3 - 고급 기능 **관련 Plan:** docs/plans/order-management-plan.md ## 변경 개요 수주 관리 시스템에 견적→수주 변환 및 생산지시 생성 기능 추가. ## API 추가 사항 ### 1. 견적에서 수주 생성 - **Endpoint**: `POST /api/v1/orders/from-quote/{quoteId}` - **기능**: 기존 견적서를 기반으로 수주를 자동 생성 - **검증**: 이미 수주가 생성된 견적은 중복 생성 방지 ### 2. 생산지시 생성 - **Endpoint**: `POST /api/v1/orders/{id}/production-order` - **기능**: 확정된 수주에서 작업지시(WorkOrder) 생성 - **검증**: CONFIRMED 상태의 수주만 생산지시 가능 ## 수정된 파일 ### API (Laravel) #### 1. `app/Services/OrderService.php` - `createFromQuote(int $quoteId, array $data)`: 견적→수주 변환 로직 - `createProductionOrder(int $orderId, array $data)`: 생산지시 생성 로직 - `generateWorkOrderNo(int $tenantId)`: 작업지시번호 자동 생성 #### 2. `app/Http/Controllers/Api/V1/OrderController.php` - `createFromQuote()`: 견적→수주 액션 - `createProductionOrder()`: 생산지시 생성 액션 #### 3. `app/Http/Requests/Order/CreateFromQuoteRequest.php` (신규) - 견적→수주 변환 요청 검증 - 선택 필드: delivery_date, memo #### 4. `app/Http/Requests/Order/CreateProductionOrderRequest.php` (신규) - 생산지시 생성 요청 검증 - 선택 필드: process_type, assignee_id, team_id, scheduled_date, memo #### 5. `routes/api.php` - `POST /orders/from-quote/{quoteId}`: 견적→수주 라우트 - `POST /orders/{id}/production-order`: 생산지시 라우트 #### 6. `lang/ko/message.php` - `order.created_from_quote`: 견적에서 수주가 생성되었습니다. - `order.production_order_created`: 생산지시가 생성되었습니다. #### 7. `lang/ko/error.php` - `order.already_created_from_quote`: 이미 해당 견적에서 수주가 생성되었습니다. - `order.must_be_confirmed_for_production`: 확정 상태의 수주만 생산지시를 생성할 수 있습니다. - `order.production_order_already_exists`: 이미 생산지시가 존재합니다. - `quote.not_found`: 견적을 찾을 수 없습니다. ### Frontend (React) #### 1. `src/components/orders/actions.ts` - 타입 추가: `CreateFromQuoteData`, `CreateProductionOrderData`, `WorkOrder`, `ProductionOrderResult` - API 인터페이스 추가: `ApiWorkOrder`, `ApiProductionOrderResponse` - `createOrderFromQuote(quoteId, data)`: 견적→수주 API 호출 - `createProductionOrder(orderId, data)`: 생산지시 생성 API 호출 - `transformWorkOrderApiToFrontend()`: WorkOrder 데이터 변환 ## 비즈니스 로직 ### 견적→수주 변환 흐름 ``` Quote (견적) ↓ createFromQuote() Order (수주) - DRAFT 상태 - quote_id 연결 - client, site_name 복사 - items 변환 (quantity=calculated_quantity) - 금액 재계산 ``` ### 생산지시 생성 흐름 ``` Order (수주) - CONFIRMED 상태 ↓ createProductionOrder() WorkOrder (작업지시) - PENDING 상태 - sales_order_id 연결 - project_name = site_name - process_type 설정 ↓ Order 상태 → IN_PROGRESS ``` ### 상태 전환 규칙 (기존) ``` DRAFT → CONFIRMED → IN_PROGRESS → COMPLETED ↓ ↓ ↓ CANCELLED (어느 단계에서든 취소 가능) ``` ## 테스트 체크리스트 - [ ] 견적→수주 생성 (정상 케이스) - [ ] 견적→수주 생성 (중복 방지) - [ ] 견적→수주 생성 (존재하지 않는 견적) - [ ] 생산지시 생성 (정상 케이스) - [ ] 생산지시 생성 (CONFIRMED 아닌 수주) - [ ] 생산지시 생성 (중복 방지) - [ ] 수주 상태 자동 변경 (CONFIRMED → IN_PROGRESS) ## 연관 작업 - Phase 1: Order API 백엔드 구현 (커밋: de19ac9) - Phase 2: Frontend API 연동 (커밋: 572ffe8) - Phase 3: 고급 기능 (현재)