diff --git a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml index f3b8400..4b3d9d6 100644 --- a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml +++ b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/contractMgmt.xml @@ -492,14 +492,14 @@ WHEN PAID_TYPE = 'paid' THEN '유상' WHEN PAID_TYPE = 'free' THEN '무상' ELSE PAID_TYPE - END AS PAID_TYPE - ,RECEIPT_DATE - ,PART_NO - ,PART_NAME - ,SERIAL_NO - ,QUANTITY - ,CUSTOMER_REQUEST - ,EXCHANGE_RATE + END AS PAID_TYPE + ,RECEIPT_DATE + -- ,PART_NO (아래 품목 요약에서 처리) + ,PART_NAME + -- ,SERIAL_NO (아래 서브쿼리에서 처리) + ,QUANTITY + -- ,CUSTOMER_REQUEST (아래 서브쿼리에서 처리) + ,EXCHANGE_RATE ,EST_PRICE ,EST_SUPPLY_PRICE ,(SELECT COUNT(1) FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID) AS EST_STATUS @@ -543,35 +543,103 @@ THEN CAST(T.ORDER_TOTAL_AMOUNT AS NUMERIC) * CAST(T.EXCHANGE_RATE AS NUMERIC) ELSE 0 END AS ORDER_TOTAL_AMOUNT_KRW - -- 품목 정보 요약 - ,( - WITH item_info AS ( - SELECT - COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME, - COUNT(*) OVER() AS total_count, - ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn - FROM CONTRACT_ITEM CI - LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID - WHERE CI.CONTRACT_OBJID = T.OBJID - AND CI.STATUS = 'ACTIVE' - ) + -- 품목 정보 요약 + ,( + WITH item_info AS ( SELECT - CASE - WHEN total_count = 1 THEN PART_NAME - WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건' - ELSE '' - END - FROM item_info - WHERE rn = 1 - ) AS ITEM_SUMMARY - ,( - SELECT MIN(DUE_DATE) - FROM CONTRACT_ITEM - WHERE CONTRACT_OBJID = T.OBJID - AND STATUS = 'ACTIVE' - AND DUE_DATE IS NOT NULL - AND DUE_DATE != '' - ) AS EARLIEST_DUE_DATE + COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME, + COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO, + COUNT(*) OVER() AS total_count, + ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn + FROM CONTRACT_ITEM CI + LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + ) + SELECT + CASE + WHEN total_count = 1 THEN PART_NAME + WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건' + ELSE '' + END + FROM item_info + WHERE rn = 1 + ) AS ITEM_SUMMARY + ,( + WITH item_info AS ( + SELECT + COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO, + COUNT(*) OVER() AS total_count, + ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn + FROM CONTRACT_ITEM CI + LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + ) + SELECT + CASE + WHEN total_count = 1 THEN PART_NO + WHEN total_count > 1 THEN PART_NO || ' 외 ' || (total_count - 1) || '건' + ELSE T.PART_NO + END + FROM item_info + WHERE rn = 1 + ) AS PART_NO + ,( + WITH serial_info AS ( + SELECT + CIS.SERIAL_NO, + COUNT(*) OVER() AS total_count, + ROW_NUMBER() OVER(ORDER BY CI.SEQ, CIS.SEQ) AS rn + FROM CONTRACT_ITEM CI + LEFT JOIN CONTRACT_ITEM_SERIAL CIS + ON CI.OBJID = CIS.ITEM_OBJID + AND CIS.STATUS = 'ACTIVE' + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + AND CIS.SERIAL_NO IS NOT NULL + AND CIS.SERIAL_NO != '' + ) + SELECT + CASE + WHEN total_count = 0 THEN T.SERIAL_NO + WHEN total_count = 1 THEN SERIAL_NO + WHEN total_count > 1 THEN SERIAL_NO || ' 외 ' || (total_count - 1) || '건' + ELSE '' + END + FROM serial_info + WHERE rn = 1 + ) AS SERIAL_NO + ,( + WITH request_info AS ( + SELECT + CI.CUSTOMER_REQUEST, + COUNT(*) OVER() AS total_count, + ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + AND CI.CUSTOMER_REQUEST IS NOT NULL + AND CI.CUSTOMER_REQUEST != '' + ) + SELECT + CASE + WHEN total_count = 0 THEN T.CUSTOMER_REQUEST + WHEN total_count = 1 THEN CUSTOMER_REQUEST + WHEN total_count > 1 THEN CUSTOMER_REQUEST || ' 외 ' || (total_count - 1) || '건' + ELSE '' + END + FROM request_info + WHERE rn = 1 + ) AS CUSTOMER_REQUEST + ,( + SELECT MIN(DUE_DATE) + FROM CONTRACT_ITEM + WHERE CONTRACT_OBJID = T.OBJID + AND STATUS = 'ACTIVE' + AND DUE_DATE IS NOT NULL + AND DUE_DATE != '' + ) AS EARLIEST_DUE_DATE ,( SELECT COUNT(*) - 1 FROM CONTRACT_ITEM @@ -669,19 +737,35 @@ AND result_cd = #{result_cd} - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD') - - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD') - + + AND RECEIPT_DATE IS NOT NULL + AND RECEIPT_DATE != '' + AND ( + CASE + WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD') + WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD') + ELSE NULL + END + ) = ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD') + + + AND RECEIPT_DATE IS NOT NULL + AND RECEIPT_DATE != '' + AND ( + CASE + WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD') + WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD') + ELSE NULL + END + ) TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD') + - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD') - - - AND TO_DATE(DUE_DATE,'YYYY-MM-DD') TO_DATE(#{due_end_date}, 'YYYY-MM-DD') - + + AND TO_DATE(DUE_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD') + + + AND TO_DATE(DUE_DATE,'YYYY-MM-DD') TO_DATE(#{due_end_date}, 'YYYY-MM-DD') + AND pm_user_id = #{pm_user_id} @@ -781,6 +865,29 @@ AND UPPER(PO_NO) LIKE UPPER('%${search_poNo}%') + + AND RECEIPT_DATE IS NOT NULL + AND RECEIPT_DATE != '' + AND ( + CASE + WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD') + WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD') + ELSE NULL + END + ) = ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD') + + + AND RECEIPT_DATE IS NOT NULL + AND RECEIPT_DATE != '' + AND ( + CASE + WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD') + WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD') + ELSE NULL + END + ) TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD') + + AND TO_DATE(ORDER_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{order_start_date}, 'YYYY-MM-DD') diff --git a/src/com/pms/salesmgmt/mapper/contractMgmt.xml b/src/com/pms/salesmgmt/mapper/contractMgmt.xml index f3b8400..4b3d9d6 100644 --- a/src/com/pms/salesmgmt/mapper/contractMgmt.xml +++ b/src/com/pms/salesmgmt/mapper/contractMgmt.xml @@ -492,14 +492,14 @@ WHEN PAID_TYPE = 'paid' THEN '유상' WHEN PAID_TYPE = 'free' THEN '무상' ELSE PAID_TYPE - END AS PAID_TYPE - ,RECEIPT_DATE - ,PART_NO - ,PART_NAME - ,SERIAL_NO - ,QUANTITY - ,CUSTOMER_REQUEST - ,EXCHANGE_RATE + END AS PAID_TYPE + ,RECEIPT_DATE + -- ,PART_NO (아래 품목 요약에서 처리) + ,PART_NAME + -- ,SERIAL_NO (아래 서브쿼리에서 처리) + ,QUANTITY + -- ,CUSTOMER_REQUEST (아래 서브쿼리에서 처리) + ,EXCHANGE_RATE ,EST_PRICE ,EST_SUPPLY_PRICE ,(SELECT COUNT(1) FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID) AS EST_STATUS @@ -543,35 +543,103 @@ THEN CAST(T.ORDER_TOTAL_AMOUNT AS NUMERIC) * CAST(T.EXCHANGE_RATE AS NUMERIC) ELSE 0 END AS ORDER_TOTAL_AMOUNT_KRW - -- 품목 정보 요약 - ,( - WITH item_info AS ( - SELECT - COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME, - COUNT(*) OVER() AS total_count, - ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn - FROM CONTRACT_ITEM CI - LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID - WHERE CI.CONTRACT_OBJID = T.OBJID - AND CI.STATUS = 'ACTIVE' - ) + -- 품목 정보 요약 + ,( + WITH item_info AS ( SELECT - CASE - WHEN total_count = 1 THEN PART_NAME - WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건' - ELSE '' - END - FROM item_info - WHERE rn = 1 - ) AS ITEM_SUMMARY - ,( - SELECT MIN(DUE_DATE) - FROM CONTRACT_ITEM - WHERE CONTRACT_OBJID = T.OBJID - AND STATUS = 'ACTIVE' - AND DUE_DATE IS NOT NULL - AND DUE_DATE != '' - ) AS EARLIEST_DUE_DATE + COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME, + COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO, + COUNT(*) OVER() AS total_count, + ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn + FROM CONTRACT_ITEM CI + LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + ) + SELECT + CASE + WHEN total_count = 1 THEN PART_NAME + WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건' + ELSE '' + END + FROM item_info + WHERE rn = 1 + ) AS ITEM_SUMMARY + ,( + WITH item_info AS ( + SELECT + COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO, + COUNT(*) OVER() AS total_count, + ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn + FROM CONTRACT_ITEM CI + LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + ) + SELECT + CASE + WHEN total_count = 1 THEN PART_NO + WHEN total_count > 1 THEN PART_NO || ' 외 ' || (total_count - 1) || '건' + ELSE T.PART_NO + END + FROM item_info + WHERE rn = 1 + ) AS PART_NO + ,( + WITH serial_info AS ( + SELECT + CIS.SERIAL_NO, + COUNT(*) OVER() AS total_count, + ROW_NUMBER() OVER(ORDER BY CI.SEQ, CIS.SEQ) AS rn + FROM CONTRACT_ITEM CI + LEFT JOIN CONTRACT_ITEM_SERIAL CIS + ON CI.OBJID = CIS.ITEM_OBJID + AND CIS.STATUS = 'ACTIVE' + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + AND CIS.SERIAL_NO IS NOT NULL + AND CIS.SERIAL_NO != '' + ) + SELECT + CASE + WHEN total_count = 0 THEN T.SERIAL_NO + WHEN total_count = 1 THEN SERIAL_NO + WHEN total_count > 1 THEN SERIAL_NO || ' 외 ' || (total_count - 1) || '건' + ELSE '' + END + FROM serial_info + WHERE rn = 1 + ) AS SERIAL_NO + ,( + WITH request_info AS ( + SELECT + CI.CUSTOMER_REQUEST, + COUNT(*) OVER() AS total_count, + ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn + FROM CONTRACT_ITEM CI + WHERE CI.CONTRACT_OBJID = T.OBJID + AND CI.STATUS = 'ACTIVE' + AND CI.CUSTOMER_REQUEST IS NOT NULL + AND CI.CUSTOMER_REQUEST != '' + ) + SELECT + CASE + WHEN total_count = 0 THEN T.CUSTOMER_REQUEST + WHEN total_count = 1 THEN CUSTOMER_REQUEST + WHEN total_count > 1 THEN CUSTOMER_REQUEST || ' 외 ' || (total_count - 1) || '건' + ELSE '' + END + FROM request_info + WHERE rn = 1 + ) AS CUSTOMER_REQUEST + ,( + SELECT MIN(DUE_DATE) + FROM CONTRACT_ITEM + WHERE CONTRACT_OBJID = T.OBJID + AND STATUS = 'ACTIVE' + AND DUE_DATE IS NOT NULL + AND DUE_DATE != '' + ) AS EARLIEST_DUE_DATE ,( SELECT COUNT(*) - 1 FROM CONTRACT_ITEM @@ -669,19 +737,35 @@ AND result_cd = #{result_cd} - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD') - - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD') - + + AND RECEIPT_DATE IS NOT NULL + AND RECEIPT_DATE != '' + AND ( + CASE + WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD') + WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD') + ELSE NULL + END + ) = ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD') + + + AND RECEIPT_DATE IS NOT NULL + AND RECEIPT_DATE != '' + AND ( + CASE + WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD') + WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD') + ELSE NULL + END + ) TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD') + - - AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD') - - - AND TO_DATE(DUE_DATE,'YYYY-MM-DD') TO_DATE(#{due_end_date}, 'YYYY-MM-DD') - + + AND TO_DATE(DUE_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{due_start_date}, 'YYYY-MM-DD') + + + AND TO_DATE(DUE_DATE,'YYYY-MM-DD') TO_DATE(#{due_end_date}, 'YYYY-MM-DD') + AND pm_user_id = #{pm_user_id} @@ -781,6 +865,29 @@ AND UPPER(PO_NO) LIKE UPPER('%${search_poNo}%') + + AND RECEIPT_DATE IS NOT NULL + AND RECEIPT_DATE != '' + AND ( + CASE + WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD') + WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD') + ELSE NULL + END + ) = ]]> TO_DATE(#{receipt_start_date}, 'YYYY-MM-DD') + + + AND RECEIPT_DATE IS NOT NULL + AND RECEIPT_DATE != '' + AND ( + CASE + WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_DATE(RECEIPT_DATE, 'YYYYMMDD') + WHEN RECEIPT_DATE ~ '^\d{4}-\d{2}-\d{2}$' THEN TO_DATE(RECEIPT_DATE, 'YYYY-MM-DD') + ELSE NULL + END + ) TO_DATE(#{receipt_end_date}, 'YYYY-MM-DD') + + AND TO_DATE(ORDER_DATE,'YYYY-MM-DD') = ]]> TO_DATE(#{order_start_date}, 'YYYY-MM-DD')