영업관리 구매요청 2메뉴 액션 완성 + SmartSelect 키보드 네비
- sales_request_part DDL 추출(운영 11133)→RPS(11134) 마이그레이션 - 백엔드 6 엔드포인트: 프로젝트 자동채움/M-BOM 품목/저장/품의서생성/SSO · 품의서 결재상신 Amaranth SSO (target_type=PROPOSAL, formId=1163) - 프론트 다이얼로그 2개 (구매요청서작성 / 품의서생성 확인) · 프로젝트 선택→주문유형·제품구분·국내외·고객사·유무상 자동 채움 · 행추가 시 M-BOM 품번 셀렉트→품명/공급업체/단가 자동 셋팅 - 공용 SmartSelect: ↑↓·Enter·Esc·Home·End·PageUp·Down 키보드 네비 - 그리드 delivery_request_date . → - 형식 정규화 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,8 +10,8 @@
|
||||
|
||||
| 상태 | 메뉴 수 | 의미 |
|
||||
|---|---|---|
|
||||
| ✅ 완료 | 17 | wace 1:1 검증 PASS 또는 마이너 차이만 (기능/SQL 일치) |
|
||||
| 🟡 베이스 | 7 | 그리드/검색 완료, 액션 모달 또는 detail SQL 일부 미진 |
|
||||
| ✅ 완료 | 19 | wace 1:1 검증 PASS 또는 마이너 차이만 (기능/SQL 일치) |
|
||||
| 🟡 베이스 | 5 | 그리드/검색 완료, 액션 모달 또는 detail SQL 일부 미진 |
|
||||
| 🟠 빈 그리드 | 3 | 화면은 있으나 데이터 SQL 미연결 (의존 테이블 DDL 추출 선행 필요) |
|
||||
| 🔴 미진 | 0 | — |
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
| 2 | 영업관리 | 주문서관리 | `sales/order` | ✅ | — |
|
||||
| 3 | 영업관리 | 판매관리 | `sales/sale` | ✅ | — |
|
||||
| 4 | 영업관리 | 매출관리 | `sales/revenue` | ✅ | — |
|
||||
| 5 | 영업/구매요청 | 구매요청서관리 | `purchase-request/request` (이동 중) | 🟡 | 구매요청서작성 다이얼로그 · 품의서생성 액션 |
|
||||
| 6 | 영업/구매요청 | 품의서관리(영업) | `purchase-request/proposal` (이동 중) | 🟡 | Amaranth 결재상신 (`target_type='PROPOSAL'`, `formId='1163'`) |
|
||||
| 5 | 영업/구매요청 | 구매요청서관리 | `purchase-request/request` | ✅ | — |
|
||||
| 6 | 영업/구매요청 | 품의서관리(영업) | `purchase-request/proposal` | ✅ | — |
|
||||
| 7 | 프로젝트관리 | 진행관리 | `project/progress` | ✅ | — |
|
||||
| 8 | 프로젝트관리 | 제품구분_WBS관리 | `project/wbs-template` | ✅ | — |
|
||||
| 9 | 개발관리 | PART 등록 | `development/part-regist` | ✅ | — |
|
||||
@@ -52,7 +52,7 @@
|
||||
| 도메인 | 메뉴 | 마감도 | 대표 커밋 | 상세 문서 |
|
||||
|---|---|---|---|---|
|
||||
| **영업관리** | 4 | 100% (G6 메일 발송까지) | (다수) | [sales/README.md](./sales/README.md) |
|
||||
| **구매요청** (영업↔구매 교차) | 2 | 베이스 (액션 모달 미진) | `7e7c6a0a` | [sales/09-purchase-request.md](./sales/09-purchase-request.md) |
|
||||
| **구매요청** (영업↔구매 교차) | 2 | 100% (작성·품의서생성·결재상신 SSO 완료) | `7e7c6a0a` + 본 작업 | [sales/09-purchase-request.md](./sales/09-purchase-request.md) |
|
||||
| **프로젝트관리** | 2 | 100% | `a1ace226` / `332688a4` / `7c4817b0` / `50669a66` | [project/00-gap.md](./project/00-gap.md) |
|
||||
| **개발관리** | 5 | 100% + Import + 도면 다중 업로드 (16 커밋) | (PR-A/B/C 다수) | [development/00-gap.md](./development/00-gap.md) |
|
||||
| **구매관리** | 9 | 1차 스캐폴드 (마스터 3 데이터 노출 / detail 4 빈 그리드 / 발주·M-BOM 완료) | `b38f5957` | (메모리만) |
|
||||
@@ -109,12 +109,8 @@
|
||||
|
||||
## 6. 다음 작업 우선순위 (제안)
|
||||
|
||||
1. **구매요청 2메뉴 액션 완성** — 영업↔구매 교차 핵심
|
||||
- 구매요청서작성 다이얼로그
|
||||
- 품의서생성 액션
|
||||
- 결재상신 (`target_type='PROPOSAL'`, `formId='1163'`)
|
||||
- 선행: `sales_request_part` 운영DB DDL 추출
|
||||
2. **구매관리 빈 그리드 4개 보강** — `sales_request_part` 추출 후 quote-request / inbound 3종 detail SQL
|
||||
1. ~~**구매요청 2메뉴 액션 완성**~~ — ✅ 2026-05-15 완료 ([sales/09-purchase-request.md §6](./sales/09-purchase-request.md))
|
||||
2. **구매관리 빈 그리드 4개 보강** — `sales_request_part` 추출 완료, quote-request / inbound 3종 detail SQL 연결만 남음
|
||||
3. **plan-result 액션 모달** — `prodPlanFormPopup.jsp` / `prodResultFormPopup.jsp` 1:1
|
||||
4. **공통 PartSelect 컴포넌트** — wace `Select2-part`(AJAX 자동완성), 영업/생산/구매 다수 메뉴 공통
|
||||
5. **품질관리 후속** (chpark 베이스 4메뉴 상세화) / **자재관리 신규 도메인 진입**
|
||||
|
||||
@@ -113,14 +113,50 @@ wace 매퍼 `salesMng.xml:4805~4812` 1:1.
|
||||
### 5.3 sales_request_part 누락 처리
|
||||
wace 원본은 `SALES_REQUEST_PART` (구매요청 라인) 테이블을 사용해 품번/품명 집계. RPS 에는 미존재 → **MBOM_DETAIL → PART_MNG fallback** (구매관리 패턴 동일). 운영DB DDL 추출 후 전환 예정. 메모리 [feedback_missing_tables_workflow](../../../../.claude/projects/-Users-jhj-vexplor-rps/memory/feedback_missing_tables_workflow.md).
|
||||
|
||||
## 6. 백로그 (placeholder 상태)
|
||||
## 6. 액션 구현 (2026-05-15 완료)
|
||||
|
||||
| 우선 | 항목 | 원본 위치 | 권장 작업 |
|
||||
|---|---|---|---|
|
||||
| 🟠 | **구매요청서작성 다이얼로그** | wace `salesRequestFormPopUp.jsp` + `purchaseListFormPopUp.jsp` | M-BOM 선택 → sales_request_master INSERT (DOC_TYPE='PURCHASE_REG') + 라인 입력 (sales_request_part 신설 후) |
|
||||
| 🟠 | **품의서생성** | wace `salesMng/createProposalFromPurchaseReg.do` + `getProposalTargetPartsFromPurchaseReg.do` | 선택된 구매요청서 → 단가+공급업체 입력된 품목만 필터 → 새 sales_request_master INSERT (DOC_TYPE='PURCHASE_REG_PROPOSAL', PROJECT_NO=원본 OBJID, STATUS='create') |
|
||||
| 🟠 | **결재상신 (Amaranth SSO)** | wace `purchaseRegProposalMngList.jsp:75~99` + `getAmaranthSsoUrl` | target_type=`PROPOSAL`, formId=`1163`, compSeq=`1000`. 기존 견적/수주 결재상신 패턴(G11/G11E) 재사용. `AMARANTH_OUT_PROCESS_CODE_PROPOSAL` 환경변수 신설 |
|
||||
| 🟡 | sales_request_part 신설 | 운영DB 211.115.91.141:11133 | DDL 추출 → `db/migrations/NNN_create_sales_request_part.sql` |
|
||||
| 항목 | 상태 | 구현 위치 |
|
||||
|---|---|---|
|
||||
| sales_request_part 신설 | ✅ | `docs/migration/sales/ddl-extracted/106_create_sales_request_part.sql` (운영 DDL 1:1, RPS 적용 완료) |
|
||||
| 구매요청서작성 다이얼로그 | ✅ | `components/sales/PurchaseRequestFormDialog.tsx` + 백엔드 `POST /api/sales/purchase-request` (savePurchaseRequest) |
|
||||
| 품의서생성 액션 | ✅ | `components/sales/ProposalCreateDialog.tsx` + 백엔드 `POST /api/sales/purchase-request/:objid/proposal` (createProposalFromPurchaseReg) |
|
||||
| 결재상신 (Amaranth SSO) | ✅ | 백엔드 `POST /api/sales/purchase-proposal/:objid/approval` (startProposalApproval) — target_type='PROPOSAL', formId=`AMARANTH_FORM_ID_PROPOSAL` 기본 `'1163'` |
|
||||
|
||||
### 6.1 신규 백엔드 엔드포인트
|
||||
|
||||
| Method | Path | 용도 |
|
||||
|---|---|---|
|
||||
| GET | `/api/sales/purchase-request/mbom-parts?project_objid=…` | 프로젝트별 M-BOM 품목 (다이얼로그 자동 채움) |
|
||||
| GET | `/api/sales/purchase-request/:objid` | 헤더 + 라인 단건 |
|
||||
| GET | `/api/sales/purchase-request/:objid/proposal-targets` | 품의서 대상 품목 + 제외 품목 |
|
||||
| POST | `/api/sales/purchase-request` | 신규/수정 UPSERT (라인 재생성) |
|
||||
| POST | `/api/sales/purchase-request/:objid/proposal` | 품의서 생성 (PURCHASE_REG → PURCHASE_REG_PROPOSAL) |
|
||||
| POST | `/api/sales/purchase-proposal/:objid/approval` | Amaranth SSO 결재상신 (TARGET_TYPE='PROPOSAL') |
|
||||
|
||||
### 6.2 환경변수 (신규)
|
||||
|
||||
| 키 | 기본값 | 비고 |
|
||||
|---|---|---|
|
||||
| `AMARANTH_FORM_ID_PROPOSAL` | `1163` | 품의서 결재 폼 ID |
|
||||
| `AMARANTH_OUT_PROCESS_CODE_PROPOSAL` | — | 미설정 시 공통 `AMARANTH_OUT_PROCESS_CODE` fallback |
|
||||
| `AMARANTH_COMP_SEQ` | `1000` | 영업 메뉴 전체 공통 |
|
||||
|
||||
### 6.3 데이터 흐름 (확정)
|
||||
|
||||
```
|
||||
[구매요청서관리] [영업>품의서관리] [구매>품의서관리]
|
||||
DOC_TYPE='PURCHASE_REG' DOC_TYPE='PURCHASE_REG_PROPOSAL' 결재완료 시 자동 노출
|
||||
SRM + SRP (라인) SRM(PROJECT_NO=원본 OBJID) + SRP(PROPOSAL_DATE=NOW)
|
||||
+
|
||||
[품의서생성] 액션 [발주서생성]
|
||||
(단가+공급업체 입력 라인만) (기존 구현)
|
||||
|
||||
[결재상신] Amaranth SSO
|
||||
TARGET_TYPE='PROPOSAL', formId=1163
|
||||
```
|
||||
|
||||
부모-자식 연결: 품의서 SRM 의 `PROJECT_NO` 컬럼이 원본 구매요청서 SRM 의 `OBJID`(varchar)를 담음.
|
||||
원본 SRP 행의 `PROPOSAL_DATE` 가 채워지면 재생성 대상에서 제외.
|
||||
|
||||
## 7. 1차 스캐폴드 커밋
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
-- ====================================================================
|
||||
-- sales_request_part — 구매요청서/품의서 라인
|
||||
-- ====================================================================
|
||||
-- 출처: wace_plm 운영 DB 211.115.91.141:11133/waceplm (PG 16.8)
|
||||
-- 추출일: 2026-05-15
|
||||
-- 부모: sales_request_master (doc_type 으로 갈래 분기)
|
||||
-- PURCHASE_REG → 구매요청서 라인 (단가/공급업체 입력 후 품의서 생성 대상)
|
||||
-- PURCHASE_REG_PROPOSAL → 품의서 라인 (PROPOSAL_DATE 가 채워진 사본)
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sales_request_part (
|
||||
objid VARCHAR NOT NULL,
|
||||
sales_bom_qty_objid VARCHAR,
|
||||
part_objid VARCHAR,
|
||||
sales_request_master_objid VARCHAR,
|
||||
qty VARCHAR,
|
||||
partner_objid VARCHAR,
|
||||
partner_price VARCHAR,
|
||||
delivery_request_date VARCHAR,
|
||||
writer VARCHAR,
|
||||
regdate TIMESTAMP,
|
||||
status VARCHAR,
|
||||
remark VARCHAR,
|
||||
order_qty VARCHAR,
|
||||
org_qty VARCHAR,
|
||||
spec VARCHAR,
|
||||
part_name VARCHAR,
|
||||
use_yn VARCHAR(1) DEFAULT 'Y',
|
||||
net_qty NUMERIC DEFAULT 0,
|
||||
po_qty NUMERIC DEFAULT 0,
|
||||
unit_price NUMERIC DEFAULT 0,
|
||||
total_price NUMERIC DEFAULT 0,
|
||||
proposal_date DATE,
|
||||
vendor_pm VARCHAR(50),
|
||||
unit VARCHAR(50),
|
||||
processing_vendor VARCHAR(50),
|
||||
processing_proposal_date DATE,
|
||||
production_qty NUMERIC(15,4),
|
||||
material_yn VARCHAR(1) DEFAULT 'N',
|
||||
currency VARCHAR(50),
|
||||
CONSTRAINT sales_request_part_pkey PRIMARY KEY (objid)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_srp_master ON sales_request_part (sales_request_master_objid);
|
||||
CREATE INDEX IF NOT EXISTS idx_srp_part ON sales_request_part (part_objid);
|
||||
Reference in New Issue
Block a user