Files
hjjeong a0f6e0fa26 판매관리 그리드 V1 컬럼 8개 보강 + cu01_cnt 실데이터 + wace 1:1 검증 문서·자동 검증 SQL
- getList SQL: attach_file_info LATERAL JOIN으로 cu01_cnt(주문서첨부) 실데이터 (contract_mgmt.objid 기반, doc_type IN FTC_ORDER/ORDER)
- SaleListRow 타입: product_type_name/nation_name/receipt_date/customer_request/manager_name/payment_type_name/cu01_cnt 보강
- GRID_COLUMNS 8개 추가: 제품구분/국내해외/접수일/고객사요청사항/주문서첨부/출하방법/담당자/인도조건 (wace 36/36 일치)
- docs/migration/sales/03-sale-verify.md: wace ↔ RPS 매핑 / 갭 처리
- scripts/verify-sale.sql: BEGIN/ROLLBACK 2개 시나리오 (그리드 V1 / 판매상태 wace 로직)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 09:38:57 +09:00

77 lines
3.9 KiB
SQL

-- ============================================================
-- 판매관리 자동 검증 SQL (BEGIN/ROLLBACK 시나리오)
-- 메인 테이블: project_mgmt + sales_registration + contract_mgmt
-- ============================================================
\echo ''
\echo '================== Sale 검증 시작 =================='
-- ─────────────────────────────────────────────────────────
-- [0] 사전 카운트
-- ─────────────────────────────────────────────────────────
\echo ''
\echo '[0] 사전 카운트 ============================'
SELECT 'project_mgmt' AS tbl, COUNT(*) FROM project_mgmt
UNION ALL SELECT 'sales_registration', COUNT(*) FROM sales_registration
UNION ALL SELECT 'project_mgmt matched by SR.project_no LIKE',
COUNT(DISTINCT T.project_no)
FROM project_mgmt T JOIN sales_registration SR ON SR.project_no LIKE T.project_no || '%';
-- ─────────────────────────────────────────────────────────
-- [1] 그리드 V1 신규 8개 컬럼 정합성 검증
-- ─────────────────────────────────────────────────────────
\echo ''
\echo '[1] 그리드 V1 신규 컬럼 (제품구분/국내해외/접수일/고객사요청사항/주문서첨부/출하방법/담당자/인도조건) =========================='
SELECT
T.project_no,
CC_PRD.code_name AS product_type_name,
CC_AREA.code_name AS nation_name,
CM.receipt_date,
COALESCE(NULLIF(CM.customer_request, ''), '-') AS customer_request,
COALESCE(AF.cu01_cnt, 0) AS cu01_cnt,
SR.shipping_method,
U_MGR.user_name AS manager_name,
SR.incoterms
FROM project_mgmt T
LEFT JOIN contract_mgmt CM ON CM.objid = T.contract_objid
LEFT JOIN sales_registration SR ON SR.project_no = T.project_no
LEFT JOIN user_info U_MGR ON U_MGR.user_id = SR.manager_user_id
LEFT JOIN comm_code CC_AREA ON CC_AREA.code_id = T.area_cd AND CC_AREA.status='active'
LEFT JOIN comm_code CC_PRD ON CC_PRD.code_id = T.product AND CC_PRD.status='active'
LEFT JOIN (
SELECT target_objid,
COUNT(*) FILTER (WHERE doc_type IN ('FTC_ORDER','ORDER')) AS cu01_cnt
FROM attach_file_info WHERE UPPER(status)='ACTIVE'
GROUP BY target_objid
) AF ON AF.target_objid = T.contract_objid
ORDER BY T.regdate DESC NULLS LAST, T.project_no DESC
LIMIT 10;
-- ─────────────────────────────────────────────────────────
-- [2] 판매상태 wace 로직 검증 (미판매/완판/분할판매)
-- ─────────────────────────────────────────────────────────
\echo ''
\echo '[2] 판매상태 wace 로직 (미판매/완판/분할판매) =========================='
SELECT
T.project_no,
T.quantity AS order_qty,
COALESCE(SR_AGG.sales_qty_sum, 0) AS sales_qty_sum,
CASE
WHEN COALESCE(SR_AGG.sales_qty_sum, 0) = 0 THEN '미판매'
WHEN COALESCE(SR_AGG.sales_qty_sum, 0) >= COALESCE(CAST(NULLIF(REPLACE(T.quantity, ',', ''), '') AS NUMERIC), 0) THEN '완판'
WHEN COALESCE(SR_AGG.sales_qty_sum, 0) > 0 THEN '분할판매'
ELSE ''
END AS sales_status
FROM project_mgmt T
LEFT JOIN (
SELECT SR2.project_no, SUM(SR2.sales_quantity) AS sales_qty_sum
FROM sales_registration SR2
GROUP BY SR2.project_no
) SR_AGG ON SR_AGG.project_no LIKE T.project_no || '%'
ORDER BY T.regdate DESC NULLS LAST
LIMIT 10;
\echo ''
\echo '================== Sale 검증 끝 =================='