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')