Files
wace_plm/WebContent/WEB-INF/classes/com/pms/mapper/supplyChainMgmt.xml
chpark da06c4684c Initial commit: WACE PLM with database initialization features
- Add Docker Compose configurations for dev, prod, and standalone environments
- Add database initialization scripts (init-db.sh, init-db-docker.sh)
- Add enhanced start-docker-linux.sh with DB init support
- Add comprehensive database initialization guide
- Support for automatic dbexport.pgsql import on first run
- Include safety checks for production environment
2025-08-29 15:46:08 +09:00

1410 lines
52 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="supplyChainMgmt">
<!-- 와주협업관리 -> 발주관리 -->
<select id="purchaseOrderMgmtGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT POM.OBJID
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE POM.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
,CM.CUSTOMER_PROJECT_NAME
,CM.PROJECT_NO
,POM.PURCHASE_ORDER_NO
,(CASE WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN 'ㅡ'
WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN ' '
ELSE '' END)||POM.TITLE TITLE
,POM.DELIVERY_PLACE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.DELIVERY_PLACE) AS DELIVERY_PLACE_NAME
,POM.INSPECT_METHOD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.INSPECT_METHOD) AS INSPECT_METHOD_NAME
,POM.PAYMENT_TERMS
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PAYMENT_TERMS) AS PAYMENT_TERMS_NAME
,POM.DELIVERY_DATE
,POM.TYPE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.PARTNER_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,POM.DISCOUNT_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.NEGO_RATE
,POM.ORDER_TYPE_CD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME
,POM.UNIT_CODE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.MULTI_YN
,POM.MULTI_MASTER_YN
,POM.MULTI_MASTER_OBJID
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
,(SELECT COUNT(1) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS PART_CNT
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS ORDER_CNT
,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS REAL_ORDER_CNT
,CASE WHEN RECEPTION_STATUS IS NULL
THEN '미접수'
ELSE '접수'
END AS STATUS_NAME
,RECEPTION_STATUS
,(SELECT COUNT(1) FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID) AS ARRIVAL_CNT
,(SELECT
SUM(CASE WHEN RECEIPT_QTY IS NULL
THEN 0
ELSE RECEIPT_QTY::NUMERIC
END) FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID) AS RECEIPT_QTY
,(SELECT
SUM(CASE WHEN ERROR_QTY IS NULL
THEN 0
ELSE ERROR_QTY::NUMERIC
END) FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID) AS ERROR_QTY
,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) - (SELECT
SUM(CASE WHEN RECEIPT_QTY IS NULL
THEN 0
ELSE RECEIPT_QTY::NUMERIC
END) FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID) <!-- - (SELECT
SUM(CASE WHEN ERROR_QTY IS NULL
THEN 0
ELSE ERROR_QTY::NUMERIC
END) FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID) --> AS NON_DELIVERY_QTY
,SALES_STATUS
,IM.ISSUANCE_DATE
FROM PURCHASE_ORDER_MASTER AS POM
LEFT OUTER JOIN PROJECT_MGMT AS CM
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
LEFT OUTER JOIN (
SELECT
PARENT_OBJID
,TO_CHAR(MAX(REGDATE),'YYYY-MM-DD') AS ISSUANCE_DATE
FROM
INVOICE_MGMT
GROUP BY
PARENT_OBJID
)IM ON IM.PARENT_OBJID = POM.OBJID
WHERE POM.status ='approvalComplete'
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
<!-- AND (POM.PARTNER_OBJID = #{PARTNER_OBJID} OR POM.SALES_MNG_USER_ID = #{USER_ID}) -->
<if test="PARTNER_OBJID !=null and PARTNER_OBJID != '' ">
AND POM.PARTNER_OBJID = #{PARTNER_OBJID}
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
</if>
<if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if>
<if test="project_nos != null and project_nos != ''">
AND CM.OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</if>
<if test="SALES_MNG_USER_ID !=null and SALES_MNG_USER_ID != '' ">
AND POM.SALES_MNG_USER_ID = #{SALES_MNG_USER_ID}
</if>
<if test="RECEPTION_STATUS !=null and RECEPTION_STATUS != '' ">
<if test="'deploy'.equals(RECEPTION_STATUS)">
AND RECEPTION_STATUS = 'deploy'
</if>
<if test="'AA'.equals(RECEPTION_STATUS)">
AND RECEPTION_STATUS IS NULL
</if>
</if>
<if test="SALES_STATUS !=null and SALES_STATUS != '' ">
AND POM.SALES_STATUS = #{SALES_STATUS}
</if>
<if test="partner_objid !=null and partner_objid != '' ">
AND POM.PARTNER_OBJID = #{partner_objid}
</if>
<!-- <if test="purchase_order_no !=null and purchase_order_no != '' ">
AND POM.PURCHASE_ORDER_NO LIKE '%'||#{purchase_order_no}||'%'
</if>
<if test="type !=null and type != '' ">
AND POM.TYPE = #{type}
</if>
<if test="order_type_cd !=null and order_type_cd != '' ">
AND POM.ORDER_TYPE_CD = #{order_type_cd}
</if>
<if test="delivery_start_date !=null and delivery_start_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{delivery_start_date}, 'YYYY-MM-DD')
</if>
<if test="delivery_end_date !=null and delivery_end_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{delivery_end_date}, 'YYYY-MM-DD')
</if>
<if test="partner_objid !=null and partner_objid != '' ">
AND POM.PARTNER_OBJID = #{partner_objid}
</if>
<if test="sales_mng_user_id !=null and sales_mng_user_id != '' ">
AND POM.SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
<if test="reg_start_date !=null and reg_start_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{reg_start_date}, 'YYYY-MM-DD')
</if>
<if test="reg_end_date !=null and reg_end_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{reg_end_date}, 'YYYY-MM-DD')
</if>
<if test="appr_status !=null and appr_status != '' ">
AND A.APPR_STATUS = #{appr_status}
</if>
<if test="SEARCH_PART_NO !=null and SEARCH_PART_NO != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NO)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NO}))||'%'
)
</if>
<if test="SEARCH_PART_NAME !=null and SEARCH_PART_NAME != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NAME)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NAME}))||'%'
)
</if> -->
<!-- ORDER BY SUBSTRING(PURCHASE_ORDER_NO, POSITION('-' IN REVERSE(PURCHASE_ORDER_NO))+1) DESC -->
ORDER BY SPLIT_PART( PURCHASE_ORDER_NO, '-', 3)::NUMERIC DESC
</select>
<!-- 선택된 발주를 접수한다. -->
<update id="regsupplyChain" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET RECEPTION_DATE = now()
,RECEPTION_STATUS = 'deploy'
WHERE OBJID IN
<foreach collection="checkArr" item="objkey" index="index" separator="," open="(" close=")">
#{objkey}
</foreach>
</update>
<!-- 선택된 발주를 구매확인한다. -->
<update id="updateSalesStatus" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET SALES_STATUS = #{STATUS}
WHERE OBJID =#{OBJID}
</update>
<!-- 외주협업관리 -> 자금지급관리 -->
<select id="fundPaymentMgmtGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT POM.OBJID
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE POM.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
,CM.CUSTOMER_PROJECT_NAME
,CM.PROJECT_NO
,CM.OBJID AS CONTRACT_MGMT_OBJID
,POM.PURCHASE_ORDER_NO
,(CASE WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN 'ㅡ'
WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN ' '
ELSE '' END)||POM.TITLE TITLE
,POM.DELIVERY_PLACE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.DELIVERY_PLACE) AS DELIVERY_PLACE_NAME
,POM.INSPECT_METHOD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.INSPECT_METHOD) AS INSPECT_METHOD_NAME
,POM.PAYMENT_TERMS
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PAYMENT_TERMS) AS PAYMENT_TERMS_NAME
,POM.DELIVERY_DATE
,POM.TYPE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.PARTNER_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,POM.DISCOUNT_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.TOTAL_SUPPLY_PRICE
,POM.NEGO_RATE
,NVL(POM.TOTAL_SUPPLY_UNIT_PRICE, '0')::NUMERIC - NVL(POM.TOTAL_SUPPLY_PRICE, '0')::NUMERIC as VAT_PRICE
,POM.ORDER_TYPE_CD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME
,POM.UNIT_CODE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.MULTI_YN
,POM.MULTI_MASTER_YN
,POM.MULTI_MASTER_OBJID
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
,(SELECT COUNT(1) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS PART_CNT
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS ORDER_CNT
,CASE WHEN RECEPTION_STATUS IS NULL
THEN '미접수'
ELSE '접수'
END AS STATUS_NAME
,RECEPTION_STATUS
,(SELECT COUNT(1) FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID) AS ARRIVAL_CNT
,TOTAL_DELIVERY_QTY
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY)) AS NON_DELIVERY_QTY
,TOTAL_DEFECT_QTY
,SALES_STATUS
,AP.GROUP_SEQ
,AP.RECEIPT_QTY AS TOTAL_RECEIPT_QTY
,AP.ERROR_QTY AS TOTAL_ERROR_QTY
,AP.RECEIPT_DATE
,IM.OBJID AS INVOICE_OBJID
,IM.ISSUANCE_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = IM.ISSUANCE_ID) AS ISSUANCE_NAME
,TO_CHAR(IM.REGDATE,'YYYY-MM-DD') AS ISSUANCE_DATE
,IM.APPR_STATUS
,COALESCE(IM.APPR_STATUS_NAME,'작성중') AS APPR_STATUS_NAME
,IM.ROUTE_OBJID
,IM.APPROVAL_OBJID
,IM.APPR_DATE
,IM.STATUS
,CASE WHEN IM.STATUS = 'complete' then '마감완료'
WHEN IM.STATUS = 'paymentComplete' then '지급완료'
END INVOICE_STATUS_NAME
,IM.REQUEST_AMOUNT
,CASE WHEN PAYMENT_TERMS='0001075'
THEN TO_CHAR((SELECT date_trunc('month', to_date(AP.RECEIPT_DATE,'yyyy-mm-dd')) + INTERVAL '2 month' - INTERVAL '1 day'),'yyyy-mm-dd')
ELSE IM.DUE_DATE
END AS PAY_DATE
FROM PURCHASE_ORDER_MASTER AS POM
INNER JOIN PROJECT_MGMT AS CM
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
LEFT OUTER JOIN(
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
,MAX(DH.DELIVERY_DATE) AS CUR_DELIVERY_DATE
,SUM(DH.DELIVERY_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
,SUM(DH.DEFECT_QTY::NUMERIC) AS TOTAL_DEFECT_QTY
FROM PURCHASE_ORDER_PART POP
LEFT OUTER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID
) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN (
SELECT
PARENT_OBJID,
GROUP_SEQ,
SUM(RECEIPT_QTY::NUMERIC) AS RECEIPT_QTY,
SUM(ERROR_QTY::NUMERIC) AS ERROR_QTY,
MAX(RECEIPT_DATE) AS RECEIPT_DATE
FROM
ARRIVAL_PLAN AP
GROUP BY PARENT_OBJID, GROUP_SEQ
) AS AP on POM.OBJID = AP.PARENT_OBJID
LEFT OUTER JOIN (
INVOICE_MGMT IM
LEFT JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE '' END APPR_STATUS_NAME
,A.OBJID AS APPROVAL_OBJID
,A.TARGET_OBJID
,B.ROUTE_SEQ
,TO_CHAR(B.REGDATE,'YYYY-MM-DD') AS APPR_DATE
FROM APPROVAL A
,( SELECT T1.*
FROM ( SELECT TARGET_OBJID
,MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
FROM ROUTE T
GROUP BY T.TARGET_OBJID
) T
,ROUTE T1
WHERE T.TARGET_OBJID = T1.TARGET_OBJID
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('INVOICE')
) AS A ON (IM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = IM.OBJID::VARCHAR)
)
) IM
ON IM.PARENT_OBJID = POM.OBJID
AND AP.GROUP_SEQ = IM.GROUP_SEQ
<!-- WHERE A.APPR_STATUS ='complete' -->
WHERE POM.STATUS ='approvalComplete'
AND (IM.STATUS = 'complete' OR IM.STATUS = 'paymentComplete')
<!-- AND (POM.PARTNER_OBJID = #{PARTNER_OBJID} OR POM.SALES_MNG_USER_ID = #{USER_ID}) -->
<if test="PARTNER_OBJID !=null and PARTNER_OBJID != '' ">
AND POM.PARTNER_OBJID = #{PARTNER_OBJID}
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
</if>
<if test="contract_no !=null and contract_no != '' ">
AND EXISTS (SELECT 'E' FROM CONTRACT_MGMT C WHERE C.OBJID = #{contract_no} AND CM.CONTRACT_OBJID = C.OBJID)
</if>
<!--
<if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if>
-->
<if test="project_nos != null and project_nos != ''">
AND CM.OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</if>
<if test="partner_objid !=null and partner_objid != '' ">
AND POM.PARTNER_OBJID = #{partner_objid}
</if>
<if test="payment_start_date !=null and payment_start_date != '' ">
AND (CASE WHEN PAYMENT_TERMS='0001075' <!-- 계산서발행월+1M -->
THEN TO_DATE(TO_CHAR((SELECT date_trunc('month', to_date(AP.RECEIPT_DATE,'yyyy-mm-dd')) + INTERVAL '2 month' - INTERVAL '1 day'),'yyyy-mm-dd'),'YYYY-MM-DD')
ELSE TO_DATE(IM.DUE_DATE,'YYYY-MM-DD')
END) <![CDATA[ >= ]]> TO_DATE(#{payment_start_date}, 'YYYY-MM-DD')
</if>
<if test="payment_end_date !=null and payment_end_date != '' ">
AND (CASE WHEN PAYMENT_TERMS='0001075'
THEN TO_DATE(TO_CHAR((SELECT date_trunc('month', to_date(AP.RECEIPT_DATE,'yyyy-mm-dd')) + INTERVAL '2 month' - INTERVAL '1 day'),'yyyy-mm-dd'),'YYYY-MM-DD')
ELSE TO_DATE(IM.DUE_DATE,'YYYY-MM-DD')
END) <![CDATA[ <= ]]> TO_DATE(#{payment_end_date}, 'YYYY-MM-DD')
</if>
<if test="RECEIPT_START_DATE !=null and RECEIPT_START_DATE != '' ">
AND AP.RECEIPT_DATE >= #{RECEIPT_START_DATE}
</if>
<if test="RECEIPT_END_DATE !=null and RECEIPT_END_DATE != '' ">
AND AP.RECEIPT_DATE <![CDATA[ <= ]]> #{RECEIPT_END_DATE}
</if>
ORDER BY SUBSTRING(PURCHASE_ORDER_NO, POSITION('-' IN REVERSE(PURCHASE_ORDER_NO))+1) DESC
</select>
<!-- 외주협업관리 -> 자금지급관리 합-->
<select id="fundPaymentMgmtListSum" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
SUM(CASE WHEN (T.REQUEST_AMOUNT IS NULL OR T.REQUEST_AMOUNT='') THEN 0
ELSE T.REQUEST_AMOUNT::float
END) AS REQUEST_AMOUNT_SUM
FROM (
SELECT POM.OBJID
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE POM.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
,CM.CUSTOMER_PROJECT_NAME
,CM.PROJECT_NO
,CM.OBJID AS CONTRACT_MGMT_OBJID
,POM.PURCHASE_ORDER_NO
,(CASE WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN 'ㅡ'
WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN ' '
ELSE '' END)||POM.TITLE TITLE
,POM.DELIVERY_PLACE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.DELIVERY_PLACE) AS DELIVERY_PLACE_NAME
,POM.INSPECT_METHOD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.INSPECT_METHOD) AS INSPECT_METHOD_NAME
,POM.PAYMENT_TERMS
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PAYMENT_TERMS) AS PAYMENT_TERMS_NAME
,POM.DELIVERY_DATE
,POM.TYPE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.PARTNER_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,POM.DISCOUNT_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.NEGO_RATE
,POM.ORDER_TYPE_CD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME
,POM.UNIT_CODE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.MULTI_YN
,POM.MULTI_MASTER_YN
,POM.MULTI_MASTER_OBJID
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
,(SELECT COUNT(1) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS PART_CNT
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS ORDER_CNT
,CASE WHEN RECEPTION_STATUS IS NULL
THEN '미접수'
ELSE '접수'
END AS STATUS_NAME
,RECEPTION_STATUS
,(SELECT COUNT(1) FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID) AS ARRIVAL_CNT
,TOTAL_DELIVERY_QTY
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY)) AS NON_DELIVERY_QTY
,TOTAL_DEFECT_QTY
,SALES_STATUS
,AP.GROUP_SEQ
,AP.RECEIPT_QTY AS TOTAL_RECEIPT_QTY
,AP.ERROR_QTY AS TOTAL_ERROR_QTY
,AP.RECEIPT_DATE
,IM.OBJID AS INVOICE_OBJID
,IM.ISSUANCE_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = IM.ISSUANCE_ID) AS ISSUANCE_NAME
,TO_CHAR(IM.REGDATE,'YYYY-MM-DD') AS ISSUANCE_DATE
,IM.APPR_STATUS
,COALESCE(IM.APPR_STATUS_NAME,'작성중') AS APPR_STATUS_NAME
,IM.ROUTE_OBJID
,IM.APPROVAL_OBJID
,IM.APPR_DATE
,IM.STATUS
,IM.REQUEST_AMOUNT
,CASE WHEN PAYMENT_TERMS='0001075'
THEN TO_CHAR((SELECT date_trunc('month', to_date(AP.RECEIPT_DATE,'yyyy-mm-dd')) + INTERVAL '2 month' - INTERVAL '1 day'),'yyyy-mm-dd')
ELSE IM.DUE_DATE
END AS PAY_DATE
FROM PURCHASE_ORDER_MASTER AS POM
INNER JOIN PROJECT_MGMT AS CM
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
LEFT OUTER JOIN(
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
,MAX(DH.DELIVERY_DATE) AS CUR_DELIVERY_DATE
,SUM(DH.DELIVERY_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
,SUM(DH.DEFECT_QTY::NUMERIC) AS TOTAL_DEFECT_QTY
FROM PURCHASE_ORDER_PART POP
LEFT OUTER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID
) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN (
SELECT
PARENT_OBJID,
GROUP_SEQ,
SUM(RECEIPT_QTY::NUMERIC) AS RECEIPT_QTY,
SUM(ERROR_QTY::NUMERIC) AS ERROR_QTY,
MAX(RECEIPT_DATE) AS RECEIPT_DATE
FROM
ARRIVAL_PLAN AP
GROUP BY PARENT_OBJID, GROUP_SEQ
) AS AP on POM.OBJID = AP.PARENT_OBJID
LEFT OUTER JOIN (
INVOICE_MGMT IM
LEFT JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE '' END APPR_STATUS_NAME
,A.OBJID AS APPROVAL_OBJID
,A.TARGET_OBJID
,B.ROUTE_SEQ
,TO_CHAR(B.REGDATE,'YYYY-MM-DD') AS APPR_DATE
FROM APPROVAL A
,( SELECT T1.*
FROM ( SELECT TARGET_OBJID
,MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
FROM ROUTE T
GROUP BY T.TARGET_OBJID
) T
,ROUTE T1
WHERE T.TARGET_OBJID = T1.TARGET_OBJID
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('INVOICE')
) AS A ON (IM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = IM.OBJID::VARCHAR)
)
) IM
ON IM.PARENT_OBJID = POM.OBJID
AND AP.GROUP_SEQ = IM.GROUP_SEQ
<!-- WHERE A.APPR_STATUS ='complete' -->
WHERE POM.STATUS ='approvalComplete'
AND IM.STATUS = 'complete'
<!-- AND (POM.PARTNER_OBJID = #{PARTNER_OBJID} OR POM.SALES_MNG_USER_ID = #{USER_ID}) -->
<if test="PARTNER_OBJID !=null and PARTNER_OBJID != '' ">
AND POM.PARTNER_OBJID = #{PARTNER_OBJID}
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
</if>
<if test="contract_no !=null and contract_no != '' ">
AND EXISTS (SELECT 'E' FROM CONTRACT_MGMT C WHERE C.OBJID = #{contract_no} AND CM.CONTRACT_OBJID = C.OBJID)
</if>
<!--
<if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if>
-->
<if test="project_nos != null and project_nos != ''">
AND CM.OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</if>
<if test="payment_start_date !=null and payment_start_date != '' ">
AND (CASE WHEN PAYMENT_TERMS='0001075'
THEN TO_DATE(TO_CHAR((SELECT date_trunc('month', to_date(AP.RECEIPT_DATE,'yyyy-mm-dd')) + INTERVAL '2 month' - INTERVAL '1 day'),'yyyy-mm-dd'),'YYYY-MM-DD')
ELSE TO_DATE(IM.DUE_DATE,'YYYY-MM-DD')
END) <![CDATA[ >= ]]> TO_DATE(#{payment_start_date}, 'YYYY-MM-DD')
</if>
<if test="payment_end_date !=null and payment_end_date != '' ">
AND (CASE WHEN PAYMENT_TERMS='0001075'
THEN TO_DATE(TO_CHAR((SELECT date_trunc('month', to_date(AP.RECEIPT_DATE,'yyyy-mm-dd')) + INTERVAL '2 month' - INTERVAL '1 day'),'yyyy-mm-dd'),'YYYY-MM-DD')
ELSE TO_DATE(IM.DUE_DATE,'YYYY-MM-DD')
END) <![CDATA[ <= ]]> TO_DATE(#{payment_end_date}, 'YYYY-MM-DD')
</if>
<if test="RECEIPT_START_DATE !=null and RECEIPT_START_DATE != '' ">
AND AP.RECEIPT_DATE >= #{RECEIPT_START_DATE}
</if>
<if test="RECEIPT_END_DATE !=null and RECEIPT_END_DATE != '' ">
AND AP.RECEIPT_DATE <![CDATA[ <= ]]> #{RECEIPT_END_DATE}
</if>
ORDER BY SUBSTRING(PURCHASE_ORDER_NO, POSITION('-' IN REVERSE(PURCHASE_ORDER_NO))+1) DESC
) T
</select>
<!--발주품목을 가져온다 -->
<select id="purchase_order_part" parameterType="map" resultType="map">
SELECT
P.PART_NO
,CASE WHEN P.PART_NAME IS NULL
THEN T.PART_NAME
ELSE P.PART_NAME
END AS PART_NAME
,P.SPEC
,T.ORDER_QTY
,T.TOTAL_ORDER_QTY
,T.STOCK_QTY
,T.REAL_ORDER_QTY
,T.OBJID AS ORDER_PART_OBJID
,T.PART_OBJID
FROM purchase_order_part T LEFT JOIN PART_MNG P
ON T.PART_OBJID = P.OBJID::VARCHAR
WHERE T.PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
ORDER BY P.PART_NO
</select>
<!--발주품목 입고계획목록을 가져온다 -->
<select id="arrivalList" parameterType="map" resultType="map">
SELECT
OBJID
,ARRIVAL_QTY
,ARRIVAL_PLAN_DATE
,GROUP_SEQ
,SEQ
,ERROR_QTY
,ERROR_REASON
,CODE_NAME(ERROR_REASON) AS ERROR_NAME
,CODE_NAME(ATTRIBUTION) AS ATTRIBUTION_NAME
,ATTRIBUTION
,RECEIPT_QTY
FROM ARRIVAL_PLAN
WHERE PARENT_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
ORDER BY SEQ::NUMERIC
</select>
<update id="savearrivalplanFormPopup" parameterType="map">
INSERT INTO ARRIVAL_PLAN (
OBJID
,PARENT_OBJID
,ORDER_PART_OBJID
,PART_OBJID
,ARRIVAL_QTY
,ARRIVAL_PLAN_DATE
,WRITER
,GROUP_SEQ
,SEQ
) VALUES (
#{OBJID}
,#{PARENT_OBJID}
,#{ORDER_PART_OBJID}
,#{PART_OBJID}
,#{ARRIVAL_QTY}
,#{ARRIVAL_PLAN_DATE}
,#{WRITER}
,#{GROUP_SEQ}
,#{SEQ}
) ON CONFLICT (OBJID) DO
UPDATE SET
ARRIVAL_QTY = #{ARRIVAL_QTY}
,ARRIVAL_PLAN_DATE = #{ARRIVAL_PLAN_DATE}
,ORDER_PART_OBJID = #{ORDER_PART_OBJID}
,PART_OBJID = #{PART_OBJID}
</update>
<delete id="deleteArrivalPlan" parameterType="string">
DELETE FROM ARRIVAL_PLAN
WHERE OBJID = #{objId}
</delete>
<update id="saveDeliveryInfo" parameterType="map">
INSERT INTO ARRIVAL_PLAN (
OBJID
,PARENT_OBJID
,ORDER_PART_OBJID
,PART_OBJID
,RECEIPT_QTY
,RECEIPT_DATE
,LOCATION
,SUB_LOCATION
,WRITER
,RECEIVER_ID
,GROUP_SEQ
,SEQ
,ARRIVAL_QTY
,ARRIVAL_PLAN_DATE
<!-- ,INVENTORY_STATUS -->
) VALUES (
#{OBJID}
,#{PARENT_OBJID}
,#{ORDER_PART_OBJID}
,#{PART_OBJID}
,#{RECEIPT_QTY}
,#{RECEIPT_DATE}
,#{LOCATION}
,#{SUB_LOCATION}
,#{WRITER}
,#{WRITER}
,#{GROUP_SEQ}
,#{SEQ}
,#{ARRIVAL_QTY}
,#{ARRIVAL_PLAN_DATE}
<!-- ,'Y' -->
) ON CONFLICT (OBJID) DO
UPDATE SET
RECEIPT_QTY = #{RECEIPT_QTY }
,RECEIPT_DATE = #{RECEIPT_DATE }
,LOCATION = #{LOCATION }
,SUB_LOCATION = #{SUB_LOCATION }
,ARRIVAL_QTY = #{ARRIVAL_QTY }
,ARRIVAL_PLAN_DATE = #{ARRIVAL_PLAN_DATE }
<!-- ,INVENTORY_STATUS = 'Y' -->
,RECEIVER_ID = #{WRITER}
<!-- ,RECEIVER_ID = #{WRITER }
,ERROR_QTY = #{ERROR_QTY }
,ERROR_REASON = #{ERROR_REASON }
,ATTRIBUTION = #{ATTRIBUTION } -->
</update>
<update id="saveDeliveryInvalidInfo" parameterType="map">
UPDATE ARRIVAL_PLAN
SET
<!-- RECEIPT_QTY = #{RECEIPT_QTY }
,RECEIPT_DATE = #{RECEIPT_DATE }
,LOCATION = #{LOCATION }
,SUB_LOCATION = #{SUB_LOCATION } -->
ERROR_QTY = #{ERROR_QTY }
,ERROR_REASON = #{ERROR_REASON }
,ATTRIBUTION = #{ATTRIBUTION }
WHERE OBJID = #{OBJID}
</update>
<update id="saveDeliveryETCInfo" parameterType="map">
INSERT INTO ARRIVAL_PLAN (
OBJID
,PARENT_OBJID
,ORDER_PART_OBJID
,RECEIPT_QTY
,RECEIPT_DATE
,LOCATION
,SUB_LOCATION
,WRITER
,GROUP_SEQ
,SEQ
,ARRIVAL_PLAN_DATE
,ARRIVAL_QTY
) VALUES (
#{OBJID}
,#{PARENT_OBJID}
,#{ORDER_PART_OBJID}
,#{RECEIPT_QTY}
,#{RECEIPT_DATE}
,#{LOCATION}
,#{SUB_LOCATION}
,#{WRITER}
,#{GROUP_SEQ}
,#{SEQ}
,#{ARRIVAL_PLAN_DATE}
,#{ARRIVAL_QTY}
) ON CONFLICT (OBJID) DO
UPDATE SET
RECEIPT_QTY = #{RECEIPT_QTY}
,RECEIPT_DATE = #{RECEIPT_DATE}
,ARRIVAL_PLAN_DATE = #{ARRIVAL_PLAN_DATE}
,ARRIVAL_QTY = #{ARRIVAL_QTY}
,LOCATION = #{LOCATION}
,SUB_LOCATION = #{SUB_LOCATION}
<!-- ,ARRIVAL_QTY = #{RECEIPT_QTY} -->
</update>
<update id="saveInventoryStatusInfo" parameterType="map">
UPDATE ARRIVAL_PLAN
SET
INVENTORY_STATUS = 'Y'
, RECEIVER_ID = #{WRITER}
WHERE OBJID = #{OBJID}
</update>
<!--발주품목 입고결과목록을 가져온다 -->
<select id="arrivalResultList" parameterType="map" resultType="map">
SELECT
AP.OBJID
,AP.PART_OBJID
,AP.ORDER_PART_OBJID
,AP.ARRIVAL_QTY
<!-- ,ARRIVAL_PLAN_DATE -->
,AP.ARRIVAL_PLAN_DATE
,AP.GROUP_SEQ
,AP.SEQ
,AP.RECEIPT_QTY
,AP.RECEIPT_DATE
,AP.LOCATION
,AP.SUB_LOCATION
,AP.ERROR_QTY
,AP.ERROR_REASON
,AP.ATTRIBUTION
,AP.INVENTORY_STATUS
,IM.OBJID AS INVOICE_OBJID
FROM
ARRIVAL_PLAN AP
LEFT OUTER JOIN INVOICE_MGMT IM
ON IM.PARENT_OBJID = AP.PARENT_OBJID
AND IM.GROUP_SEQ = AP.GROUP_SEQ
WHERE AP.PARENT_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
ORDER BY SEQ::NUMERIC
</select>
<!-- 와주협업관리 -> 부적합품관리 -->
<select id="invalidMgmtGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
POM.PURCHASE_ORDER_NO
,CM.PROJECT_NO
,POM.OBJID AS ORDER_OBJID
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,AP.RECEIPT_DATE
,POP.PART_NO
,POP.PART_NAME
,AP.ERROR_QTY
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID= AP.ERROR_REASON) AS ERROR_REASON
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID= AP.ATTRIBUTION) AS ATTRIBUTION
,RE_ARRIVAL_PLAN_DATE
,RECEIPT_DATE
,ASSEMBLY_STATUS
,AP.GROUP_SEQ
,AP.SEQ
,AP.OBJID as ARRIVAL_OBJID
FROM PURCHASE_ORDER_MASTER AS POM
,PURCHASE_ORDER_PART AS POP
,PROJECT_MGMT AS CM
,ARRIVAL_PLAN AP
WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.CONTRACT_MGMT_OBJID = CM.OBJID
AND POP.OBJID =AP.ORDER_PART_OBJID
AND AP.ERROR_QTY !=''
AND AP.ERROR_QTY !='0'
<if test="PARTNER_OBJID !=null and PARTNER_OBJID != '' ">
AND POM.PARTNER_OBJID = #{PARTNER_OBJID}
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
</if>
<if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</if>
<if test="part_no !=null and part_no != '' ">
AND (SELECT PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) LIKE '%'||#{part_no}||'%'
</if>
<if test="defect_reason !=null and defect_reason != '' ">
AND DH.DEFECT_REASON = #{defect_reason}
</if>
<if test="reassembly_result !=null and reassembly_result != '' ">
AND AS_WBS.ASSEMBLY_DATE IS NOT NULL AND AS_WBS.ASSEMBLY_DATE != ''
</if>
ORDER BY AP.GROUP_SEQ,AP.SEQ
</select>
<update id="updateRedeliverydate" parameterType="map">
UPDATE ARRIVAL_PLAN
SET RE_ARRIVAL_PLAN_DATE = #{RE_ARRIVAL_PLAN_DATE}
WHERE OBJID = #{OBJID}
</update>
<!-- 와주협업관리 -> 공급업체품질관리 -->
<select id="supplyQCMgmtGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
*
,CASE WHEN PRODUCE_DELAY_DAY IS NOT NULL AND PRODUCE_DELAY_DAY &lt; 0 THEN NULL
ELSE PRODUCE_DELAY_DAY
END PRODUCE_DELAY_DAY
FROM (
SELECT
*
,CASE WHEN COALESCE(PRODUCE_ACT_END, '') != '' AND COALESCE(PRODUCE_PLAN_END, '') != ''
THEN DATE_PART('DAY', AGE(TO_DATE(T.PRODUCE_ACT_END, 'YYYY-MM-DD'), TO_DATE(T.PRODUCE_PLAN_END, 'YYYY-MM-DD')))
ELSE NULL
END AS PRODUCE_DELAY_DAY
FROM (
SELECT
T.OBJID,
T.CUSTOMER_OBJID,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
T.CONTRACT_OBJID,
(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
(SELECT PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NAME,
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
(SELECT MECHANICAL_TYPE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS MECHANICAL_TYPE,
(SELECT DUE_DATE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS DUE_DATE,
(SELECT SETUP FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS SETUP,
(SELECT USER_NAME(PM_USER_ID) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PM_USER_NAME,
(SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PRODUCT_NAME,
T.UNIT_CODE,
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
T.STATUS,
CASE UPPER(T.STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
T.WRITER,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS DEPT_NAME,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS USER_NAME,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) || '/' || (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) as DEPT_USER_NAME,
T.REGDATE AS REGDATE,
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
T.DEPLOY_DATE,
T.REVISION,
(SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO,
(SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE,
T.NOTE,
COALESCE((SELECT SUM(POP.ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_MASTER POM ,PURCHASE_ORDER_PART POP WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID AND POM.BOM_REPORT_OBJID = T.OBJID),'0') AS TOTAL_PO_QTY, /*발주수량*/
(SELECT COUNT(*) FROM PURCHASE_ORDER_MASTER POM WHERE POM.BOM_REPORT_OBJID = T.OBJID) AS ORDER_CNT,
(SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID = T.OBJID AND PM.part_type is not null AND PM.part_type != '') AS BOM_CNT,
COALESCE(S1.TOTAL_DEFECT_QTY, 0) TOTAL_DEFECT_QTY,
COALESCE(S1.DEFECT_QTY_1, 0) DEFECT_QTY_1,
COALESCE(S1.DEFECT_QTY_2, 0) DEFECT_QTY_2,
COALESCE(S1.DEFECT_QTY_3, 0) DEFECT_QTY_3,
COALESCE(S1.DEFECT_QTY_4, 0) DEFECT_QTY_4
,W.UNIT_NO
,(SELECT MAX(PRODUCE_PLAN_END) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = CM.OBJID AND O.OBJID = T.UNIT_CODE AND O.PRODUCE_PLAN_END !='' AND O.PRODUCE_PLAN_END IS NOT NULL) AS PRODUCE_PLAN_END
,(SELECT MAX(PRODUCE_ACT_END) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = CM.OBJID AND O.OBJID = T.UNIT_CODE AND O.PRODUCE_ACT_END !='' AND O.PRODUCE_ACT_END IS NOT NULL) AS PRODUCE_ACT_END
<!--
,(SELECT MAX(PRODUCE_ACT_END) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = CM.OBJID AND O.PRODUCE_ACT_END !='' AND O.PRODUCE_ACT_END IS NOT NULL)
- (SELECT MAX(PRODUCE_PLAN_END) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = CM.OBJID AND O.PRODUCE_PLAN_END !='' AND O.PRODUCE_PLAN_END IS NOT NULL) AS PRODUCE_DELAY_DAY
-->
FROM
PART_BOM_REPORT AS T
INNER JOIN PROJECT_MGMT AS CM
ON T.CONTRACT_OBJID = CM.OBJID
INNER JOIN PMS_WBS_TASK AS W
ON W.OBJID = T.UNIT_CODE
LEFT OUTER JOIN(
SELECT
POM.BOM_REPORT_OBJID
,SUM(DH.ERROR_QTY::NUMERIC) AS TOTAL_DEFECT_QTY
,SUM(CASE WHEN ERROR_REASON = '0001114' THEN DH.ERROR_QTY::NUMERIC ELSE NULL END) AS DEFECT_QTY_1 /*설계오류 -> Dim's 불량*/
,SUM(CASE WHEN ERROR_REASON = '0001115' THEN DH.ERROR_QTY::NUMERIC ELSE NULL END) AS DEFECT_QTY_2 /*제작불량 -> 외관불량*/
,SUM(CASE WHEN ERROR_REASON = '0001116' THEN DH.ERROR_QTY::NUMERIC ELSE NULL END) AS DEFECT_QTY_3 /*구매오류 -> 후처리(도금/도장)불량*/
,SUM(CASE WHEN ERROR_REASON = '0001117' THEN DH.ERROR_QTY::NUMERIC ELSE NULL END) AS DEFECT_QTY_4 /*오품반입*/
,SUM(POP.SUPPLY_UNIT_PRICE::NUMERIC * DH.ERROR_QTY::NUMERIC) AS TOTAL_DEFECT_PRICE
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
,ARRIVAL_PLAN DH
<!-- ,DELIVERY_HISTORY DH -->
WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
<if test="PARTNER_OBJID !=null and PARTNER_OBJID != '' ">
AND POM.PARTNER_OBJID = #{PARTNER_OBJID}
</if>
AND POP.OBJID = DH.ORDER_PART_OBJID
<!-- AND POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID -->
GROUP BY POM.BOM_REPORT_OBJID
) AS S1 ON T.OBJID::VARCHAR = S1.BOM_REPORT_OBJID
WHERE 1=1
AND UNIT_CODE IS NOT NULL
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
</if>
<if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if>
<if test="unit_code !=null and unit_code != '' ">
AND T.UNIT_CODE = #{unit_code}
</if>
ORDER BY SUBSTRING((SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID),POSITION('-' IN (SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID))+1) DESC
,UNIT_NO
<!-- ORDER BY REGDATE DESC -->
) T
) T
</select>
<!-- 외주협업관리 -> 거래명세서관리 -->
<select id="invoiceMgmtGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT POM.OBJID
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE POM.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
,CM.CUSTOMER_PROJECT_NAME
,CM.PROJECT_NO
,CM.OBJID AS CONTRACT_MGMT_OBJID
,POM.PURCHASE_ORDER_NO
,(CASE WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN 'ㅡ'
WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN ' '
ELSE '' END)||POM.TITLE TITLE
,POM.DELIVERY_PLACE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.DELIVERY_PLACE) AS DELIVERY_PLACE_NAME
,POM.INSPECT_METHOD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.INSPECT_METHOD) AS INSPECT_METHOD_NAME
,POM.PAYMENT_TERMS
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PAYMENT_TERMS) AS PAYMENT_TERMS_NAME
,POM.DELIVERY_DATE
,POM.TYPE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.PARTNER_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,POM.DISCOUNT_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.NEGO_RATE
,POM.TOTAL_REAL_SUPPLY_PRICE
,POM.TOTAL_PRICE_ALL
,POM.ORDER_TYPE_CD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME
,POM.UNIT_CODE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.MULTI_YN
,POM.MULTI_MASTER_YN
,POM.MULTI_MASTER_OBJID
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
<!-- ,A.APPR_STATUS
,COALESCE(A.APPR_STATUS_NAME,'작성중') AS APPR_STATUS_NAME
,A.ROUTE_OBJID
,A.APPROVAL_OBJID
,A.APPR_DATE -->
,(SELECT COUNT(1) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS PART_CNT
,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE O.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID) AS ORDER_CNT
,CASE WHEN RECEPTION_STATUS IS NULL
THEN '미접수'
ELSE '접수'
END AS STATUS_NAME
,RECEPTION_STATUS
,(SELECT COUNT(1) FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID) AS ARRIVAL_CNT
<!-- ,(SELECT ARRIVAL_PLAN_DATE FROM ARRIVAL_PLAN AS O WHERE O.PARENT_OBJID = POM.OBJID ORDER BY ARRIVAL_PLAN_DATE DESC LIMIT 1 ) AS ARRIVAL_PLAN_DATE -->
,TOTAL_DELIVERY_QTY
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY)) AS NON_DELIVERY_QTY
,TOTAL_DEFECT_QTY
,SALES_STATUS
,AP.GROUP_SEQ
,AP.RECEIPT_QTY AS TOTAL_RECEIPT_QTY
,AP.ERROR_QTY AS TOTAL_ERROR_QTY
,AP.ARRIVAL_QTY AS TOTAL_ARRIVAL_QTY
,(AP.ARRIVAL_QTY - AP.RECEIPT_QTY) AS UNRECEIVED_QTY
,AP.RECEIPT_DATE
,AP.ARRIVAL_PLAN_DATE
,(CASE
WHEN AP.GROUP_SEQ IS NULL THEN ''
WHEN 0 <![CDATA[ >= ]]> (AP.ARRIVAL_QTY - AP.RECEIPT_QTY - AP.ERROR_QTY) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> AP.ARRIVAL_PLAN_DATE THEN '지연'
ELSE '입고중'
END) AS DELIVERY_STATUS
,IM.OBJID AS INVOICE_OBJID
,IM.ISSUANCE_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = IM.ISSUANCE_ID) AS ISSUANCE_NAME
,TO_CHAR(IM.REGDATE,'YYYY-MM-DD') AS ISSUANCE_DATE
,IM.APPR_STATUS
,CASE WHEN IM.STATUS = 'complete' THEN '마감완료'
WHEN IM.OBJID is not null THEN COALESCE(IM.APPR_STATUS_NAME,'작성중')
ELSE ''
END APPR_STATUS_NAME
<!-- ,COALESCE(IM.APPR_STATUS_NAME,'작성중') AS APPR_STATUS_NAME -->
,IM.ROUTE_OBJID
,IM.APPROVAL_OBJID
,IM.APPR_DATE
,IM.STATUS
FROM PURCHASE_ORDER_MASTER AS POM
<!-- LEFT JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE '' END APPR_STATUS_NAME
,A.OBJID AS APPROVAL_OBJID
,A.TARGET_OBJID
,B.ROUTE_SEQ
,TO_CHAR(B.REGDATE,'YYYY-MM-DD') AS APPR_DATE
FROM APPROVAL A
,( SELECT T1.*
FROM ( SELECT TARGET_OBJID
,MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
FROM ROUTE T
GROUP BY T.TARGET_OBJID
) T
,ROUTE T1
WHERE T.TARGET_OBJID = T1.TARGET_OBJID
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('PURCHASE_ORDER')
) AS A ON (POM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR)
) -->
LEFT OUTER JOIN PROJECT_MGMT AS CM
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
LEFT OUTER JOIN(
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
,MAX(DH.DELIVERY_DATE) AS CUR_DELIVERY_DATE
,SUM(DH.DELIVERY_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
,SUM(DH.DEFECT_QTY::NUMERIC) AS TOTAL_DEFECT_QTY
FROM PURCHASE_ORDER_PART POP
LEFT OUTER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID
) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN (
SELECT
PARENT_OBJID,
GROUP_SEQ,
<!-- SUM(RECEIPT_QTY::NUMERIC) AS RECEIPT_QTY,
SUM(ERROR_QTY::NUMERIC) AS ERROR_QTY,
SUM(ARRIVAL_QTY::NUMERIC) AS ARRIVAL_QTY, -->
SUM(CASE WHEN (RECEIPT_QTY IS NULL OR RECEIPT_QTY ='')
THEN 0
ELSE RECEIPT_QTY::NUMERIC
END) AS RECEIPT_QTY,
SUM(CASE WHEN (ERROR_QTY IS NULL OR ERROR_QTY ='')
THEN 0
ELSE ERROR_QTY::NUMERIC
END) AS ERROR_QTY,
SUM(CASE WHEN (ARRIVAL_QTY IS NULL OR ARRIVAL_QTY ='')
THEN 0
ELSE ARRIVAL_QTY::NUMERIC
END) AS ARRIVAL_QTY,
MAX(ARRIVAL_PLAN_DATE) AS ARRIVAL_PLAN_DATE,
MAX(RECEIPT_DATE) AS RECEIPT_DATE
FROM
ARRIVAL_PLAN AP
GROUP BY PARENT_OBJID, GROUP_SEQ
) AS AP on POM.OBJID = AP.PARENT_OBJID
LEFT OUTER JOIN (
INVOICE_MGMT IM
LEFT JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '승인요청중'
WHEN 'complete' THEN '승인완료'
WHEN 'reject' THEN '반려'
ELSE '' END APPR_STATUS_NAME
,A.OBJID AS APPROVAL_OBJID
,A.TARGET_OBJID
,B.ROUTE_SEQ
,TO_CHAR(B.REGDATE,'YYYY-MM-DD') AS APPR_DATE
FROM APPROVAL A
,( SELECT T1.*
FROM ( SELECT TARGET_OBJID
,MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
FROM ROUTE T
GROUP BY T.TARGET_OBJID
) T
,ROUTE T1
WHERE T.TARGET_OBJID = T1.TARGET_OBJID
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('INVOICE')
) AS A ON (IM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = IM.OBJID::VARCHAR)
)
) IM
ON IM.PARENT_OBJID = POM.OBJID
AND AP.GROUP_SEQ = IM.GROUP_SEQ
<!-- WHERE A.APPR_STATUS ='complete' -->
WHERE POM.STATUS ='approvalComplete'
<!-- AND (POM.PARTNER_OBJID = #{PARTNER_OBJID} OR POM.SALES_MNG_USER_ID = #{USER_ID}) -->
<if test="PARTNER_OBJID !=null and PARTNER_OBJID != '' ">
AND POM.PARTNER_OBJID = #{PARTNER_OBJID}
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
</if>
<if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</if>
<if test="partner_objid !=null and partner_objid != '' ">
AND POM.PARTNER_OBJID = #{partner_objid}
</if>
<if test="status !=null and status != '' ">
AND COALESCE(IM.APPR_STATUS_NAME,'작성중') = #{status}
</if>
<if test="issuance_start_date !=null and issuance_start_date != '' ">
AND TO_DATE(TO_CHAR(IM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{issuance_start_date}, 'YYYY-MM-DD')
</if>
<if test="issuance_end_date !=null and issuance_end_date != '' ">
AND TO_DATE(TO_CHAR(IM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{issuance_end_date}, 'YYYY-MM-DD')
</if>
<if test="status !=null and status != '' ">
AND (CASE WHEN IM.STATUS = 'complete' THEN '마감완료'
WHEN IM.OBJID is not null THEN COALESCE(IM.APPR_STATUS_NAME,'작성중')
ELSE ''
END
) = #{status}
</if>
<if test="purchase_order_no !=null and purchase_order_no != '' ">
AND TRIM(UPPER(POM.PURCHASE_ORDER_NO)) LIKE '%'||TRIM(UPPER(#{purchase_order_no}))||'%'
</if>
<!-- <if test="purchase_order_no !=null and purchase_order_no != '' ">
AND POM.PURCHASE_ORDER_NO LIKE '%'||#{purchase_order_no}||'%'
</if>
<if test="type !=null and type != '' ">
AND POM.TYPE = #{type}
</if>
<if test="order_type_cd !=null and order_type_cd != '' ">
AND POM.ORDER_TYPE_CD = #{order_type_cd}
</if>
<if test="delivery_start_date !=null and delivery_start_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{delivery_start_date}, 'YYYY-MM-DD')
</if>
<if test="delivery_end_date !=null and delivery_end_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{delivery_end_date}, 'YYYY-MM-DD')
</if>
<if test="partner_objid !=null and partner_objid != '' ">
AND POM.PARTNER_OBJID = #{partner_objid}
</if>
<if test="sales_mng_user_id !=null and sales_mng_user_id != '' ">
AND POM.SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
<if test="reg_start_date !=null and reg_start_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{reg_start_date}, 'YYYY-MM-DD')
</if>
<if test="reg_end_date !=null and reg_end_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{reg_end_date}, 'YYYY-MM-DD')
</if>
<if test="appr_status !=null and appr_status != '' ">
AND A.APPR_STATUS = #{appr_status}
</if>
<if test="SEARCH_PART_NO !=null and SEARCH_PART_NO != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NO)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NO}))||'%'
)
</if>
<if test="SEARCH_PART_NAME !=null and SEARCH_PART_NAME != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NAME)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NAME}))||'%'
)
ORDER BY SUBSTRING(PURCHASE_ORDER_NO, POSITION('-' IN REVERSE(PURCHASE_ORDER_NO))+1)::numeric DESC
</if> -->
ORDER BY SPLIT_PART( PURCHASE_ORDER_NO, '-', 3)::NUMERIC DESC, AP.GROUP_SEQ DESC
</select>
<update id="invoiceIssuance" parameterType="map">
INSERT INTO INVOICE_MGMT
(
OBJID
,PARENT_OBJID
,GROUP_SEQ
,PRICE_SUM
,ISSUANCE_DATE
,ISSUANCE_ID
,STATUS
,REGDATE
,WRITER
,REMARK
,OUTSTANDING_BALANCE
,PERCENTAGE
,REQUEST_AMOUNT
,TOTAL_SUM
,DEPOSIT_AMOUNT
,TOTAL_OUTSTANDING_BALANCE
,RECEIVE_USER
,TOTAL_PARTNER_PRICE_SUM
,TOTAL_PARTNER_VAT_PRICE_SUM
,NEGO_PRICE_ALL
,NEGO_VAT_PRICE_ALL
,DISCOUNT_PERCENTAGE
,INV_DISCOUNT_PRICE
)
VALUES
(
#{OBJID }
,#{PARENT_OBJID }
,#{GROUP_SEQ }
,#{PRICE_SUM }
,#{ISSUANCE_DATE }
,#{WRITER }
,'create'
,NOW()
,#{WRITER }
,#{REMARK }
,#{OUTSTANDING_BALANCE }
,#{PERCENTAGE }
,#{REQUEST_AMOUNT }
,#{TOTAL_SUM }
,#{DEPOSIT_AMOUNT }
,#{TOTAL_OUTSTANDING_BALANCE }
,#{RECEIVE_USER }
,#{TOTAL_PARTNER_PRICE_SUM }
,#{TOTAL_PARTNER_VAT_PRICE_SUM }
,#{NEGO_PRICE_ALL }
,#{NEGO_VAT_PRICE_ALL }
,#{DISCOUNT_PERCENTAGE }
,#{INV_DISCOUNT_PRICE }
) ON CONFLICT (OBJID) DO
UPDATE
SET
PRICE_SUM = #{PRICE_SUM}
,ISSUANCE_DATE = #{ISSUANCE_DATE}
,ISSUANCE_ID = #{WRITER}
,STATUS = #{STATUS}
,WRITER = #{WRITER}
,REMARK = #{REMARK}
,OUTSTANDING_BALANCE = #{OUTSTANDING_BALANCE}
,PERCENTAGE = #{PERCENTAGE}
,REQUEST_AMOUNT = #{REQUEST_AMOUNT}
,TOTAL_SUM = #{TOTAL_SUM}
,DEPOSIT_AMOUNT = #{DEPOSIT_AMOUNT}
,TOTAL_OUTSTANDING_BALANCE = #{TOTAL_OUTSTANDING_BALANCE}
,RECEIVE_USER = #{RECEIVE_USER}
,TOTAL_PARTNER_PRICE_SUM = #{TOTAL_PARTNER_PRICE_SUM}
,TOTAL_PARTNER_VAT_PRICE_SUM = #{TOTAL_PARTNER_VAT_PRICE_SUM}
,NEGO_PRICE_ALL = #{NEGO_PRICE_ALL}
,NEGO_VAT_PRICE_ALL = #{NEGO_VAT_PRICE_ALL}
,DISCOUNT_PERCENTAGE = #{DISCOUNT_PERCENTAGE}
,INV_DISCOUNT_PRICE = #{INV_DISCOUNT_PRICE}
</update>
<update id="invoiceConfirm" parameterType="map">
UPDATE INVOICE_MGMT SET
STATUS='complete'
WHERE OBJID = #{OBJID}
</update>
<!-- 자금관리 예정일 저장 -->
<update id="saveDueDateInfo" parameterType="map">
UPDATE INVOICE_MGMT SET DUE_DATE = #{DUE_DATE} WHERE OBJID = #{OBJID}
</update>
<update id="invoiceComplete" parameterType="map">
UPDATE INVOICE_MGMT SET
STATUS='paymentComplete'
WHERE OBJID = #{OBJID}
</update>
<!-- 거래명세서 저장 시 저장된 파트 정보를 초기화 -->
<delete id="initInvoicePart" parameterType="map">
DELETE FROM INVOICE_MGMT_PART WHERE INVOICE_OBJID = #{INVOICE_OBJID}
</delete>
<update id="mergeInvoicePartInfo" parameterType="map">
INSERT INTO INVOICE_MGMT_PART
(
OBJID
,INVOICE_OBJID
,PART_OBJID
,QTY
,UNIT_PRICE
,PARTNER_PRICE
,VAT_PRICE
,WRITER
,REGDATE
,STATUS
,REMARK
,RECEIPT_DATE
)
VALUES
(
#{OBJID }
, #{INVOICE_OBJID }
, #{PART_OBJID }
, #{QTY }
, #{UNIT_PRICE }
, #{PARTNER_PRICE }
, #{VAT_PRICE }
, #{WRITER }
, now()
, #{STATUS }
, #{REMARK }
, #{RECEIPT_DATE }
) ON CONFLICT (OBJID) DO
UPDATE
SET
PART_OBJID = #{PART_OBJID }
,QTY = #{QTY }
,UNIT_PRICE = #{UNIT_PRICE }
,PARTNER_PRICE = #{PARTNER_PRICE }
,VAT_PRICE = #{VAT_PRICE }
,WRITER = #{WRITER }
,STATUS = #{STATUS }
,REMARK = #{REMARK }
,RECEIPT_DATE = #{RECEIPT_DATE }
</update>
<update id="saveLocationInfo" parameterType="map">
UPDATE ARRIVAL_PLAN SET
LOCATION = #{LOCATION }
,SUB_LOCATION = #{SUB_LOCATION }
WHERE OBJID = #{OBJID}
</update>
</mapper>