a0f6e0fa26
- 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>
77 lines
3.9 KiB
SQL
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 검증 끝 =================='
|