PR-B G2: 주문관리 수주입력 = 직접등록 통합폼 (is_direct_order='Y' + order_date + approval_required)

wace 패턴(estimateAndOrderRegistFormPopup + saveEstimateAndOrderInfo) 이식.
운영 데이터 90건 중 74건이 is_direct_order='Y' — 주문 신규 등록의 기본 흐름.

변경:
- 백엔드 OrderBody: order_date / approval_required / is_direct_order 신규 (contract_date 폐지, 운영 컬럼명 일치)
- create()/update() INSERT·UPDATE에 위 3개 컬럼 추가. is_direct_order 기본값 'Y'
- 프론트 OrderBody 타입 동기화. openCreate 시 order_date=today + is_direct_order='Y' 자동
- 폼 다이얼로그 "발주일" 입력을 order_date 바인딩 (잘못 contract_date 바인딩 정정)

자동 검증 (BEGIN/ROLLBACK):
- is_direct_order='Y' INSERT, order_date 저장, ORDER_* 라인 컬럼 정상
- 견적관리 그리드 노출 차단(IS_DIRECT_ORDER!='Y' 필터), 주문관리 그리드 노출 확인

docs/migration/sales/05-direct-order-verify.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
hjjeong
2026-05-11 10:17:04 +09:00
parent 86e3aef6f7
commit 7c03907000
4 changed files with 86 additions and 23 deletions
@@ -0,0 +1,52 @@
# 05. PR-B G2 — 주문관리 직접등록 통합폼 (`is_direct_order='Y'`)
> 작성: 2026-05-11
> 원본: `wace_plm/WebContent/WEB-INF/view/contractMgmt/estimateAndOrderRegistFormPopup.jsp` + `ContractMgmtService.saveEstimateAndOrderInfo` (라인 2664~)
> 대상: `app/(main)/COMPANY_16/sales/order/page.tsx` "수주입력" 다이얼로그 + `POST /api/sales/order-mgmt`
## 1. wace 패턴
견적 없이 주문을 바로 등록하는 통합폼. 핵심 차이:
- `contract_mgmt.is_direct_order = 'Y'` 강제 (견적관리 그리드 노출 X — 견적관리 SQL이 `IS_DIRECT_ORDER != 'Y'` 필터)
- 주문관리 그리드엔 노출
- 헤더에 발주일(`order_date`) / 발주번호(`po_no`) 추가
- 라인에 `ORDER_*` 컬럼 (수주수량/단가/공급가액/부가세/총액) 입력
- 라인의 `quantity = order_quantity` 미러링 (wace 통합폼은 견적수량 별도 입력 X)
## 2. 운영 데이터 검증
```
contract_mgmt 90건 중 is_direct_order='Y' = 74건 (82%)
```
→ 운영 주문은 절대다수가 직접등록 통합폼으로 작성. G2가 주문 신규 등록의 기본 흐름.
## 3. RPS 변경
### 백엔드 [salesOrderMgmtService.ts]
- `OrderBody` 타입: `order_date` / `approval_required` / `is_direct_order` 추가, `contract_date` 폐지 (운영 컬럼은 `order_date`)
- `create()`: INSERT에 `is_direct_order` (default 'Y') / `order_date` / `approval_required` 추가
- `update()`: 동일 컬럼 UPDATE
- `upsertItems`: 기존 `ORDER_*` 처리 그대로 (이미 G2 호환)
### 프론트 [order/page.tsx] + [salesOrderMgmt.ts]
- `OrderBody`: `order_date`/`approval_required`/`is_direct_order` 보강, `contract_date` 폐지
- `openCreate()`: `order_date = today` + `is_direct_order = 'Y'` 기본값
- `openEdit()`: `order_date`/`approval_required`/`is_direct_order` detail에서 복원
- 폼 다이얼로그: "발주일" 입력을 `order_date` 바인딩 (이전 `contract_date` 잘못 바인딩 정정)
## 4. 자동 검증 결과 (BEGIN/ROLLBACK)
| 항목 | 결과 |
|---|---|
| `is_direct_order='Y'` INSERT | ✅ |
| `order_date` 컬럼에 저장 | ✅ (`2026-05-11`) |
| `ORDER_*` 라인 컬럼 (qty/unit_price/total_amount) | ✅ |
| 견적관리 노출 차단 (필터 `is_direct_order != 'Y'`) | ✅ (0 rows) |
| 주문관리 노출 | ✅ (1 row) |
## 5. 결론
기존 RPS `create/update`가 거의 G2 호환이라 신규 endpoint 없이 컬럼 보강(is_direct_order/order_date/approval_required)으로 처리. 분리 endpoint 불필요.
다음 단계: G5 견적작성 PDF 또는 G4 결재 모듈.