Files
wace_plm/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml
2025-12-19 17:49:40 +09:00

6119 lines
223 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="purchaseOrder">
<!-- //출고관리 조회 -->
<select id="purchaseOrderMasterList" parameterType="map" resultType="map">
select * From (
SELECT
ROW_NUMBER() OVER(ORDER BY A.DELIVERY_DATE DESC) AS RNUM,
A.*,
(TOTAL_ORDER_QTY::NUMERIC-TOTAL_DELIVERY_QTY::NUMERIC) AS NON_ARRIVAL_QTY,
A.TOTAL_DELIVERY_QTY
FROM (
SELECT
POM.OBJID,
POM.PURCHASE_ORDER_NO,
POM.CATEGORY_CD,
POM.PRODUCT_GROUP,
POM.PRODUCT,
POM.PRODUCT_CODE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.CATEGORY_CD) AS CATEGORY_CD_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PRODUCT_GROUP) AS PRODUCT_GROUP_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PRODUCT) AS PRODUCT_NAME,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID::VARCHAR = POM.PRODUCT_CODE::VARCHAR) AS PRODUCT_CODE_NAME,
POM.MY_COMPANY_OBJID,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.MY_COMPANY_OBJID) AS MY_COMPANY_NAME,
POM.PARTNER_OBJID,
(SELECT SUPPLY_CODE FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_CODE,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
(
SELECT
SUM(ORDER_QTY::numeric)
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS TOTAL_ORDER_QTY,
(
SELECT
SUM(COALESCE(DH.DELIVERY_QTY,'0')::NUMERIC)
FROM
PURCHASE_ORDER_PART POP
LEFT OUTER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS TOTAL_DELIVERY_QTY,
(
SELECT
SUM(COALESCE(ORDER_QTY,'0')::NUMERIC * COALESCE(PARTNER_PRICE,'0')::NUMERIC)
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS PURCHASE_TOTAL_PRICE,
(
SELECT
SUM(COALESCE(DH.DELIVERY_QTY,'0')::NUMERIC * COALESCE(DH.DELIVERY_PRICE,'0')::NUMERIC)
FROM
PURCHASE_ORDER_PART POP
LEFT OUTER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS TOTAL_DELIVERY_PRICE,
POM.DELIVERY_DATE,
POM.DELIVERY_PLACE,
POM.EFFECTIVE_DATE,
POM.PAYMENT_TERMS,
POM.REMARK,
POM.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = POM.WRITER) AS WRITER_NAME,
POM.REGDATE,
TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
TO_CHAR(POM.REGDATE,'YYYY') AS REGDATE_YEAR,
POM.STATUS,
CASE POM.STATUS
WHEN 'create' THEN '등록'
WHEN 'approvalRequest' THEN '결재중'
WHEN 'approvalComplete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END STATUS_TITLE,
POM.PURCHASE_DATE,
POM.SALES_REQUEST_OBJID,
P.DELIVERY_CNT,
SRM.REQUEST_MNG_NO,
A.APPR_STATUS,
A.ROUTE_OBJID,
A.APPROVAL_OBJID
,POM.TITLE
,POM.CONTRACT_MGMT_OBJID
,(SELECT CONTRACT_NO FROM CONTRACT_MGMT CNT WHERE CNT.OBJID = POM.CONTRACT_MGMT_OBJID) AS CONTRACT_NO
FROM
PURCHASE_ORDER_MASTER POM
LEFT OUTER JOIN SALES_REQUEST_MASTER SRM
ON POM.SALES_REQUEST_OBJID = SRM.OBJID
LEFT OUTER JOIN(
SELECT
POM.OBJID,
COUNT(1) AS DELIVERY_CNT
FROM
DELIVERY_HISTORY DH
INNER JOIN PURCHASE_ORDER_PART POP
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
INNER JOIN PURCHASE_ORDER_MASTER POM
ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
GROUP BY POM.OBJID
) P ON POM.OBJID = P.OBJID
LEFT OUTER JOIN(
SELECT
B.OBJID AS ROUTE_OBJID,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END APPR_STATUS,
A.OBJID AS APPROVAL_OBJID,
A.TARGET_OBJID,
B.ROUTE_SEQ
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')
) A ON POM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
) A
WHERE 1=1
<if test="SEARCH_YEAR != null and SEARCH_YEAR !=''">
AND REGDATE_YEAR = #{SEARCH_YEAR}
</if>
<if test="SEARCH_PRODUCT_GROUP != null and SEARCH_PRODUCT_GROUP !=''">
AND PRODUCT_GROUP = #{SEARCH_PRODUCT_GROUP}
</if>
<if test="SEARCH_PRODUCT != null and SEARCH_PRODUCT !=''">
AND PRODUCT = #{SEARCH_PRODUCT}
</if>
<if test="SEARCH_PRODUCT_CODE != null and SEARCH_PRODUCT_CODE !=''">
AND PRODUCT_CODE = #{SEARCH_PRODUCT_CODE}
</if>
<if test="SEARCH_PURCHASE_ORDER_NO != null and SEARCH_PURCHASE_ORDER_NO !=''">
AND PURCHASE_ORDER_NO = #{SEARCH_PURCHASE_ORDER_NO}
</if>
<if test="SEARCH_PARTNER_OBJID != null and SEARCH_PARTNER_OBJID !=''">
AND PARTNER_OBJID = #{SEARCH_PARTNER_OBJID}
</if>
<if test="SEARCH_PURCHASE_REGDATE_START != null and SEARCH_PURCHASE_REGDATE_START !=''">
AND TO_DATE(PURCHASE_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{SEARCH_PURCHASE_REGDATE_START}, 'YYYY-MM-DD')
</if>
<if test="SEARCH_PURCHASE_REGDATE_END != null and SEARCH_PURCHASE_REGDATE_END !=''">
AND TO_DATE(PURCHASE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{SEARCH_PURCHASE_REGDATE_END}, 'YYYY-MM-DD')
</if>
<if test="SEARCH_MASTER_DELIVERY_DATE_START != null and SEARCH_MASTER_DELIVERY_DATE_START !=''">
AND TO_DATE(DELIVERY_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{SEARCH_MASTER_DELIVERY_DATE_START}, 'YYYY-MM-DD')
</if>
<if test="SEARCH_MASTER_DELIVERY_DATE_END != null and SEARCH_MASTER_DELIVERY_DATE_END !=''">
AND TO_DATE(DELIVERY_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{SEARCH_MASTER_DELIVERY_DATE_END}, 'YYYY-MM-DD')
</if>
<if test="SEARCH_STATUS != null and SEARCH_STATUS !=''">
AND STATUS = #{SEARCH_STATUS}
</if>
<if test="SEARCH_NON_ARRIVE eq 'include'">
AND TOTAL_ORDER_QTY > TOTAL_DELIVERY_QTY
</if>
<if test="SEARCH_NON_ARRIVE eq 'notInclude'">
</if>
<if test="SEARCH_DELIVERY_DATE_START != null and SEARCH_DELIVERY_DATE_START !=''">
AND OBJID IN(
SELECT
POP.PURCHASE_ORDER_MASTER_OBJID
FROM
PURCHASE_ORDER_PART POP
INNER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
AND DH.DELIVERY_DATE IS NOT NULL
AND DH.DELIVERY_DATE != ''
AND TO_DATE(TO_CHAR(TO_DATE(DH.DELIVERY_DATE,'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{SEARCH_DELIVERY_DATE_START}, 'YYYY-MM-DD')
)
</if>
<if test="SEARCH_DELIVERY_DATE_END != null and SEARCH_DELIVERY_DATE_END !=''">
AND OBJID IN(
SELECT
POP.PURCHASE_ORDER_MASTER_OBJID
FROM
PURCHASE_ORDER_PART POP
INNER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
AND DH.DELIVERY_DATE IS NOT NULL
AND DH.DELIVERY_DATE != ''
AND TO_DATE(TO_CHAR(TO_DATE(DH.DELIVERY_DATE,'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{SEARCH_DELIVERY_DATE_END}, 'YYYY-MM-DD')
)
</if>
) AS T99
where 1=1
<if test="PAGE_END != null and PAGE_END != ''">
<![CDATA[ AND RNUM <= #{PAGE_END}::integer ]]>
</if>
<if test="PAGE_START != null and PAGE_START != ''">
<![CDATA[ AND RNUM >= #{PAGE_START}::integer ]]>
</if>
</select>
<select id="purchaseOrderMasterListCnt" parameterType="map" resultType="map">
SELECT CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE
,TOTAL_CNT::integer
FROM (
SELECT COUNT(1)::float TOTAL_CNT
FROM (
SELECT
POM.OBJID,
POM.PURCHASE_ORDER_NO,
POM.CATEGORY_CD,
POM.PRODUCT_GROUP,
POM.PRODUCT,
POM.PRODUCT_CODE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.CATEGORY_CD) AS CATEGORY_CD_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PRODUCT_GROUP) AS PRODUCT_GROUP_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PRODUCT) AS PRODUCT_NAME,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID::VARCHAR = POM.PRODUCT_CODE::VARCHAR) AS PRODUCT_CODE_NAME,
POM.MY_COMPANY_OBJID,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.MY_COMPANY_OBJID) AS MY_COMPANY_NAME,
POM.PARTNER_OBJID,
(SELECT SUPPLY_CODE FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_CODE,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
(
SELECT
SUM(ORDER_QTY::numeric)
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS TOTAL_ORDER_QTY,
(
SELECT
SUM(COALESCE(DH.DELIVERY_QTY,'0')::NUMERIC)
FROM
PURCHASE_ORDER_PART POP
LEFT OUTER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS TOTAL_DELIVERY_QTY,
(
SELECT
SUM(COALESCE(ORDER_QTY,'0')::NUMERIC * COALESCE(PARTNER_PRICE,'0')::NUMERIC)
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS PURCHASE_TOTAL_PRICE,
(
SELECT
SUM(COALESCE(DH.DELIVERY_QTY,'0')::NUMERIC * COALESCE(DH.DELIVERY_PRICE,'0')::NUMERIC)
FROM
PURCHASE_ORDER_PART POP
LEFT OUTER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS TOTAL_DELIVERY_PRICE,
POM.DELIVERY_DATE,
POM.DELIVERY_PLACE,
POM.EFFECTIVE_DATE,
POM.PAYMENT_TERMS,
POM.REMARK,
POM.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = POM.WRITER) AS WRITER_NAME,
POM.REGDATE,
TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
TO_CHAR(POM.REGDATE,'YYYY') AS REGDATE_YEAR,
POM.STATUS,
CASE POM.STATUS
WHEN 'create' THEN '등록'
WHEN 'approvalRequest' THEN '결재중'
WHEN 'approvalComplete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END STATUS_TITLE,
POM.PURCHASE_DATE,
POM.SALES_REQUEST_OBJID,
P.DELIVERY_CNT,
SRM.REQUEST_MNG_NO,
A.APPR_STATUS,
A.ROUTE_OBJID,
A.APPROVAL_OBJID
,POM.TITLE
FROM
PURCHASE_ORDER_MASTER POM
LEFT OUTER JOIN SALES_REQUEST_MASTER SRM
ON POM.SALES_REQUEST_OBJID = SRM.OBJID
LEFT OUTER JOIN(
SELECT
POM.OBJID,
COUNT(1) AS DELIVERY_CNT
FROM
DELIVERY_HISTORY DH
INNER JOIN PURCHASE_ORDER_PART POP
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
INNER JOIN PURCHASE_ORDER_MASTER POM
ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
GROUP BY POM.OBJID
) P ON POM.OBJID = P.OBJID
LEFT OUTER JOIN(
SELECT
B.OBJID AS ROUTE_OBJID,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END APPR_STATUS,
A.OBJID AS APPROVAL_OBJID,
A.TARGET_OBJID,
B.ROUTE_SEQ
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')
) A ON POM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
) A
WHERE 1=1
<if test="SEARCH_YEAR != null and SEARCH_YEAR !=''">
AND REGDATE_YEAR = #{SEARCH_YEAR}
</if>
<if test="SEARCH_PRODUCT_GROUP != null and SEARCH_PRODUCT_GROUP !=''">
AND PRODUCT_GROUP = #{SEARCH_PRODUCT_GROUP}
</if>
<if test="SEARCH_PRODUCT != null and SEARCH_PRODUCT !=''">
AND PRODUCT = #{SEARCH_PRODUCT}
</if>
<if test="SEARCH_PRODUCT_CODE != null and SEARCH_PRODUCT_CODE !=''">
AND PRODUCT_CODE = #{SEARCH_PRODUCT_CODE}
</if>
<if test="SEARCH_PURCHASE_ORDER_NO != null and SEARCH_PURCHASE_ORDER_NO !=''">
AND PURCHASE_ORDER_NO = #{SEARCH_PURCHASE_ORDER_NO}
</if>
<if test="SEARCH_PARTNER_OBJID != null and SEARCH_PARTNER_OBJID !=''">
AND PARTNER_OBJID = #{SEARCH_PARTNER_OBJID}
</if>
<if test="SEARCH_PURCHASE_REGDATE_START != null and SEARCH_PURCHASE_REGDATE_START !=''">
AND TO_DATE(PURCHASE_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{SEARCH_PURCHASE_REGDATE_START}, 'YYYY-MM-DD')
</if>
<if test="SEARCH_PURCHASE_REGDATE_END != null and SEARCH_PURCHASE_REGDATE_END !=''">
AND TO_DATE(PURCHASE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{SEARCH_PURCHASE_REGDATE_END}, 'YYYY-MM-DD')
</if>
<if test="SEARCH_MASTER_DELIVERY_DATE_START != null and SEARCH_MASTER_DELIVERY_DATE_START !=''">
AND TO_DATE(DELIVERY_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{SEARCH_MASTER_DELIVERY_DATE_START}, 'YYYY-MM-DD')
</if>
<if test="SEARCH_MASTER_DELIVERY_DATE_END != null and SEARCH_MASTER_DELIVERY_DATE_END !=''">
AND TO_DATE(DELIVERY_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{SEARCH_MASTER_DELIVERY_DATE_END}, 'YYYY-MM-DD')
</if>
<if test="SEARCH_STATUS != null and SEARCH_STATUS !=''">
AND STATUS = #{SEARCH_STATUS}
</if>
<if test="SEARCH_NON_ARRIVE eq 'include'">
AND TOTAL_ORDER_QTY > TOTAL_DELIVERY_QTY
</if>
<if test="SEARCH_NON_ARRIVE eq 'notInclude'">
</if>
<if test="SEARCH_DELIVERY_DATE_START != null and SEARCH_DELIVERY_DATE_START !=''">
AND OBJID IN(
SELECT
POP.PURCHASE_ORDER_MASTER_OBJID
FROM
PURCHASE_ORDER_PART POP
INNER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
AND DH.DELIVERY_DATE IS NOT NULL
AND DH.DELIVERY_DATE != ''
AND TO_DATE(TO_CHAR(TO_DATE(DH.DELIVERY_DATE,'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{SEARCH_DELIVERY_DATE_START}, 'YYYY-MM-DD')
)
</if>
<if test="SEARCH_DELIVERY_DATE_END != null and SEARCH_DELIVERY_DATE_END !=''">
AND OBJID IN(
SELECT
POP.PURCHASE_ORDER_MASTER_OBJID
FROM
PURCHASE_ORDER_PART POP
INNER JOIN DELIVERY_HISTORY DH
ON POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
AND DH.DELIVERY_DATE IS NOT NULL
AND DH.DELIVERY_DATE != ''
AND TO_DATE(TO_CHAR(TO_DATE(DH.DELIVERY_DATE,'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{SEARCH_DELIVERY_DATE_END}, 'YYYY-MM-DD')
)
</if>
) T99
WHERE 1=1
</select>
<select id="selectPurchaseOrderMasterList" parameterType="map" resultType="map">
SELECT *
,(SELECT PROJECT_NO FROM PROJECT_MGMT CNT WHERE CNT.OBJID = POM.CONTRACT_MGMT_OBJID) AS CONTRACT_NO
FROM PURCHASE_ORDER_MASTER POM
WHERE 1=1
<!--
<if test="OBJID != null and OBJID !=''">
AND OBJID = #{OBJID}
</if>
<if test="PURCHASE_ORDER_MASTER_OBJID != null and PURCHASE_ORDER_MASTER_OBJID !=''">
AND OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</if>
-->
AND MULTI_MASTER_OBJID = #{MULTI_MASTER_OBJID}
<if test="MULTI_MASTER_OBJID != null and MULTI_MASTER_OBJID !=''">
</if>
ORDER BY CONTRACT_NO DESC
<!--
ORDER BY PURCHASE_ORDER_NO DESC
-->
</select>
<select id="selectSameProjectMasterList" parameterType="map" resultType="map">
SELECT
OBJID
,CONTRACT_MGMT_OBJID
,UNIT_CODE
,BOM_REPORT_OBJID
,(SELECT PROJECT_NO FROM PROJECT_MGMT CNT WHERE CNT.OBJID = POM.CONTRACT_MGMT_OBJID) AS CONTRACT_NO
FROM
PURCHASE_ORDER_MASTER POM
WHERE 1=1
AND MULTI_MASTER_OBJID = #{MULTI_MASTER_OBJID}
<if test="MULTI_MASTER_OBJID != null and MULTI_MASTER_OBJID !=''">
</if>
ORDER BY CONTRACT_NO
</select>
<update id="mergePurchaseOrderMaster" parameterType="map">
INSERT INTO PURCHASE_ORDER_MASTER
(
OBJID,
PO_CLIENT_ID,
PURCHASE_ORDER_NO,
CATEGORY_CD,
PRODUCT_GROUP,
PRODUCT,
PRODUCT_CODE,
MY_COMPANY_OBJID,
PARTNER_OBJID,
DELIVERY_DATE,
DELIVERY_PLACE,
EFFECTIVE_DATE,
PAYMENT_TERMS,
REMARK,
REQUEST_CONTENT,
WRITER,
REGDATE,
STATUS,
SALES_REQUEST_OBJID,
SALES_MNG_USER_ID,
SALES_MNG_USER_ID2,
FORM_TYPE
,TITLE
,PURCHASE_DATE
,CONTRACT_MGMT_OBJID
,TYPE
,INSPECT_METHOD
,TOTAL_PRICE_TXT
,TOTAL_PRICE_TXT_ALL
,VAT_METHOD
,TOTAL_SUPPLY_UNIT_PRICE
,TOTAL_SUPPLY_PRICE
,TOTAL_REAL_SUPPLY_PRICE
,DISCOUNT_PRICE
,TOTAL_PRICE
,TOTAL_PRICE_ALL
,NEGO_RATE
,SUPPLY_BUS_NO
,SUPPLY_USER_NAME
,SUPPLY_USER_HP
,SUPPLY_USER_TEL
,SUPPLY_USER_FAX
,SUPPLY_USER_EMAIL
,SUPPLY_ADDR
,UNIT_CODE
,BOM_REPORT_OBJID
,ORDER_TYPE_CD
,MULTI_YN
,MULTI_MASTER_YN
,MULTI_MASTER_OBJID
,DELIVERY_PLAN_DATE
,DELIVERY_PLAN_QTY
,PURCHASE_ORDER_NO_ORG
)
VALUES
(
#{OBJID},
#{PO_CLIENT_ID},
<!-- 기존: PO-YYMM-순번, 신규: RPSYY-MMDD-순번 (예: RPS25-0926-01) -->
(SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
#{CATEGORY_CD},
#{PRODUCT_GROUP},
#{PRODUCT},
#{PRODUCT_CODE},
#{MY_COMPANY_OBJID},
#{PARTNER_OBJID},
#{DELIVERY_DATE},
#{DELIVERY_PLACE},
#{EFFECTIVE_DATE},
#{PAYMENT_TERMS},
#{REMARK},
#{REQUEST_CONTENT},
#{WRITER},
NOW(),
#{STATUS},
#{SALES_REQUEST_OBJID},
#{SALES_MNG_USER_ID},
#{SALES_MNG_USER_ID2},
#{FORM_TYPE}
,#{TITLE}
,#{PURCHASE_DATE}
,#{CONTRACT_MGMT_OBJID}
,#{TYPE }
,#{INSPECT_METHOD }
,#{TOTAL_PRICE_TXT }
,#{TOTAL_PRICE_TXT_ALL }
,#{VAT_METHOD }
,#{TOTAL_SUPPLY_UNIT_PRICE}
,#{TOTAL_SUPPLY_PRICE}
,#{TOTAL_REAL_SUPPLY_PRICE}
,#{DISCOUNT_PRICE }
,#{TOTAL_PRICE }
,#{TOTAL_PRICE_ALL }
,#{NEGO_RATE }
,#{SUPPLY_BUS_NO }
,#{SUPPLY_USER_NAME }
,#{SUPPLY_USER_HP }
,#{SUPPLY_USER_TEL }
,#{SUPPLY_USER_FAX }
,#{SUPPLY_USER_EMAIL }
,#{SUPPLY_ADDR }
,#{UNIT_CODE }
,#{BOM_REPORT_OBJID }
,#{ORDER_TYPE_CD }
,#{MULTI_YN }
,#{MULTI_MASTER_YN }
,#{MULTI_MASTER_OBJID }
,#{DELIVERY_PLAN_DATE}
,#{DELIVERY_PLAN_QTY}
,#{PURCHASE_ORDER_NO_ORG}
) ON CONFLICT (OBJID) DO
UPDATE
SET
<!--
PURCHASE_ORDER_NO = #{PURCHASE_ORDER_NO},
-->
PO_CLIENT_ID = #{PO_CLIENT_ID},
CATEGORY_CD = #{CATEGORY_CD},
PRODUCT_GROUP = #{PRODUCT_GROUP},
PRODUCT = #{PRODUCT},
PRODUCT_CODE = #{PRODUCT_CODE},
MY_COMPANY_OBJID = #{MY_COMPANY_OBJID},
PARTNER_OBJID = #{PARTNER_OBJID},
DELIVERY_DATE = #{DELIVERY_DATE},
DELIVERY_PLACE = #{DELIVERY_PLACE},
EFFECTIVE_DATE = #{EFFECTIVE_DATE},
PAYMENT_TERMS = #{PAYMENT_TERMS},
REMARK = #{REMARK},
REQUEST_CONTENT = #{REQUEST_CONTENT},
WRITER = #{WRITER},
STATUS = #{STATUS},
SALES_MNG_USER_ID = #{SALES_MNG_USER_ID},
SALES_MNG_USER_ID2 = #{SALES_MNG_USER_ID2}
<if test="FORM_TYPE != null and FORM_TYPE != ''">
,FORM_TYPE = #{FORM_TYPE}
</if>
,TITLE = #{TITLE}
,PURCHASE_DATE = #{PURCHASE_DATE}
,CONTRACT_MGMT_OBJID = #{CONTRACT_MGMT_OBJID}
,TYPE = #{TYPE }
,INSPECT_METHOD = #{INSPECT_METHOD }
,TOTAL_PRICE_TXT = #{TOTAL_PRICE_TXT }
,TOTAL_PRICE_TXT_ALL = #{TOTAL_PRICE_TXT_ALL }
,VAT_METHOD = #{VAT_METHOD }
,TOTAL_SUPPLY_UNIT_PRICE = #{TOTAL_SUPPLY_UNIT_PRICE}
,TOTAL_SUPPLY_PRICE = #{TOTAL_SUPPLY_PRICE}
<!--
,TOTAL_SUPPLY_PRICE_ALL = #{TOTAL_SUPPLY_PRICE_ALL}
-->
,TOTAL_REAL_SUPPLY_PRICE = #{TOTAL_REAL_SUPPLY_PRICE}
,DISCOUNT_PRICE = #{DISCOUNT_PRICE }
,TOTAL_PRICE = #{TOTAL_PRICE }
,TOTAL_PRICE_ALL = #{TOTAL_PRICE_ALL }
,NEGO_RATE = #{NEGO_RATE }
,SUPPLY_BUS_NO = #{SUPPLY_BUS_NO }
,SUPPLY_USER_NAME = #{SUPPLY_USER_NAME }
,SUPPLY_USER_HP = #{SUPPLY_USER_HP }
,SUPPLY_USER_TEL = #{SUPPLY_USER_TEL }
,SUPPLY_USER_FAX = #{SUPPLY_USER_FAX }
,SUPPLY_USER_EMAIL = #{SUPPLY_USER_EMAIL }
,SUPPLY_ADDR = #{SUPPLY_ADDR }
,UNIT_CODE = #{UNIT_CODE }
,BOM_REPORT_OBJID = #{BOM_REPORT_OBJID }
,ORDER_TYPE_CD = #{ORDER_TYPE_CD }
,DELIVERY_PLAN_DATE = #{DELIVERY_PLAN_DATE}
,DELIVERY_PLAN_QTY = #{DELIVERY_PLAN_QTY}
,MULTI_YN = #{MULTI_YN}
,MULTI_MASTER_YN = #{MULTI_MASTER_YN}
,PURCHASE_ORDER_NO_ORG = #{PURCHASE_ORDER_NO_ORG}
</update>
<!--
<update id="mergePurchaseOrderMulti" parameterType="map">
INSERT INTO PURCHASE_ORDER_MULTI
(
OBJID
,MULTI_MASTER_OBJID
,PURCHASE_ORDER_MASTER_OBJID
,PROJECT_OBJID
,DELIVERY_PLAN_DATE
,DELIVERY_PLAN_QTY
,REGDATE
,EDITDATE
,WRITER
,EDITER
) VALUES (
#{OBJID}
,#{MULTI_MASTER_OBJID}
,#{PURCHASE_ORDER_MASTER_OBJID}
,#{PROJECT_OBJID}
,#{DELIVERY_PLAN_DATE}
,#{DELIVERY_PLAN_QTY}
,NOW()
,NULL
,#{WRITER}
,''
) ON CONFLICT (OBJID) DO
UPDATE
SET
DELIVERY_PLAN_DATE = #{DELIVERY_PLAN_DATE}
,DELIVERY_PLAN_QTY = #{DELIVERY_PLAN_QTY}
,EDITDATE = NOW()
,EDITER = #{WRITER}
</update>
-->
<update id="mergePurchaseOrderMasterBySalesRequest" parameterType="map">
INSERT INTO PURCHASE_ORDER_MASTER
(
OBJID,
PO_CLIENT_ID,
PURCHASE_ORDER_NO,
PARTNER_OBJID,
DELIVERY_DATE,
DELIVERY_PLACE,
EFFECTIVE_DATE,
PAYMENT_TERMS,
REMARK,
WRITER,
REGDATE,
STATUS,
SALES_REQUEST_OBJID,
SALES_MNG_USER_ID,
FORM_TYPE
,TITLE
,PURCHASE_DATE
,CONTRACT_MGMT_OBJID
,TYPE
,INSPECT_METHOD
,TOTAL_PRICE_TXT
,VAT_METHOD
,TOTAL_SUPPLY_UNIT_PRICE
,DISCOUNT_PRICE
,TOTAL_PRICE
,NEGO_RATE
,SUPPLY_BUS_NO
,SUPPLY_USER_NAME
,SUPPLY_USER_HP
,SUPPLY_USER_TEL
,SUPPLY_USER_FAX
,SUPPLY_USER_EMAIL
,SUPPLY_ADDR
,UNIT_CODE
,BOM_REPORT_OBJID
,ORDER_TYPE_CD
)
VALUES
(
#{OBJID},
#{PO_CLIENT_ID},
(SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
<!-- 기존: PO-YYMM-순번, 신규: RPSYY-MMDD-순번 (예: RPS25-0926-01) -->
#{PARTNER_OBJID},
#{DELIVERY_REQUEST_DATE},
#{DELIVERY_PLACE},
#{EFFECTIVE_DATE},
#{PAYMENT_TERMS},
#{REMARK},
#{WRITER},
NOW(),
'create',
#{SALES_REQUEST_OBJID},
#{SALES_MNG_USER_ID},
#{FORM_TYPE}
,#{TITLE}
,#{PURCHASE_DATE}
,NULLIF(#{PROJECT_NO}::TEXT, '')::NUMERIC
,#{TYPE }
,#{INSPECT_METHOD }
,#{TOTAL_PRICE_TXT }
,#{VAT_METHOD }
,NULLIF(#{TOTAL_SUPPLY_UNIT_PRICE}::TEXT, '')::NUMERIC
,NULLIF(#{DISCOUNT_PRICE}::TEXT, '')::NUMERIC
,NULLIF(#{TOTAL_PRICE}::TEXT, '')::NUMERIC
,NULLIF(#{NEGO_RATE}::TEXT, '')::NUMERIC
,#{SUPPLY_BUS_NO }
,#{SUPPLY_USER_NAME }
,#{SUPPLY_USER_HP }
,#{SUPPLY_USER_TEL }
,#{SUPPLY_USER_FAX }
,#{SUPPLY_USER_EMAIL }
,#{SUPPLY_ADDR }
,#{UNIT_NAME }
,#{BOM_REPORT_OBJID }
,#{ORDER_TYPE_CD }
) ON CONFLICT (OBJID) DO
UPDATE
SET
PO_CLIENT_ID = #{PO_CLIENT_ID},
PURCHASE_ORDER_NO = #{PURCHASE_ORDER_NO},
PARTNER_OBJID = #{PARTNER_OBJID},
DELIVERY_DATE = #{DELIVERY_DATE},
DELIVERY_PLACE = #{DELIVERY_PLACE},
EFFECTIVE_DATE = #{EFFECTIVE_DATE},
PAYMENT_TERMS = #{PAYMENT_TERMS},
REMARK = #{REMARK},
WRITER = #{WRITER},
STATUS = #{STATUS},
SALES_MNG_USER_ID = #{SALES_MNG_USER_ID}
,TITLE = #{TITLE}
,PURCHASE_DATE = #{PURCHASE_DATE}
,CONTRACT_MGMT_OBJID = #{CONTRACT_MGMT_OBJID}
,TYPE = #{TYPE }
,INSPECT_METHOD = #{INSPECT_METHOD }
,TOTAL_PRICE_TXT = #{TOTAL_PRICE_TXT }
,VAT_METHOD = #{VAT_METHOD }
,TOTAL_SUPPLY_UNIT_PRICE = #{TOTAL_SUPPLY_UNIT_PRICE}
,DISCOUNT_PRICE = #{DISCOUNT_PRICE }
,TOTAL_PRICE = #{TOTAL_PRICE }
,NEGO_RATE = #{NEGO_RATE }
,SUPPLY_BUS_NO = #{SUPPLY_BUS_NO }
,SUPPLY_USER_NAME = #{SUPPLY_USER_NAME }
,SUPPLY_USER_HP = #{SUPPLY_USER_HP }
,SUPPLY_USER_TEL = #{SUPPLY_USER_TEL }
,SUPPLY_USER_FAX = #{SUPPLY_USER_FAX }
,SUPPLY_USER_EMAIL = #{SUPPLY_USER_EMAIL }
,SUPPLY_ADDR = #{SUPPLY_ADDR }
,UNIT_CODE = #{UNIT_CODE }
,BOM_REPORT_OBJID = #{BOM_REPORT_OBJID }
,ORDER_TYPE_CD = #{ORDER_TYPE_CD }
</update>
<select id="grtPartnerObjidBySalesRequestObjid" parameterType="map" resultType="map">
SELECT
COALESCE(NULLIF(VENDOR_PM, ''), PARTNER_OBJID) AS PARTNER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN SALES_REQUEST_MASTER SRM ON SRP.SALES_REQUEST_MASTER_OBJID = SRM.OBJID
WHERE SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND (VENDOR_PM IS NOT NULL AND VENDOR_PM != '' OR PARTNER_OBJID IS NOT NULL AND PARTNER_OBJID != '')
GROUP BY COALESCE(NULLIF(VENDOR_PM, ''), PARTNER_OBJID)
</select>
<!-- 품의서용 공급업체 조회 (VENDOR_PM 사용) -->
<select id="getVendorListByProposalObjid" parameterType="map" resultType="map">
SELECT
VENDOR_PM as PARTNER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN SALES_REQUEST_MASTER SRM ON SRP.SALES_REQUEST_MASTER_OBJID = SRM.OBJID
WHERE SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND VENDOR_PM IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM PURCHASE_ORDER_MASTER AS P WHERE P.SALES_REQUEST_OBJID = SRM.OBJID AND P.PARTNER_OBJID = SRP.VENDOR_PM)
GROUP BY VENDOR_PM
</select>
<!-- 품의서의 공급업체별 품목 조회 (VENDOR_PM 기준) -->
<select id="getProposalPartsByVendor" parameterType="map" resultType="map">
SELECT
SRP.OBJID,
SRP.PART_OBJID,
SRP.QTY,
COALESCE(SRP.PO_QTY, SRP.QTY::NUMERIC, 0) AS ORDER_QTY, -- 발주수량 (PO_QTY 우선, 없으면 QTY)
SRP.UNIT_PRICE AS PARTNER_PRICE,
SRP.TOTAL_PRICE,
SRP.VENDOR_PM AS PARTNER_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.SPEC,
PM.UNIT,
PM.MAKER
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = SRP.PART_OBJID
WHERE
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND SRP.VENDOR_PM = #{PARTNER_OBJID}
</select>
<!-- 구매요청서의 공급업체별 품목 조회 (PARTNER_OBJID 기준) -->
<select id="getSalesRequestPartsByVendor" parameterType="map" resultType="map">
SELECT
SRP.OBJID,
SRP.PART_OBJID,
SRP.QTY,
SRP.UNIT_PRICE AS PARTNER_PRICE,
SRP.TOTAL_PRICE,
SRP.PARTNER_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.SPEC,
PM.UNIT,
PM.MAKER
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = SRP.PART_OBJID
WHERE
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND SRP.PARTNER_OBJID = #{PARTNER_OBJID}
</select>
<update id="mergePurchaseOrderMasterPrice" parameterType="map">
INSERT INTO PURCHASE_ORDER_MASTER
(
OBJID,
PO_CLIENT_ID,
PURCHASE_ORDER_NO,
CATEGORY_CD,
PRODUCT_GROUP,
PRODUCT,
PRODUCT_CODE,
MY_COMPANY_OBJID,
PARTNER_OBJID,
DELIVERY_DATE,
DELIVERY_PLACE,
EFFECTIVE_DATE,
PAYMENT_TERMS,
REMARK,
WRITER,
REGDATE,
STATUS,
SALES_REQUEST_OBJID,
SALES_MNG_USER_ID
,TITLE
,PURCHASE_DATE
,CONTRACT_MGMT_OBJID
,TYPE
,INSPECT_METHOD
,TOTAL_PRICE_TXT
,VAT_METHOD
,TOTAL_SUPPLY_UNIT_PRICE
,DISCOUNT_PRICE
,TOTAL_PRICE
,NEGO_RATE
,SUPPLY_BUS_NO
,SUPPLY_USER_NAME
,SUPPLY_USER_HP
,SUPPLY_USER_TEL
,SUPPLY_USER_FAX
,SUPPLY_USER_EMAIL
,SUPPLY_ADDR
,UNIT_CODE
,BOM_REPORT_OBJID
,ORDER_TYPE_CD
)
VALUES
(
#{OBJID},
#{PO_CLIENT_ID},
(SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
#{CATEGORY_CD},
#{PRODUCT_GROUP},
#{PRODUCT},
#{PRODUCT_CODE},
#{MY_COMPANY_OBJID},
#{PARTNER_OBJID},
#{DELIVERY_DATE},
#{DELIVERY_PLACE},
#{EFFECTIVE_DATE},
#{PAYMENT_TERMS},
#{REMARK},
#{WRITER},
NOW(),
#{STATUS},
#{SALES_REQUEST_OBJID},
#{SALES_MNG_USER_ID}
,#{TITLE}
,#{PURCHASE_DATE}
,#{CONTRACT_MGMT_OBJID}
,#{TYPE }
,#{INSPECT_METHOD }
,#{TOTAL_PRICE_TXT }
,#{VAT_METHOD }
,#{TOTAL_SUPPLY_UNIT_PRICE}
,#{DISCOUNT_PRICE }
,#{TOTAL_PRICE }
,#{NEGO_RATE }
,#{SUPPLY_BUS_NO }
,#{SUPPLY_USER_NAME }
,#{SUPPLY_USER_HP }
,#{SUPPLY_USER_TEL }
,#{SUPPLY_USER_FAX }
,#{SUPPLY_USER_EMAIL }
,#{SUPPLY_ADDR }
,#{UNIT_CODE }
,#{BOM_REPORT_OBJID }
,#{ORDER_TYPE_CD }
) ON CONFLICT (OBJID) DO
UPDATE
SET
TOTAL_PRICE_TXT = #{TOTAL_PRICE_TXT }
,TOTAL_SUPPLY_UNIT_PRICE = #{TOTAL_SUPPLY_UNIT_PRICE}
,TOTAL_SUPPLY_PRICE = #{TOTAL_SUPPLY_PRICE}
,TOTAL_REAL_SUPPLY_PRICE = #{TOTAL_REAL_SUPPLY_PRICE}
,DISCOUNT_PRICE = #{DISCOUNT_PRICE }
,TOTAL_PRICE = #{TOTAL_PRICE }
,NEGO_RATE = #{NEGO_RATE }
</update>
<update id="updatePurchaseOrderMasterPrice" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET
TOTAL_PRICE_TXT = #{TOTAL_PRICE_TXT }
,TOTAL_SUPPLY_PRICE = #{TOTAL_SUPPLY_PRICE }
,TOTAL_SUPPLY_UNIT_PRICE = #{TOTAL_SUPPLY_UNIT_PRICE}
,TOTAL_PRICE = TOTAL_SUPPLY_PRICE::NUMERIC - DISCOUNT_PRICE::NUMERIC
,NEGO_RATE = (case when TOTAL_SUPPLY_PRICE = 0 then 0 else ROUND(DISCOUNT_PRICE/TOTAL_SUPPLY_PRICE, 1) end)
<!--
,DISCOUNT_PRICE = #{DISCOUNT_PRICE }
-->
WHERE OBJID = #{OBJID}
</update>
<update id="updatePurchaseOrderMasterRealPrice" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET
TOTAL_REAL_SUPPLY_PRICE = #{TOTAL_REAL_SUPPLY_PRICE}
WHERE OBJID = #{OBJID} OR MULTI_MASTER_OBJID = #{OBJID}
</update>
<update id="updatePurchaseOrderPartPrice" parameterType="map">
UPDATE PURCHASE_ORDER_PART SET
PARTNER_PRICE = #{PARTNER_PRICE}
,PRICE1 = #{PRICE1}
,PRICE2 = #{PRICE2}
,PRICE3 = #{PRICE3}
,PRICE4 = #{PRICE4}
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
AND OBJID = #{OBJID}
</update>
<update id="updatePurchaseOrderPartSumUnitPrice" parameterType="map">
UPDATE PURCHASE_ORDER_PART P SET
<!--
PARTNER_PRICE = #{PARTNER_PRICE}
,PRICE1 = #{PRICE1}
,PRICE2 = #{PRICE2}
,PRICE3 = #{PRICE3}
,PRICE4 = #{PRICE4}
-->
SUPPLY_UNIT_PRICE = ORDER_QTY::numeric * (PARTNER_PRICE::numeric + PRICE1::numeric + PRICE2::numeric + PRICE3::numeric + PRICE4::numeric)
,SUPPLY_UNIT_VAT_PRICE = ORDER_QTY::numeric * (PARTNER_PRICE::numeric + PRICE1::numeric + PRICE2::numeric + PRICE3::numeric + PRICE4::numeric) * 0.1
,SUPPLY_UNIT_VAT_SUM_PRICE = ORDER_QTY::numeric * (PARTNER_PRICE::numeric + PRICE1::numeric + PRICE2::numeric + PRICE3::numeric + PRICE4::numeric)
+ ORDER_QTY::numeric * (PARTNER_PRICE::numeric + PRICE1::numeric + PRICE2::numeric + PRICE3::numeric + PRICE4::numeric) * 0.1
,REAL_SUPPLY_PRICE = (SELECT
SUM(ORDER_QTY::numeric) * (SUM(PARTNER_PRICE::numeric) + SUM(PRICE1::numeric) + SUM(PRICE2::numeric) + SUM(PRICE3::numeric) + SUM(PRICE4::numeric))
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
WHERE (POM.OBJID = #{PURCHASE_ORDER_MASTER_OBJID } OR POM.MULTI_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID })
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POP.OBJID = P.OBJID
)
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
<!--
AND OBJID = #{OBJID}
-->
</update>
<update id="updatePurchaseOrderMasterPriceByPart" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER SET
TOTAL_SUPPLY_UNIT_PRICE = T.SUPPLY_UNIT_PRICE + T.SUPPLY_UNIT_VAT_PRICE
,TOTAL_SUPPLY_PRICE = T.SUPPLY_UNIT_PRICE
,TOTAL_PRICE = (CASE WHEN T.DISCOUNT_PRICE != 0 THEN T.SUPPLY_UNIT_PRICE - T.DISCOUNT_PRICE ELSE NULL END)
,NEGO_RATE = (CASE WHEN T.DISCOUNT_PRICE != 0 THEN ROUND( ((1-((T.SUPPLY_UNIT_PRICE - T.DISCOUNT_PRICE)/T.SUPPLY_UNIT_PRICE))*100), 1) ELSE NULL END)
<!--
,TOTAL_REAL_SUPPLY_PRICE = T.TOTAL_REAL_SUPPLY_PRICE * REAL_ORDER_QTY
,TOTAL_PRICE = T.SUPPLY_UNIT_PRICE
,NEGO_RATE = (CASE WHEN SUPPLY_UNIT_PRICE::NUMERIC = 0 THEN 0 ELSE ROUND(T.DISCOUNT_PRICE::NUMERIC/SUPPLY_UNIT_PRICE::NUMERIC, 0) END)
-->
,TOTAL_PRICE_TXT = NUM_TO_KOR((T.SUPPLY_UNIT_PRICE + T.SUPPLY_UNIT_VAT_PRICE)::varchar,'일금 ',' 원정 (₩ ') || trim(TO_CHAR((T.SUPPLY_UNIT_PRICE + T.SUPPLY_UNIT_VAT_PRICE), '999,999,999,999')) ||')'
<!--
((1-((vTP)/colSum1))*100).toFixed(1)
-->
FROM
(SELECT
<!--
SUM(SUPPLY_UNIT_PRICE::NUMERIC) + SUM(SUPPLY_UNIT_VAT_PRICE::NUMERIC) SUPPLY_UNIT_PRICE
-->
SUM(SUPPLY_UNIT_PRICE::NUMERIC) SUPPLY_UNIT_PRICE
,SUM(TRUNC(SUPPLY_UNIT_VAT_PRICE::NUMERIC, 0)) SUPPLY_UNIT_VAT_PRICE
,SUM(TRUNC(SUPPLY_UNIT_VAT_SUM_PRICE::NUMERIC, 0)) SUPPLY_UNIT_VAT_SUM_PRICE
,SUM(TRUNC(REAL_SUPPLY_PRICE::NUMERIC, 0)) REAL_SUPPLY_PRICE
,MAX(NVL(REAL_ORDER_QTY, '0')::NUMERIC) REAL_ORDER_QTY
,(CASE WHEN COALESCE(DISCOUNT_PRICE, '') = '' THEN '0'
ELSE DISCOUNT_PRICE END)::NUMERIC AS DISCOUNT_PRICE
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
GROUP BY POM.OBJID
) T
WHERE OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
<!--
(SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART POP WHERE OBJID = '1687975702')
WHERE OBJID = (SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART POP WHERE OBJID = #{PURCHASE_ORDER_PART_OBJID })
-->
</update>
<!-- 매입마감 처리: PURCHASE_CLOSE_DATE를 현재일자로 업데이트 -->
<update id="updatePurchaseCloseDate" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET PURCHASE_CLOSE_DATE = TO_CHAR(NOW(), 'YYYY-MM-DD')
WHERE OBJID = #{OBJID}
</update>
<update id="updatePurchaseOrderMasterPriceAll" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER SET
TOTAL_PRICE_TXT_ALL = NUM_TO_KOR((T.REAL_SUPPLY_PRICE_VAT)::varchar,'일금 ',' 원정 (₩ ') || TRIM(TO_CHAR((T.REAL_SUPPLY_PRICE_VAT), '999,999,999,999')) ||')'
,TOTAL_REAL_SUPPLY_PRICE = T.REAL_SUPPLY_PRICE
,TOTAL_PRICE_ALL = (CASE WHEN T.DISCOUNT_PRICE != 0 THEN T.REAL_SUPPLY_PRICE - T.DISCOUNT_PRICE ELSE NULL END)
FROM (SELECT
SUM(REAL_SUPPLY_PRICE::numeric) REAL_SUPPLY_PRICE
,SUM(REAL_SUPPLY_PRICE::numeric) + ROUND(SUM(REAL_SUPPLY_PRICE::numeric)*0.1) REAL_SUPPLY_PRICE_VAT
,MAX(NVL(DISCOUNT_PRICE, '0')::NUMERIC) DISCOUNT_PRICE
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
WHERE POM.OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
) T
WHERE OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
OR MULTI_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
</update>
<update id="mergePurchaseOrderPartInfo" parameterType="map">
INSERT INTO PURCHASE_ORDER_PART
(
OBJID,
PURCHASE_ORDER_MASTER_OBJID,
PART_OBJID,
BOM_QTY,
QTY,
ORDER_QTY,
PARTNER_PRICE,
REMARK,
WRITER,
REGDATE,
STATUS
,PART_NAME
,PART_NO
,DO_NO
,THICKNESS
,WIDTH
,HEIGHT
,OUT_DIAMETER
,LENGTH
,IN_DIAMETER
,INVEN_TOTAL_QTY
,LD_PART_OBJID
,SPEC
,MAKER
,UNIT
,SUPPLY_UNIT_PRICE
,PRICE1
,PRICE2
,PRICE3
,PRICE4
,SUPPLY_UNIT_VAT_PRICE
,SUPPLY_UNIT_VAT_SUM_PRICE
,TOTAL_ORDER_QTY
,STOCK_QTY
,REAL_ORDER_QTY
,REAL_SUPPLY_PRICE
,PART_DELIVERY_PLACE
,PRODUCT_NAME
,WORK_ORDER_NO
,DELIVERY_REQUEST_DATE
)
VALUES
(
#{OBJID},
#{PURCHASE_ORDER_MASTER_OBJID},
#{PART_OBJID},
REPLACE(#{BOM_QTY}::VARCHAR, ',', ''),
REPLACE(#{QTY}::VARCHAR, ',', ''),
REPLACE(#{ORDER_QTY}::VARCHAR, ',', ''),
#{PARTNER_PRICE},
#{REMARK},
#{WRITER},
NOW(),
#{STATUS}
,#{PART_NAME }
,#{PART_NO }
,#{DO_NO }
,#{THICKNESS }
,#{WIDTH }
,#{HEIGHT }
,#{OUT_DIAMETER }
,#{LENGTH }
,#{IN_DIAMETER }
,#{INVEN_TOTAL_QTY}
,#{LD_PART_OBJID }
,#{SPEC }
,#{MAKER }
,#{UNIT }
,REPLACE(#{SUPPLY_UNIT_PRICE} ::VARCHAR, ',', '')
,REPLACE(#{PRICE1} ::VARCHAR, ',', '')
,REPLACE(#{PRICE2} ::VARCHAR, ',', '')
,REPLACE(#{PRICE3} ::VARCHAR, ',', '')
,REPLACE(#{PRICE4} ::VARCHAR, ',', '')
,REPLACE(#{SUPPLY_UNIT_VAT_PRICE} ::VARCHAR, ',', '')
,REPLACE(#{SUPPLY_UNIT_VAT_SUM_PRICE}::VARCHAR, ',', '')
,REPLACE(#{TOTAL_ORDER_QTY} ::VARCHAR, ',', '')
,REPLACE(#{STOCK_QTY} ::VARCHAR, ',', '')
,REPLACE(#{REAL_ORDER_QTY} ::VARCHAR, ',', '')
,REPLACE(#{REAL_SUPPLY_PRICE} ::VARCHAR, ',', '')
,#{PART_DELIVERY_PLACE}
,#{PRODUCT_NAME}
,#{WORK_ORDER_NO}
,#{DELIVERY_REQUEST_DATE}
) ON CONFLICT (OBJID) DO
UPDATE
SET
ORDER_QTY = REPLACE(#{ORDER_QTY} ::VARCHAR, ',', '')
,PARTNER_PRICE = REPLACE(#{PARTNER_PRICE} ::VARCHAR, ',', '')
,REMARK = #{REMARK}
<!--
WRITER = #{WRITER},
-->
,STATUS = #{STATUS}
,MODIFIER = #{WRITER }
,UPDATE_DATE = NOW()
,LD_PART_OBJID = #{LD_PART_OBJID }
,SPEC = #{SPEC }
,MAKER = #{MAKER }
,UNIT = #{UNIT }
,SUPPLY_UNIT_PRICE = REPLACE(#{SUPPLY_UNIT_PRICE}, ',', '')
,PRICE1 = REPLACE(#{PRICE1}::VARCHAR, ',', '')
,PRICE2 = REPLACE(#{PRICE2}::VARCHAR, ',', '')
,PRICE3 = REPLACE(#{PRICE3}::VARCHAR, ',', '')
,PRICE4 = REPLACE(#{PRICE4}::VARCHAR, ',', '')
,SUPPLY_UNIT_VAT_PRICE = REPLACE(#{SUPPLY_UNIT_VAT_PRICE} ::VARCHAR, ',', '')
,SUPPLY_UNIT_VAT_SUM_PRICE = REPLACE(#{SUPPLY_UNIT_VAT_SUM_PRICE}::VARCHAR, ',', '')
,TOTAL_ORDER_QTY = REPLACE(#{TOTAL_ORDER_QTY} ::VARCHAR, ',', '')
,STOCK_QTY = REPLACE(#{STOCK_QTY} ::VARCHAR, ',', '')
,REAL_ORDER_QTY = REPLACE(#{REAL_ORDER_QTY} ::VARCHAR, ',', '')
,REAL_SUPPLY_PRICE = REPLACE(#{REAL_SUPPLY_PRICE} ::VARCHAR, ',', '')
,PART_DELIVERY_PLACE = #{PART_DELIVERY_PLACE}
,PRODUCT_NAME = #{PRODUCT_NAME}
,WORK_ORDER_NO = #{WORK_ORDER_NO}
,DELIVERY_REQUEST_DATE = #{DELIVERY_REQUEST_DATE}
</update>
<select id="getMyCompanyInfo" parameterType="map" resultType="map">
SELECT
SM.OBJID AS MY_COMPANY_OBJID,
SM.SUPPLY_NAME AS MY_COMPANY_NAME,
SM.REG_NO AS MY_COMPANY_REG_NO,
SM.CHARGE_USER_NAME AS MY_COMPANY_CHARGE_USER_NAME,
SM.SUPPLY_ADDRESS AS MY_COMPANY_SUPPLY_ADDRESS,
SM.SUPPLY_BUSNAME AS MY_COMPANY_BUS_NAME,
SM.SUPPLY_STOCKNAME AS MY_COMPANY_SUPPLY_STOCKNAME,
SM.SUPPLY_TEL_NO AS MY_COMPANY_SUPPLY_TEL_NO,
SM.SUPPLY_FAX_NO AS MY_COMPANY_SUPPLY_FAX_NO
FROM
SUPPLY_MNG SM
WHERE OBJID::VARCHAR = #{MY_COMPANY_OBJID}::VARCHAR
</select>
<select id="getPurchaseOrderMasterInfo" parameterType="map" resultType="map">
SELECT
P.*
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE P.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
FROM(
SELECT
POM.OBJID,
POM.PURCHASE_ORDER_NO,
POM.CATEGORY_CD,
POM.PRODUCT_GROUP,
POM.PRODUCT,
POM.PRODUCT_CODE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.CATEGORY_CD) AS CATEGORY_CD_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PRODUCT_GROUP) AS PRODUCT_GROUP_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PRODUCT) AS PRODUCT_NAME,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID::VARCHAR = POM.PRODUCT_CODE::VARCHAR) AS PRODUCT_CODE_NAME,
POM.SALES_REQUEST_OBJID,
POM.MY_COMPANY_OBJID,
POM.PO_CLIENT_ID,
SM1.SUPPLY_NAME AS SALES_NAME,
SM1.BUS_REG_NO AS SALES_REG_NO,
SM1.CHARGE_USER_NAME AS SALES_CHARGE_USER_NAME,
SM1.SUPPLY_ADDRESS AS SALES_SUPPLY_ADDRESS,
SM1.SUPPLY_BUSNAME AS SALES_BUS_NAME,
SM1.SUPPLY_STOCKNAME AS SALES_SUPPLY_STOCKNAME,
SM1.SUPPLY_TEL_NO AS SALES_SUPPLY_TEL_NO,
SM1.SUPPLY_FAX_NO AS SALES_SUPPLY_FAX_NO,
SM1.OFFICE_NO AS SALES_SUPPLY_OFFICE_NO,
SM1.EMAIL AS SALES_EMAIL,
SM.SUPPLY_NAME AS MY_COMPANY_NAME,
SM.REG_NO AS MY_COMPANY_REG_NO,
SM.CHARGE_USER_NAME AS MY_COMPANY_CHARGE_USER_NAME,
SM.SUPPLY_ADDRESS AS MY_COMPANY_SUPPLY_ADDRESS,
SM.SUPPLY_BUSNAME AS MY_COMPANY_BUS_NAME,
SM.SUPPLY_STOCKNAME AS MY_COMPANY_SUPPLY_STOCKNAME,
SM.SUPPLY_TEL_NO AS MY_COMPANY_SUPPLY_TEL_NO,
SM.SUPPLY_FAX_NO AS MY_COMPANY_SUPPLY_FAX_NO,
SM.OFFICE_NO AS MY_COMPANY_SUPPLY_OFFICE_NO,
POM.PARTNER_OBJID,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
(
SELECT
SUM(ORDER_QTY::numeric)
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS TOTAL_ORDER_QTY,
POM.TOTAL_PRICE AS TOTAL_PRICE,
POM.DELIVERY_DATE,
POM.DELIVERY_PLACE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.DELIVERY_PLACE) AS DELIVERY_PLACE_NAME,
POM.EFFECTIVE_DATE,
POM.PAYMENT_TERMS,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PAYMENT_TERMS) AS PAYMENT_TERMS_NAME,
POM.REMARK,
POM.PURCHASE_DATE,
POM.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = POM.WRITER) AS WRITER_NAME,
(SELECT EMAIL FROM USER_INFO WHERE USER_ID = POM.WRITER) AS WRITER_EMAIL,
POM.SALES_MNG_USER_ID,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME,
(SELECT EMAIL FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_EMAIL,
(SELECT CELL_PHONE FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_CELL_PHONE,
POM.REGDATE,
TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
POM.STATUS,
CASE POM.STATUS
WHEN 'create' THEN '등록'
WHEN 'approvalRequest' THEN '결재중'
WHEN 'approvalComplete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END STATUS_TITLE,
A.APPR_STATUS,
A.ROUTE_OBJID,
A.APPROVAL_OBJID
,POM.TITLE
,POM.CONTRACT_MGMT_OBJID::VARCHAR
,(SELECT CONTRACT_NO FROM PROJECT_MGMT CM WHERE CM.OBJID = POM.CONTRACT_MGMT_OBJID) AS CONTRACT_NO
,(SELECT PROJECT_NO FROM PROJECT_MGMT CM WHERE CM.OBJID = POM.CONTRACT_MGMT_OBJID) AS PROJECT_NO
,(SELECT FACILITY_TYPE||' ('|| CUSTOMER_PROJECT_NAME ||')' FROM PROJECT_MGMT CM WHERE CM.OBJID = POM.CONTRACT_MGMT_OBJID) AS CONTRACT_MGNT_NAME
,POM.TYPE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.INSPECT_METHOD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.INSPECT_METHOD) AS INSPECT_METHOD_NAME
,POM.TOTAL_PRICE_TXT
,POM.TOTAL_PRICE_TXT_ALL
,POM.VAT_METHOD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.VAT_METHOD) AS VAT_METHOD_NAME
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.TOTAL_SUPPLY_PRICE
,POM.TOTAL_REAL_SUPPLY_PRICE
,POM.DISCOUNT_PRICE
,POM.NEGO_RATE
,POM.DISCOUNT_PRICE_ALL
,POM.TOTAL_PRICE_ALL
,POM.SUPPLY_BUS_NO
,POM.SUPPLY_USER_NAME
,POM.SUPPLY_USER_HP
,POM.SUPPLY_USER_TEL
,POM.SUPPLY_USER_FAX
,POM.SUPPLY_USER_EMAIL
,POM.SUPPLY_ADDR
,POM.UNIT_CODE
<!-- ,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.unit_code) AS UNIT_NAME -->
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.bom_report_objid
,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.MULTI_YN
,POM.MULTI_MASTER_YN
<!--
,CASE WHEN POM.MULTI_MASTER_YN IN ('Y', 'N') THEN 'Y' ELSE 'N' END MULTI_YN
-->
,POM.PURCHASE_ORDER_NO_ORG
,(SELECT PURCHASE_ORDER_NO FROM PURCHASE_ORDER_MASTER SPOM WHERE SPOM.OBJID = POM.PURCHASE_ORDER_NO_ORG) PURCHASE_ORDER_NO_ORG_NO
,POM.SALES_STATUS
,POM.RECEPTION_STATUS
-- 담당자1 정보 (일반발주서용)
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS MANAGER_NAME
,(SELECT POSITION_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS MANAGER_POSITION
,(SELECT CELL_PHONE FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS MANAGER_PHONE
,(SELECT EMAIL FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS MANAGER_EMAIL
-- 담당자2 정보 (일반발주서용)
,POM.SALES_MNG_USER_ID2
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID2) AS MANAGER_NAME2
,(SELECT POSITION_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID2) AS MANAGER_POSITION2
,(SELECT CELL_PHONE FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID2) AS MANAGER_PHONE2
,(SELECT EMAIL FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID2) AS MANAGER_EMAIL2
-- 요청사항
,POM.REQUEST_CONTENT
-- 양식 타입 (general/outsourcing)
,COALESCE(POM.FORM_TYPE, 'general') AS FORM_TYPE
FROM
PURCHASE_ORDER_MASTER POM
LEFT OUTER JOIN ADMIN_SUPPLY_MNG SM1
ON POM.PO_CLIENT_ID::VARCHAR = SM1.OBJID::VARCHAR
LEFT OUTER JOIN ADMIN_SUPPLY_MNG SM
ON POM.PARTNER_OBJID::VARCHAR = SM.OBJID::VARCHAR
<!-- ON POM.MY_COMPANY_OBJID::VARCHAR = SM.OBJID::VARCHAR -->
LEFT OUTER JOIN(
SELECT
B.OBJID AS ROUTE_OBJID,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END APPR_STATUS,
A.OBJID AS APPROVAL_OBJID,
A.TARGET_OBJID,
B.ROUTE_SEQ
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')
) A ON POM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
WHERE 1=1
AND POM.OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
) P
</select>
<select id="getPurchaseOrderMasterInfoInvoice" parameterType="map" resultType="map">
SELECT
P.*
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE P.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
FROM(
SELECT
POM.OBJID,
POM.PURCHASE_ORDER_NO,
POM.CATEGORY_CD,
POM.PRODUCT_GROUP,
POM.PRODUCT,
POM.PRODUCT_CODE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.CATEGORY_CD) AS CATEGORY_CD_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PRODUCT_GROUP) AS PRODUCT_GROUP_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PRODUCT) AS PRODUCT_NAME,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID::VARCHAR = POM.PRODUCT_CODE::VARCHAR) AS PRODUCT_CODE_NAME,
POM.SALES_REQUEST_OBJID,
POM.MY_COMPANY_OBJID,
SM.SUPPLY_NAME AS MY_COMPANY_NAME,
SM.REG_NO AS MY_COMPANY_REG_NO,
SM.CHARGE_USER_NAME AS MY_COMPANY_CHARGE_USER_NAME,
SM.SUPPLY_ADDRESS AS MY_COMPANY_SUPPLY_ADDRESS,
SM.SUPPLY_BUSNAME AS MY_COMPANY_BUS_NAME,
SM.SUPPLY_STOCKNAME AS MY_COMPANY_SUPPLY_STOCKNAME,
SM.SUPPLY_TEL_NO AS MY_COMPANY_SUPPLY_TEL_NO,
SM.SUPPLY_FAX_NO AS MY_COMPANY_SUPPLY_FAX_NO,
SM.OFFICE_NO AS MY_COMPANY_SUPPLY_OFFICE_NO,
POM.PARTNER_OBJID,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
(
SELECT
SUM(ORDER_QTY::numeric)
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID= POM.OBJID
) AS TOTAL_ORDER_QTY,
POM.TOTAL_PRICE AS TOTAL_PRICE,
POM.DELIVERY_DATE,
POM.DELIVERY_PLACE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.DELIVERY_PLACE) AS DELIVERY_PLACE_NAME,
POM.EFFECTIVE_DATE,
POM.PAYMENT_TERMS,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PAYMENT_TERMS) AS PAYMENT_TERMS_NAME,
POM.REMARK,
POM.PURCHASE_DATE,
POM.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = POM.WRITER) AS WRITER_NAME,
(SELECT EMAIL FROM USER_INFO WHERE USER_ID = POM.WRITER) AS WRITER_EMAIL,
POM.SALES_MNG_USER_ID,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME,
(SELECT EMAIL FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_EMAIL,
(SELECT CELL_PHONE FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_CELL_PHONE,
POM.REGDATE,
TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
POM.STATUS,
CASE POM.STATUS
WHEN 'create' THEN '등록'
WHEN 'approvalRequest' THEN '결재중'
WHEN 'approvalComplete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END STATUS_TITLE,
A.APPR_STATUS,
A.ROUTE_OBJID,
A.APPROVAL_OBJID
,POM.TITLE
,POM.CONTRACT_MGMT_OBJID::VARCHAR
,(SELECT CONTRACT_NO FROM PROJECT_MGMT CM WHERE CM.OBJID = POM.CONTRACT_MGMT_OBJID) AS CONTRACT_NO
,(SELECT PROJECT_NO FROM PROJECT_MGMT CM WHERE CM.OBJID = POM.CONTRACT_MGMT_OBJID) AS PROJECT_NO
,(SELECT FACILITY_TYPE||' ('|| CUSTOMER_PROJECT_NAME ||')' FROM PROJECT_MGMT CM WHERE CM.OBJID = POM.CONTRACT_MGMT_OBJID) AS CONTRACT_MGNT_NAME
,POM.type
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.type) AS type_name
,POM.inspect_method
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.inspect_method) AS inspect_method_name
,POM.total_price_txt
,POM.vat_method
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.vat_method) AS vat_method_name
,CASE WHEN POM.TOTAL_PRICE is null or POM.TOTAL_PRICE = '' THEN POM.TOTAL_SUPPLY_UNIT_PRICE
ELSE POM.TOTAL_PRICE
END TOTAL_SUPPLY_UNIT_PRICE
<!-- ,POM.total_supply_unit_price -->
,POM.total_supply_price
,POM.total_real_supply_price
,COALESCE(POM.TOTAL_REAL_SUPPLY_PRICE::numeric,0) * 1.1 as TOTAL_REAL_SUPPLY_VAT_PRICE
,POM.DISCOUNT_PRICE
,POM.DISCOUNT_PRICE_ALL
,POM.nego_rate
,POM.TOTAL_PRICE_ALL
,POM.supply_bus_no
,POM.supply_user_name
,POM.supply_user_hp
,POM.supply_user_tel
,POM.supply_user_fax
,POM.supply_user_email
,POM.supply_addr
,POM.unit_code
<!-- ,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.unit_code) AS UNIT_NAME -->
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.bom_report_objid
,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.MULTI_YN
,POM.MULTI_MASTER_YN
<!--
,CASE WHEN POM.MULTI_MASTER_YN IN ('Y', 'N') THEN 'Y' ELSE 'N' END MULTI_YN
-->
,POM.PURCHASE_ORDER_NO_ORG
,POM.SALES_STATUS
,POM.RECEPTION_STATUS
,POM.NEGO_RATE
,POM.TOTAL_PRICE_ALL
<if test="GROUPSEQ != null and GROUPSEQ !='' or checkArr != null and checkArr !='' ">
,IM.OBJID AS INVOICE_OBJID
,IM.STATUS INVOICE_STATUS
,IM.REMARK AS INVOICE_REMARK
,IM.OUTSTANDING_BALANCE
,IM.PERCENTAGE
,IM.REQUEST_AMOUNT
,IM.TOTAL_SUM
,IM.DEPOSIT_AMOUNT
,IM.TOTAL_OUTSTANDING_BALANCE
,IM.RECEIVE_USER
,IM.ISSUANCE_ID
,IM.DISCOUNT_PERCENTAGE
,IM.INV_DISCOUNT_PRICE
,IM.NEGO_PRICE_ALL
,IM.NEGO_VAT_PRICE_ALL
<if test="GROUPSEQ != null and GROUPSEQ !=''">
,(SELECT SIGN FROM INVOICE_MGMT T, INBOXTASK I WHERE T.PARENT_OBJID = POM.OBJID AND T.GROUP_SEQ = #{GROUPSEQ} AND I.TARGET_OBJID::varchar = T.OBJID LIMIT 1) SIGN
,(SELECT SIGN_WIDTH FROM INVOICE_MGMT T, INBOXTASK I WHERE T.PARENT_OBJID = POM.OBJID AND T.GROUP_SEQ = #{GROUPSEQ} AND I.TARGET_OBJID::varchar = T.OBJID LIMIT 1) SIGN_WIDTH
,(SELECT SIGN_HEIGHT FROM INVOICE_MGMT T, INBOXTASK I WHERE T.PARENT_OBJID = POM.OBJID AND T.GROUP_SEQ = #{GROUPSEQ} AND I.TARGET_OBJID::varchar = T.OBJID LIMIT 1) SIGN_HEIGHT
</if>
,(SELECT SUM(NVL(INV_DISCOUNT_PRICE, '0')::NUMERIC) FROM INVOICE_MGMT T
WHERE 1=1
<if test="GROUPSEQ != null and GROUPSEQ !=''">
AND T.PARENT_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</if>
<if test="checkArr != null and checkArr !=''">
AND T.PARENT_OBJID = #{checkArr}
</if>
) INV_DISCOUNT_PRICE_SUM
,(SELECT SUM(NVL(INV_DISCOUNT_PRICE, '0')::NUMERIC) FROM INVOICE_MGMT T
WHERE 1=1
<if test="GROUPSEQ != null and GROUPSEQ !=''">
AND T.PARENT_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
AND T.GROUP_SEQ = #{GROUPSEQ}
</if>
<if test="checkArr != null and checkArr !=''">
AND T.PARENT_OBJID = #{checkArr}
</if>
) INV_DISCOUNT_PRICE_SEQ
</if>
,(SELECT
SUM(COALESCE(REQUEST_AMOUNT,'0')::numeric)
FROM
INVOICE_MGMT IM
LEFT JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,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))
WHERE APPR_STATUS = 'complete' AND IM.PARENT_OBJID = POM.OBJID GROUP BY PARENT_OBJID) AS REQUEST_AMOUNT_SUM
FROM
PURCHASE_ORDER_MASTER POM
LEFT OUTER JOIN ADMIN_SUPPLY_MNG SM
ON POM.PARTNER_OBJID::VARCHAR = SM.OBJID::VARCHAR
<!-- ON POM.MY_COMPANY_OBJID::VARCHAR = SM.OBJID::VARCHAR -->
LEFT OUTER JOIN(
SELECT
B.OBJID AS ROUTE_OBJID,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END APPR_STATUS,
A.OBJID AS APPROVAL_OBJID,
A.TARGET_OBJID,
B.ROUTE_SEQ
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')
) A ON POM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
<if test="GROUPSEQ != null and GROUPSEQ !=''">
LEFT OUTER JOIN INVOICE_MGMT IM
ON IM.PARENT_OBJID = POM.OBJID
AND IM.GROUP_SEQ = #{GROUPSEQ}
</if>
<if test="checkArr != null and checkArr !=''">
LEFT OUTER JOIN INVOICE_MGMT IM
ON IM.PARENT_OBJID = POM.OBJID
AND IM.OBJID = #{checkArr}
</if>
WHERE 1=1
<if test="GROUPSEQ != null and GROUPSEQ !=''">
AND POM.OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</if>
<if test="checkArr != null and checkArr !=''">
AND POM.OBJID = (SELECT PARENT_OBJID FROM INVOICE_MGMT WHERE OBJID = #{checkArr})
</if>
) P
</select>
<!-- 구매 BOM을 통한 구매 의뢰 시 저장된 Part 정보를 가져온다. -->
<select id="getPurchaseOrderTargetPartList" parameterType="map" resultType="map">
SELECT
P.*,
(ORDER_QTY::NUMERIC -(TOTAL_DELIVERY_QTY::NUMERIC - TOTAL_DEFECT_QTY::NUMERIC)) AS NON_ARRIVAL_QTY
FROM(
SELECT
ROW_NUMBER() OVER(ORDER BY PM.PART_NO, POP.REGDATE DESC) AS RNUM,
POM.PURCHASE_ORDER_NO,
POP.PART_NAME,
<!-- POP.PART_NO, -->
PM.MATERIAL,
POP.SPEC,
<!-- PM.PART_NO, -->
CASE WHEN POM.TYPE IN ('0001070','0001069') THEN PM.PART_NO ELSE POP.PART_NO END PART_NO,
PM.REVISION,
PM.PART_NAME||'('||PM.MATERIAL||','||PM.SPEC||')/'||PM.PART_NO||(CASE WHEN PM.REVISION IS NULL THEN '' ELSE PM.REVISION END) AS TARGET_TITLE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = pop.UNIT) as UNIT_TITLE,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
POP.ORDER_QTY,
POP.OBJID,
POP.PURCHASE_ORDER_MASTER_OBJID,
POP.PART_OBJID,
POP.WRITER,
POP.REGDATE,
POP.STATUS,
POP.REMARK,
POP.PARTNER_PRICE
,POP.PRICE1
,POP.PRICE2
,POP.PRICE3
,POP.maker
,pop.unit
,pop.supply_unit_price
,pop.SUPPLY_UNIT_VAT_PRICE
,pop.ld_part_objid
,(SELECT SUM(DH.DELIVERY_QTY::NUMERIC) FROM DELIVERY_HISTORY DH WHERE DH.PURCHASE_ORDER_PART_OBJID = POP.OBJID) AS TOTAL_DELIVERY_QTY
,(SELECT SUM(DH.DEFECT_QTY::NUMERIC) FROM DELIVERY_HISTORY DH WHERE DH.PURCHASE_ORDER_PART_OBJID = POP.OBJID) AS TOTAL_DEFECT_QTY
,(SELECT T.OBJID FROM DELIVERY_HISTORY T WHERE T.PURCHASE_ORDER_PART_OBJID = POP.OBJID AND DELIVERY_QTY::NUMERIC>0 ORDER BY T.REGDATE DESC LIMIT 1) AS DELIVERY_HISTORY_OBJID_LIMIT1
,(SELECT T.DELIVERY_PLAN_DATE FROM DELIVERY_HISTORY T WHERE T.PURCHASE_ORDER_PART_OBJID = POP.OBJID AND DELIVERY_QTY::NUMERIC>0 ORDER BY T.REGDATE DESC LIMIT 1) AS DELIVERY_PLAN_DATE
,(SELECT T.INSPECT_DATE FROM DELIVERY_HISTORY T WHERE T.PURCHASE_ORDER_PART_OBJID = POP.OBJID AND DELIVERY_QTY::NUMERIC>0 ORDER BY T.REGDATE DESC LIMIT 1) AS INSPECT_DATE
,(SELECT T.DEFECT_NOTE FROM DELIVERY_HISTORY T WHERE T.PURCHASE_ORDER_PART_OBJID = POP.OBJID AND DELIVERY_QTY::NUMERIC>0 ORDER BY T.REGDATE DESC LIMIT 1) AS DEFECT_NOTE
,CASE WHEN COALESCE((SELECT F.DOC_TYPE FROM DELIVERY_HISTORY T, ATTACH_FILE_INFO F WHERE F.TARGET_OBJID = T.OBJID AND DELIVERY_QTY::NUMERIC>0 AND DOC_TYPE='DELIVERY_INSPECT' AND UPPER(STATUS) = 'ACTIVE' ORDER BY T.REGDATE DESC LIMIT 1), '') != '' THEN 1
ELSE 0 END AS INSPECT_F_CNT
,(SELECT CODE_NAME FROM DELIVERY_HISTORY T, COMM_CODE C WHERE T.PURCHASE_ORDER_PART_OBJID = POP.OBJID AND DELIVERY_QTY::NUMERIC>0 AND CODE_ID = DELIVERY_PLACE_CD ORDER BY T.REGDATE DESC LIMIT 1) AS DELIVERY_PLACE_NAME
,(SELECT CODE_NAME FROM DELIVERY_HISTORY T, COMM_CODE C WHERE T.PURCHASE_ORDER_PART_OBJID = POP.OBJID AND DELIVERY_QTY::NUMERIC>0 AND CODE_ID = DEFECT_REASON ORDER BY T.REGDATE DESC LIMIT 1) AS DEFECT_REASON_NAME
,(SELECT CODE_NAME FROM DELIVERY_HISTORY T, COMM_CODE C WHERE T.PURCHASE_ORDER_PART_OBJID = POP.OBJID AND DELIVERY_QTY::NUMERIC>0 AND CODE_ID = DEFECT_RESP ORDER BY T.REGDATE DESC LIMIT 1) AS DEFECT_RESP_NAME
<!-- ,(SELECT MAX(DELIVERY_PLAN_DATE) FROM DELIVERY_HISTORY DH WHERE DH.PURCHASE_ORDER_PART_OBJID = POP.OBJID) AS DELIVERY_PLAN_DATE -->
,(SELECT MAX(DELIVERY_DATE) FROM DELIVERY_HISTORY DH WHERE DH.PURCHASE_ORDER_PART_OBJID = POP.OBJID) AS DELIVERY_DATE
,pom.delivery_date as pom_delivery_date
,HASHTEXT(REPLACE(GEN_RANDOM_UUID()::VARCHAR,'-',''))::VARCHAR AS DELIVERY_HISTORY_OBJID /*입고관리 objid*/
,DPP.OBJID DPP_OBJID
,COALESCE(DPP.PRICE , POP.PARTNER_PRICE) DPP_PRICE
,COALESCE(DPP.PRICE1 , POP.PRICE1) DPP_PRICE1
,COALESCE(DPP.PRICE2 , POP.PRICE2) DPP_PRICE2
,COALESCE(DPP.PRICE3 , POP.PRICE3) DPP_PRICE3
,COALESCE(DPP.PRICE_SUM, POP.SUPPLY_UNIT_PRICE) DPP_PRICE_SUM
FROM
PURCHASE_ORDER_MASTER POM
INNER JOIN PURCHASE_ORDER_PART POP
ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
<!--
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> PM
-->
LEFT OUTER JOIN PART_MNG PM
ON POP.PART_OBJID = PM.OBJID::TEXT
LEFT OUTER JOIN DELIVERY_PART_PRICE DPP
ON POP.OBJID = DPP.PURCHASE_ORDER_PART_OBJID
WHERE 1=1
<if test="PURCHASE_ORDER_MASTER_OBJID != null and PURCHASE_ORDER_MASTER_OBJID !=''">
AND POM.OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</if>
<if test="checkArr != null and checkArr !=''">
<![CDATA[ AND 0 < POSITION(POM.OBJID::TEXT || ',' IN #{checkArr}||',') ]]>
</if>
) P
<!--
ORDER BY PART_NO, PART_NAME
ORDER BY RNUM
-->
</select>
<!-- 구매 BOM 정의 후 수입검사 등록 Part 목록을 가져온다. -->
<select id="getPurchaseOrderDeliveryTargetPartList" parameterType="map" resultType="map">
SELECT
P.*,
(REAL_ORDER_QTY::NUMERIC -TOTAL_DELIVERY_QTY::NUMERIC) AS NON_ARRIVAL_QTY
<!-- (ORDER_QTY::NUMERIC -(TOTAL_DELIVERY_QTY::NUMERIC - TOTAL_DEFECT_QTY::NUMERIC)) AS NON_ARRIVAL_QTY -->
FROM(
SELECT
ROW_NUMBER() OVER(ORDER BY PM.PART_NO, POP.REGDATE DESC) AS RNUM,
POM.PURCHASE_ORDER_NO,
POP.PART_NAME,
<!-- POP.PART_NO, -->
PM.MATERIAL,
POP.SPEC,
<!-- PM.PART_NO, -->
CASE WHEN POM.TYPE IN ('0001070','0001069') THEN PM.PART_NO ELSE POP.PART_NO END PART_NO,
PM.REVISION,
PM.PART_NAME||'('||PM.MATERIAL||','||PM.SPEC||')/'||PM.PART_NO||(CASE WHEN PM.REVISION IS NULL THEN '' ELSE PM.REVISION END) AS TARGET_TITLE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = pop.UNIT) as UNIT_TITLE,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
POP.ORDER_QTY,
POP.REAL_ORDER_QTY,
POP.OBJID AS ORDER_PART_OBJID,
POP.PURCHASE_ORDER_MASTER_OBJID,
POP.PART_OBJID,
POP.WRITER,
POP.REGDATE,
POP.STATUS,
POP.REMARK,
POP.PARTNER_PRICE
,POP.PRICE1
,POP.PRICE2
,POP.PRICE3
,POP.maker
,pop.unit
,pop.supply_unit_price
,pop.SUPPLY_UNIT_VAT_PRICE
,pop.ld_part_objid
,coalesce(AP.TOTAL_DELIVERY_QTY, '0') as TOTAL_DELIVERY_QTY
,coalesce(AP.TOTAL_DEFECT_QTY, '0') as TOTAL_DEFECT_QTY
,pom.delivery_date as pom_delivery_date
FROM
PURCHASE_ORDER_MASTER POM
INNER JOIN PURCHASE_ORDER_PART POP
ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
<!--
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> PM
-->
LEFT OUTER JOIN PART_MNG PM
ON POP.PART_OBJID = PM.OBJID::TEXT
LEFT OUTER JOIN (
SELECT
ORDER_PART_OBJID
,SUM(RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
,SUM(ERROR_QTY::NUMERIC) AS TOTAL_DEFECT_QTY
FROM
ARRIVAL_PLAN AP
WHERE
PARENT_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
GROUP BY ORDER_PART_OBJID
)AP on AP.ORDER_PART_OBJID = POP.OBJID
WHERE 1=1
<if test="PURCHASE_ORDER_MASTER_OBJID != null and PURCHASE_ORDER_MASTER_OBJID !=''">
AND POM.OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</if>
<if test="checkArr != null and checkArr !=''">
<![CDATA[ AND 0 < POSITION(POM.OBJID::TEXT || ',' IN #{checkArr}||',') ]]>
</if>
) P
<!--
ORDER BY PART_NO, PART_NAME
ORDER BY RNUM
-->
</select>
<update id="updatePurchaseOrderMasterMultiInfo" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET MULTI_MASTER_YN = #{MULTI_MASTER_YN}
,MULTI_YN = #{MULTI_YN}
WHERE OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</update>
<update id="updatePurchaseOrderNegoPrice" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET NEGO_RATE = #{NEGO_RATE}
,DISCOUNT_PRICE_ALL = #{DISCOUNT_PRICE_ALL}
,DISCOUNT_PRICE = (CASE WHEN NVL(#{DISCOUNT_PRICE_ALL}::VARCHAR, '') != '' THEN ROUND(NVL(#{DISCOUNT_PRICE_ALL}::VARCHAR, '0')::NUMERIC/(SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER WHERE OBJID = #{OBJID} OR MULTI_MASTER_OBJID = #{OBJID}),1)
ELSE NULL END)
<!--
,TOTAL_SUPPLY_UNIT_PRICE = #{TOTAL_SUPPLY_UNIT_PRICE}
,TOTAL_PRICE = #{TOTAL_PRICE}
-->
,TOTAL_PRICE = (CASE WHEN NVL(#{TOTAL_PRICE_ALL}::VARCHAR, '') != '' THEN ROUND(NVL(#{TOTAL_PRICE_ALL}::VARCHAR, '0')::NUMERIC/(SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER WHERE OBJID = #{OBJID} OR MULTI_MASTER_OBJID = #{OBJID}),1)
ELSE NULL END)
,TOTAL_PRICE_ALL = #{TOTAL_PRICE_ALL}
,TOTAL_SUPPLY_UNIT_PRICE = FLOOR(NVL(#{TOTAL_PRICE}::VARCHAR, TOTAL_SUPPLY_PRICE)::NUMERIC * 1.1)
,TOTAL_SUPPLY_UNIT_PRICE_ALL = FLOOR(NVL(#{TOTAL_PRICE_ALL}::VARCHAR, TOTAL_REAL_SUPPLY_PRICE)::NUMERIC * 1.1)
<!--
,TOTAL_PRICE_TXT = NUM_TO_KOR(#{TOTAL_PRICE_ALL},'일금 ',' 원정 (₩ ') || TO_CHAR((#{TOTAL_PRICE_ALL})::INTEGER, '999,999,999,999') ||')'
,TOTAL_PRICE_TXT_ALL = NUM_TO_KOR(#{TOTAL_PRICE_ALL},'일금 ',' 원정 (₩ ') || TO_CHAR((#{TOTAL_PRICE_ALL})::INTEGER, '999,999,999,999') ||')'
-->
WHERE ( OBJID = #{OBJID}
OR MULTI_MASTER_OBJID = #{OBJID}
<!-- 240402 동시발주 단가 싱크처리 막음
OR MULTI_MASTER_OBJID = #{OBJID}
-->
)
<!-- 241014 네고금액 저장시 결재완료건 조건 막음
AND STATUS = 'approvalComplete'
-->
</update>
<update id="updatePurchaseOrderPriceTxt" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET
TOTAL_PRICE_TXT = NUM_TO_KOR(TOTAL_SUPPLY_UNIT_PRICE,'일금 ',' 원정 (₩ ') || TO_CHAR((TOTAL_SUPPLY_UNIT_PRICE)::Numeric, '999,999,999,999') ||')'
,TOTAL_PRICE_TXT_ALL = NUM_TO_KOR(TOTAL_SUPPLY_UNIT_PRICE_ALL,'일금 ',' 원정 (₩ ') || TO_CHAR((TOTAL_SUPPLY_UNIT_PRICE_ALL)::Numeric, '999,999,999,999') ||')'
WHERE ( OBJID = #{OBJID}
OR MULTI_MASTER_OBJID = #{OBJID}
)
</update>
<!-- 동시발주 저장 시 저장된 프로젝트정보를 초기화 -->
<delete id="delPurchaseOrderMaster" parameterType="map">
DELETE FROM PURCHASE_ORDER_MASTER
WHERE MULTI_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
<!-- AND CONTRACT_MGMT_OBJID NOT IN -->
AND OBJID NOT IN
<foreach collection="checkArr" item="objkey" index="index" separator="," open="(" close=")">
#{objkey}
</foreach>
</delete>
<delete id="delPurchaseOrderPart" parameterType="map">
DELETE FROM PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID IN
(SELECT OBJID FROM PURCHASE_ORDER_MASTER
WHERE MULTI_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
)
AND PURCHASE_ORDER_MASTER_OBJID IN
(SELECT OBJID FROM PURCHASE_ORDER_MASTER
WHERE ( <!-- OBJID = #{PURCHASE_ORDER_MASTER_OBJID} OR -->
MULTI_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID})
AND OBJID NOT IN
<foreach collection="checkArr" item="objkey" index="index" separator="," open="(" close=")">
#{objkey}
</foreach>
)
</delete>
<delete id="delPurchaseOrderMulti" parameterType="map">
DELETE FROM PURCHASE_ORDER_MULTI
WHERE MULTI_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
AND OBJID NOT IN
<foreach collection="checkArr" item="objkey" index="index" separator="," open="(" close=")">
#{objkey}
</foreach>
</delete>
<!-- 구매의뢰 저장 시 저장된 파트 정보를 초기화 -->
<delete id="initPurchaseOrderPart" parameterType="map">
DELETE FROM PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</delete>
<delete id="initPurchaseOrderPartMulti" parameterType="map">
DELETE FROM PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
OR PURCHASE_ORDER_MASTER_OBJID IN (SELECT OBJID
FROM PURCHASE_ORDER_MASTER
WHERE MULTI_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID})
</delete>
<delete id="deletePurchaseOrderMaster" parameterType="map">
DELETE FROM PURCHASE_ORDER_MASTER
WHERE 1=1
<if test="checkArr != null and checkArr !=''">
<![CDATA[ AND 0 < POSITION(OBJID::TEXT || ',' IN #{checkArr}||',') ]]>
</if>
</delete>
<delete id="deletePurchaseOrderPart" parameterType="map">
DELETE FROM PURCHASE_ORDER_PART
WHERE 1=1
<if test="checkArr != null and checkArr !=''">
<![CDATA[ AND 0 < POSITION(PURCHASE_ORDER_MASTER_OBJID::TEXT || ',' IN #{checkArr}||',') ]]>
</if>
</delete>
<!-- 취소 -->
<update id="cancelPurchaseOrderMasterMulti" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET STATUS = 'cancel'
WHERE
<![CDATA[ 0 < POSITION(OBJID::TEXT || ',' IN #{materOrdObjId}||',') ]]>
OR <![CDATA[ 0 < POSITION(MULTI_MASTER_OBJID::TEXT || ',' IN #{materOrdObjId}||',') ]]>
<if test="checkArr != null and checkArr !=''">
</if>
</update>
<!-- 입고결과 이력 등록 -->
<insert id="insertDeliveryHistory" parameterType="map">
INSERT INTO DELIVERY_HISTORY
(
OBJID,
PART_OBJID,
LD_PART_OBJID,
PURCHASE_ORDER_PART_OBJID,
ORDER_QTY,
DELIVERY_QTY,
DELIVERY_PLACE_CD,
DELIVERY_DATE,
DELIVERY_PLAN_DATE,
REMARK,
WRITER,
REGDATE,
NON_ARRIVAL_QTY,
DELIVERY_MNG_NO
,DEFECT_QTY
,INSPECT_DATE
,DEFECT_REASON
,DEFECT_RESP
,RESULT
,DEFECT_NOTE
)VALUES(
#{OBJID},
#{PART_OBJID},
#{LD_PART_OBJID},
#{PURCHASE_ORDER_PART_OBJID},
#{ORDER_QTY},
#{DELIVERY_QTY},
#{DELIVERY_PLACE_CD},
#{DELIVERY_DATE},
#{DELIVERY_PLAN_DATE},
#{REMARK},
#{WRITER},
NOW(),
#{NON_ARRIVAL_QTY},
(SELECT 'I'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(DELIVERY_MNG_NO,11,13)),'0')::INTEGER+1)::TEXT,3,'0') FROM DELIVERY_HISTORY)
,#{DEFECT_QTY}
,#{INSPECT_DATE}
,#{DEFECT_REASON}
,#{DEFECT_RESP}
,#{RESULT}
,#{DEFECT_NOTE}
)
</insert>
<update id="updateDeliveryHistory" parameterType="map">
UPDATE DELIVERY_HISTORY
SET
<!--
ORDER_QTY = #{ORDER_QTY}
,DELIVERY_PRICE = #{DELIVERY_PRICE}
,DELIVERY_PLAN_DATE = #{DELIVERY_PLAN_DATE}
,DELIVERY_MNG_NO = #{DELIVERY_MNG_NO}
-->
DELIVERY_QTY = #{DELIVERY_QTY}
,DELIVERY_PLACE_CD = #{DELIVERY_PLACE_CD}
,DELIVERY_DATE = #{DELIVERY_DATE}
,INSPECT_DATE = #{INSPECT_DATE}
,DEFECT_QTY = #{DEFECT_QTY}
,DEFECT_RESP = #{DEFECT_RESP}
,DEFECT_REASON = #{DEFECT_REASON}
,MODWRITER = #{WRITER}
,MODDATE = NOW()
<!--
,NON_ARRIVAL_QTY = #{NON_ARRIVAL_QTY}
,RESULT = #{RESULT}
,REMARK = #{REMARK}
,DEFECT_CONTENT = #{DEFECT_CONTENT}
,DEFECT_ACTION = #{DEFECT_ACTION}
,DEFECT_NOTE = #{DEFECT_NOTE}
,DEFECT_ACTION_DATE = #{DEFECT_ACTION_DATE}
,DEFECT_ACTION_TITLE = #{DEFECT_ACTION_TITLE}
-->
WHERE OBJID = #{OBJID}
</update>
<!-- 자재(RESOURCE_MNG) 생성 - 중복 시 무시 -->
<insert id="insertResourceMasterMng" parameterType="map">
INSERT INTO RESOURCE_MNG
(
OBJID,
PART_OBJID,
LD_PART_OBJID,
PART_NAME,
SPEC,
MATERIAL,
UNIT,
MAKER,
WEIGHT,
REGDATE,
WRITER
)
VALUES
(
#{OBJID}::NUMERIC,
#{PART_OBJID},
#{LD_PART_OBJID},
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
#{SPEC},
(SELECT PM.MATERIAL FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
#{MAKER},
#{UNIT},
(SELECT PM.WEIGHT FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
NOW(),
#{WRITER}
)
ON CONFLICT (PART_OBJID) DO NOTHING
</insert>
<!-- 마지막 재고 정보를 가져온다. -->
<select id="getLastInventoryInfo" parameterType="map" resultType="map">
SELECT
*
FROM
INVENTORY_MNG
WHERE 1=1
AND IS_LAST = 'Y'
AND PARENT_OBJID = (SELECT OBJID FROM RESOURCE_MNG WHERE PART_OBJID = #{PART_OBJID})
AND LOCATION = #{LOCATION}
AND SUB_LOCATION = #{SUB_LOCATION}
<!-- AND LOCATION = #{DELIVERY_PLACE_CD} -->
</select>
<select id="getLastInventoryInfoLD" parameterType="map" resultType="map">
SELECT
*
FROM
INVENTORY_MNG
WHERE 1=1
AND IS_LAST = 'Y'
AND LD_PART_OBJID = (SELECT LD_PART_OBJID FROM RESOURCE_MNG WHERE LD_PART_OBJID = #{LD_PART_OBJID})
AND LOCATION = #{LOCATION}
AND SUB_LOCATION = #{SUB_LOCATION}
<!-- AND LOCATION = #{DELIVERY_PLACE_CD} -->
</select>
<!-- 해당 자재마스터내 동일 위치 재고 변경 시 최종여부를 초기화 한다. -->
<update id="resetInventoryRegist" parameterType="map">
UPDATE
INVENTORY_MNG
SET
IS_LAST = 'N'
WHERE PARENT_OBJID = (SELECT RM.OBJID FROM RESOURCE_MNG RM WHERE PART_OBJID = #{PART_OBJID})
AND LOCATION = #{LOCATION}
AND SUB_LOCATION = #{SUB_LOCATION}
<!-- AND LOCATION = #{DELIVERY_PLACE_CD} -->
</update>
<update id="resetInventoryRegistLD" parameterType="map">
UPDATE
INVENTORY_MNG
SET
IS_LAST = 'N'
WHERE LD_PART_OBJID = #{LD_PART_OBJID}
AND LOCATION = #{LOCATION}
AND SUB_LOCATION = #{SUB_LOCATION}
<!-- AND LOCATION = #{DELIVERY_PLACE_CD} -->
</update>
<select id="getDeliveryResultHistoryList" parameterType="map" resultType="map">
SELECT
P.*
FROM(
SELECT
ROW_NUMBER() OVER(ORDER BY PM.PART_NO, DH.REGDATE DESC) AS RNUM,
POM.PURCHASE_ORDER_NO,
POP.PART_NAME,
PM.MATERIAL,
POP.SPEC,
PM.PART_NO,
PM.REVISION,
PM.PART_NAME||'('||PM.MATERIAL||','||PM.SPEC||')/'||PM.PART_NO AS TARGET_TITLE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = POP.UNIT) as UNIT_TITLE,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME,
(SELECT SUM(DH.DELIVERY_QTY::NUMERIC) FROM DELIVERY_HISTORY DH WHERE DH.PURCHASE_ORDER_PART_OBJID = POP.OBJID) AS TOTAL_DELIVERY_QTY,
(SELECT SUM(DH.DEFECT_QTY::NUMERIC) FROM DELIVERY_HISTORY DH WHERE DH.PURCHASE_ORDER_PART_OBJID = POP.OBJID) AS TOTAL_DEFECT_QTY,
POP.OBJID,
POP.PURCHASE_ORDER_MASTER_OBJID,
POP.PART_OBJID,
POP.LD_PART_OBJID,
dh.objid as dh_objid,
DH.OBJID as DELIVERY_HISTORY_OBJID,
DH.ORDER_QTY,
DH.DELIVERY_QTY,
DH.DELIVERY_PLACE_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = DELIVERY_PLACE_CD) AS DELIVERY_PLACE_NAME,
DH.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = POM.WRITER) AS WRITER_NAME,
DH.REMARK,
DH.DELIVERY_DATE,
DH.NON_ARRIVAL_QTY,
DH.DELIVERY_MNG_NO
,pop.maker
,POP.UNIT
,pop.order_qty as pop_order_qty
,pop.partner_price
,pop.supply_unit_price
,pop.SUPPLY_UNIT_VAT_PRICE
,dh.delivery_plan_date
,dh.defect_qty
,pom.delivery_date as pom_delivery_date
,dh.inspect_date
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = DH.OBJID AND DOC_TYPE='DELIVERY_INSPECT' AND UPPER(STATUS) = 'ACTIVE') AS F_CNT
,dh.defect_reason
,dh.DEFECT_NOTE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = dh.defect_reason) AS defect_reason_name
,dh.defect_resp
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = dh.defect_resp) AS defect_resp_name
,dh.result
FROM
DELIVERY_HISTORY DH
INNER JOIN PURCHASE_ORDER_PART POP
<!-- 240322 아래로 대체
ON DH.PURCHASE_ORDER_PART_OBJID = POP.OBJID
-->
ON DH.PART_OBJID = POP.PART_OBJID
INNER JOIN PURCHASE_ORDER_MASTER POM
ON POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
<!--
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> PM
-->
LEFT OUTER JOIN PART_MNG PM
ON POP.PART_OBJID = PM.OBJID::TEXT
WHERE 1=1
AND <![CDATA[ DH.DELIVERY_QTY::integer > 0::integer]]>
<if test="PURCHASE_ORDER_MASTER_OBJID != null and PURCHASE_ORDER_MASTER_OBJID !=''">
AND POM.OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</if>
) P
</select>
<select id="getPURCHASE_ORDER_PART" parameterType="map" resultType="map">
SELECT T.*
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = T.UNIT) AS UNIT_NAME
,P.PART_NO P_PART_NO
,POM.BOM_REPORT_OBJID
,POM.PURCHASE_ORDER_NO
,(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::varchar = POM.PARTNER_OBJID) AS PARTNER_NAME
FROM PURCHASE_ORDER_PART T
INNER JOIN PURCHASE_ORDER_MASTER POM
ON POM.OBJID = T.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER 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="getPURCHASE_ORDER_PART_INVOICE" parameterType="map" resultType="map">
SELECT
T1.*
,TOTAL_SUM_PRICE * COALESCE(T1.RECEIPT_QTY::numeric, 0) AS TOTAL_PARTNER_PRICE
,(TOTAL_SUM_PRICE * COALESCE(T1.RECEIPT_QTY::numeric, 0) * 0.1) AS TOTAL_PARTNER_VAT_PRICE
FROM
(SELECT
T.*
,(SELECT TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT) AS UNIT_NAME
,P.PART_NO P_PART_NO
,AP.RECEIPT_DATE
,AP.RECEIPT_QTY
,(COALESCE(NULLIF(T.PARTNER_PRICE, '')::numeric,0) + COALESCE(NULLIF(T.PRICE1, '')::numeric,0) + COALESCE(NULLIF(T.PRICE2, '')::numeric,0) + COALESCE(NULLIF(T.PRICE3, '')::numeric,0) + COALESCE(NULLIF(T.PRICE4, '')::numeric,0)) AS TOTAL_SUM_PRICE
<!-- ,(T.PARTNER_PRICE::numeric * COALESCE(AP.RECEIPT_QTY::numeric, 0))*0.1 AS TOTAL_PARTNER_VAT_PRICE -->
FROM
PURCHASE_ORDER_PART T
LEFT OUTER JOIN PART_MNG P
ON T.PART_OBJID = P.OBJID::VARCHAR
LEFT OUTER JOIN ARRIVAL_PLAN AP
ON T.OBJID = AP.ORDER_PART_OBJID
AND T.PURCHASE_ORDER_MASTER_OBJID = AP.PARENT_OBJID
<if test="GROUPSEQ != null and GROUPSEQ !=''">
AND GROUP_SEQ = #{GROUPSEQ}
WHERE T.PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</if>
<if test="checkArr != null and checkArr !=''">
AND GROUP_SEQ = (SELECT group_seq FROM INVOICE_MGMT WHERE OBJID = #{checkArr} )
WHERE T.PURCHASE_ORDER_MASTER_OBJID = (SELECT PARENT_OBJID FROM INVOICE_MGMT WHERE OBJID = #{checkArr} )
</if>
ORDER BY P.PART_NO ) AS T1
</select>
<select id="getPurchase_SAVED_PART_INVOICE" parameterType="map" resultType="map">
SELECT
T.OBJID
,T.INVOICE_OBJID
,T.PART_OBJID
,T.REMARK
,T.QTY AS RECEIPT_QTY
,T.UNIT_PRICE AS TOTAL_SUM_PRICE
,T.PARTNER_PRICE AS TOTAL_PARTNER_PRICE
,T.VAT_PRICE AS TOTAL_PARTNER_VAT_PRICE
,T.RECEIPT_DATE
,P.PART_NAME
,P.PART_NO
,P.SPEC
FROM
INVOICE_MGMT_PART T
LEFT OUTER JOIN PART_MNG P
ON T.PART_OBJID = P.OBJID::VARCHAR
WHERE INVOICE_OBJID = #{INVOICE_OBJID}
</select>
<select id="getPURCHASE_ORDER_PART_INVOICE_sum" parameterType="map" resultType="map">
SELECT
SUM(TOTAL_PARTNER_PRICE) AS TOTAL_PARTNER_PRICE_SUM,
SUM(NEGO_TOTAL_PARTNER_PRICE) AS NEGO_PRICE_ALL,
SUM(NEGO_TOTAL_PARTNER_PRICE) * 0.1 AS NEGO_VAT_PRICE_ALL,
SUM(TOTAL_PARTNER_VAT_PRICE) TOTAL_PARTNER_VAT_PRICE_SUM,
(SUM(TOTAL_PARTNER_PRICE) + SUM(TOTAL_PARTNER_VAT_PRICE)) AS TOTAL_PRICE_SUM
FROM (
SELECT
T1.*
,TOTAL_SUM_PRICE * COALESCE(T1.RECEIPT_QTY::numeric, 0) AS TOTAL_PARTNER_PRICE
,TOTAL_SUM_PRICE * COALESCE(T1.RECEIPT_QTY::numeric, 0) * (100 - T1.NEGO_RATE::numeric) / 100 AS NEGO_TOTAL_PARTNER_PRICE
,(TOTAL_SUM_PRICE * COALESCE(T1.RECEIPT_QTY::numeric, 0) * 0.1) AS TOTAL_PARTNER_VAT_PRICE
FROM
(SELECT
T.*
,POM.NEGO_RATE
,(SELECT TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT) AS UNIT_NAME
,P.PART_NO P_PART_NO
,AP.RECEIPT_DATE
,AP.RECEIPT_QTY
,(COALESCE(T.PARTNER_PRICE::numeric,0) + COALESCE(T.PRICE1::numeric,0) + COALESCE(T.PRICE2::numeric,0) + COALESCE(T.PRICE3::numeric,0) + COALESCE(T.PRICE4::numeric,0)) AS TOTAL_SUM_PRICE
<!-- ,(T.PARTNER_PRICE::numeric * COALESCE(AP.RECEIPT_QTY::numeric, 0))*0.1 AS TOTAL_PARTNER_VAT_PRICE -->
FROM
PURCHASE_ORDER_PART T
LEFT OUTER JOIN PART_MNG P
ON T.PART_OBJID = P.OBJID::VARCHAR
LEFT OUTER JOIN PURCHASE_ORDER_MASTER POM
ON POM.OBJID = T.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN ARRIVAL_PLAN AP
ON T.OBJID = AP.ORDER_PART_OBJID
AND T.PURCHASE_ORDER_MASTER_OBJID = AP.PARENT_OBJID
<if test="GROUPSEQ != null and GROUPSEQ !=''">
AND GROUP_SEQ = #{GROUPSEQ}
WHERE T.PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</if>
<if test="checkArr != null and checkArr !=''">
AND GROUP_SEQ = (SELECT group_seq FROM INVOICE_MGMT WHERE OBJID = #{checkArr} )
WHERE T.PURCHASE_ORDER_MASTER_OBJID = (SELECT PARENT_OBJID FROM INVOICE_MGMT WHERE OBJID = #{checkArr} )
</if>
ORDER BY P.PART_NO ) AS T1
) AS S1
WHERE 1=1
</select>
<select id="getPURCHASE_SAVED_PART_INVOICE_sum" parameterType="map" resultType="map">
SELECT
TOTAL_PARTNER_PRICE_SUM,
NEGO_PRICE_ALL,
NEGO_VAT_PRICE_ALL,
TOTAL_PARTNER_VAT_PRICE_SUM,
(COALESCE(TOTAL_PARTNER_PRICE_SUM::NUMERIC,0) + COALESCE(TOTAL_PARTNER_VAT_PRICE_SUM::NUMERIC,0))
FROM
INVOICE_MGMT T
WHERE OBJID = #{INVOICE_OBJID}
<!-- SELECT
SUM(coalesce(TOTAL_PARTNER_PRICE::numeric, 0)) AS TOTAL_PARTNER_PRICE_SUM,
SUM(coalesce(NEGO_TOTAL_PARTNER_PRICE::numeric, 0)) AS NEGO_PRICE_ALL,
SUM(coalesce(NEGO_TOTAL_PARTNER_PRICE::numeric, 0)) * 0.1 AS NEGO_VAT_PRICE_ALL,
SUM(coalesce(TOTAL_PARTNER_VAT_PRICE::numeric, 0)) TOTAL_PARTNER_VAT_PRICE_SUM,
(SUM(coalesce(TOTAL_PARTNER_PRICE::numeric, 0)) + SUM(coalesce(TOTAL_PARTNER_VAT_PRICE::numeric, 0))) AS TOTAL_PRICE_SUM
FROM (SELECT
T.OBJID
,T.INVOICE_OBJID
,T.PART_OBJID
,T.REMARK
,T.QTY AS RECEIPT_QTY
,T.UNIT_PRICE AS TOTAL_SUM_PRICE
,T.PARTNER_PRICE AS TOTAL_PARTNER_PRICE
,T.VAT_PRICE AS TOTAL_PARTNER_VAT_PRICE
,T.RECEIPT_DATE
,P.PART_NAME
,P.PART_NO
,P.SPEC
FROM
INVOICE_MGMT_PART T
LEFT OUTER JOIN PART_MNG P
ON T.PART_OBJID = P.OBJID::VARCHAR
WHERE INVOICE_OBJID = #{INVOICE_OBJID}) AS S1
WHERE 1=1 -->
</select>
<delete id="deletePURCHASE_ORDER_MASTER" parameterType="map">
DELETE FROM PURCHASE_ORDER_MASTER
WHERE OBJID = #{objId} OR MULTI_MASTER_OBJID = #{objId}
</delete>
<!-- 공급처 정보 조회 (CLIENT_MNG 테이블) -->
<select id="purchaseOrderAdminSupplyInfo" parameterType="map" resultType="map">
SELECT
T1.OBJID
,T1.BUS_REG_NO AS SUPPLY_BUS_NO
,T1.CEO_NM AS SUPPLY_USER_NAME
,T1.VENDOR_MOBILE AS SUPPLY_USER_HP
,T1.TEL_NO AS SUPPLY_USER_TEL
,T1.FAX_NO AS SUPPLY_USER_FAX
,T1.EMAIL AS SUPPLY_USER_EMAIL
,CONCAT(COALESCE(T1.ADDR1,''), ' ', COALESCE(T1.ADDR2,'')) AS SUPPLY_ADDR
FROM CLIENT_MNG AS T1
WHERE 1=1
AND T1.OBJID::VARCHAR = #{PARTNER_OBJID}::VARCHAR
</select>
<select id="purchaseOrderSalesBomPartListByPartnerContract" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
REGDATE,
SEQ,
LEV,
PATH,
CYCLE,
IS_LEAF,
AGGREGATE_QTY
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.QTY,
A.REGDATE,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE,
NOT EXISTS (SELECT 1 FROM BOM_PART_QTY C WHERE C.PARENT_OBJID = A.CHILD_OBJID) AS IS_LEAF,
NVL(A.QTY, '0')::NUMERIC AS AGGREGATE_QTY
FROM
PART_BOM_REPORT AS PBR
,BOM_PART_QTY A
WHERE 1=1
AND PBR.CONTRACT_OBJID = #{CONTRACT_MGMT_OBJID}
<if test='UNIT_CODE != null and UNIT_CODE != "" '>
AND PBR.UNIT_CODE = #{UNIT_CODE}
</if>
AND PBR.OBJID = A.BOM_REPORT_OBJID
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
AND A.STATUS IN ('deploy')
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.QTY,
B.REGDATE,
B.SEQ,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
B.PARENT_OBJID = ANY(PATH),
NOT EXISTS (SELECT 1 FROM BOM_PART_QTY C WHERE C.PARENT_OBJID = B.CHILD_OBJID) AS IS_LEAF,
VIEW_BOM.AGGREGATE_QTY * NVL(B.QTY, '0')::NUMERIC AS AGGREGATE_QTY
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
AND B.STATUS IN ('deploy')
)
SELECT T1.PARENT_OBJID AS BOM_REPORT_OBJID
<!--
,T1.PART_OBJID
-->
,PM.OBJID PART_OBJID
,T1.OBJID SALES_BOM_REPORT_PART_OBJID
,PM.PART_NAME
,PM.PART_NO
,PM.SPEC
,PM.MAKER
,PM.REMARK
,PM.UNIT
<!--
,BPQ.QTY AS ORDER_QTY
-->
,(SELECT AGGREGATE_QTY FROM VIEW_BOM V WHERE V.CHILD_OBJID = BPQ.CHILD_OBJID) ORDER_QTY
,(CASE WHEN T1.SUPPLY_OBJID = #{PARTNER_OBJID} THEN T1.PRICE ELSE '0' END) AS PARTNER_PRICE
,(CASE WHEN T1.SUPPLY_OBJID1 = #{PARTNER_OBJID} THEN T1.PRICE1 ELSE '0' END) AS PRICE1
,(CASE WHEN T1.SUPPLY_OBJID2 = #{PARTNER_OBJID} THEN T1.PRICE2 ELSE '0' END) AS PRICE2
,(CASE WHEN T1.SUPPLY_OBJID3 = #{PARTNER_OBJID} THEN T1.PRICE3 ELSE '0' END) AS PRICE3
,(CASE WHEN T1.SUPPLY_OBJID4 = #{PARTNER_OBJID} THEN T1.PRICE4 ELSE '0' END) AS PRICE4
,T1.WRITER
<!--
,(SELECT SUM(NVL(QTY, '0')::NUMERIC) FROM INVENTORY_MGMT IM WHERE IM.PART_OBJID = PM.OBJID) STOCK_QTY
-->
,(COALESCE((SELECT SUM(CASE WHEN (RECEIPT_QTY IS NULL OR RECEIPT_QTY ='')
THEN 0
ELSE RECEIPT_QTY::NUMERIC END)
FROM INVENTORY_MGMT AS IM
INNER JOIN INVENTORY_MGMT_IN AS O
ON O.PARENT_OBJID = IM.OBJID
WHERE IM.PART_OBJID = PM.OBJID
),0) - COALESCE((SELECT SUM(CASE WHEN (REQUEST_QTY IS NULL OR REQUEST_QTY ='')
THEN 0
ELSE REQUEST_QTY::NUMERIC END)
FROM INVENTORY_MGMT AS IM
INNER JOIN INVENTORY_MGMT_OUT AS O
ON O.PARENT_OBJID = IM.OBJID
WHERE IM.PART_OBJID = PM.OBJID
),0)) AS STOCK_QTY
FROM SALES_BOM_REPORT_PART AS T1
,PART_BOM_REPORT AS PBR
,BOM_PART_QTY AS BPQ
,PART_MNG AS PM
WHERE T1.PARENT_OBJID = PBR.OBJID
AND PBR.OBJID = BPQ.BOM_REPORT_OBJID
<!--
AND T1.PART_OBJID = BPQ.PART_NO
AND T1.PART_OBJID = PM.OBJID::VARCHAR
240108 위에서 아래 조건으로 변경
AND T1.PART_OBJID = BPQ.LAST_PART_OBJID (설변시 최종파트)
-->
AND T1.BOM_PART_QTY_OBJID = BPQ.CHILD_OBJID
AND BPQ.LAST_PART_OBJID = PM.OBJID::VARCHAR
AND BPQ.STATUS IN ('deploy')
AND PBR.CONTRACT_OBJID = #{CONTRACT_MGMT_OBJID}
<if test='UNIT_CODE != null and UNIT_CODE != "" '>
AND PBR.UNIT_CODE = #{UNIT_CODE}
</if>
<if test='PART_TYPE != null and PART_TYPE != "" '>
AND PM.PART_TYPE = #{PART_TYPE}
</if>
<if test='PART_TYPE == null or PART_TYPE == "" '>
AND PM.PART_TYPE NOT IN ( '0001788') <!-- 표준구매품 제외 -->
</if>
<if test='preventDuplYN != null and preventDuplYN != "" and "Y".equals(preventDuplYN) '>
<!-- 중복발주 방지(241010)
AND NOT EXISTS (
SELECT 'E'
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART AS POP
WHERE 1=1
AND POM.BOM_REPORT_OBJID = PBR.OBJID
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.STATUS IN ('create', 'approvalRequest','approvalComplete' )
AND POP.PART_OBJID = PM.OBJID
)
-->
</if>
<choose>
<when test='TYPE_TURNKEY_YN !=null and TYPE_TURNKEY_YN != "" and "Y".equals(TYPE_TURNKEY_YN) '>
AND ( EXISTS (SELECT 'E' FROM VIEW_BOM SV WHERE SV.LEV = 2 AND SV.CHILD_OBJID = BPQ.CHILD_OBJID)
AND ( T1.SUPPLY_OBJID = #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID1= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID2= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID3= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID4= #{PARTNER_OBJID}
)
OR ( EXISTS (SELECT 'E' FROM VIEW_BOM V WHERE V.LEV > 1 AND V.CHILD_OBJID = BPQ.CHILD_OBJID)
<!--
AND ( T1.SUPPLY_OBJID = #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID1= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID2= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID3= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID4= #{PARTNER_OBJID}
)
-->
)
)
</when>
<otherwise>
AND ( T1.SUPPLY_OBJID = #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID1= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID2= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID3= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID4= #{PARTNER_OBJID}
)
</otherwise>
</choose>
ORDER BY BPQ.SEQ
</select>
<select id="purchaseOrderSalesBomPartListByPartnerContractTypeBuy" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
REGDATE,
SEQ,
LEV,
PATH,
CYCLE,
IS_LEAF,
AGGREGATE_QTY
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.QTY,
A.REGDATE,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE,
NOT EXISTS (SELECT 1 FROM BOM_PART_QTY C WHERE C.PARENT_OBJID = A.CHILD_OBJID) AS IS_LEAF,
NVL(A.QTY, '0')::NUMERIC AS AGGREGATE_QTY
FROM
PART_BOM_REPORT AS PBR
,BOM_PART_QTY A
WHERE 1=1
AND PBR.CONTRACT_OBJID = #{CONTRACT_MGMT_OBJID}
<if test='UNIT_CODE != null and UNIT_CODE != "" '>
AND PBR.UNIT_CODE = #{UNIT_CODE}
</if>
AND PBR.OBJID = A.BOM_REPORT_OBJID
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
AND A.STATUS IN ('deploy')
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.QTY,
B.REGDATE,
B.SEQ,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
B.PARENT_OBJID = ANY(PATH),
NOT EXISTS (SELECT 1 FROM BOM_PART_QTY C WHERE C.PARENT_OBJID = B.CHILD_OBJID) AS IS_LEAF,
VIEW_BOM.AGGREGATE_QTY * NVL(B.QTY, '0')::NUMERIC AS AGGREGATE_QTY
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
AND B.STATUS IN ('deploy')
)
SELECT
PM.PART_OBJID
,PM.PART_NAME
,PM.PART_NO
,PM.SPEC
,PM.MAKER
,PM.REMARK
,PM.UNIT
,SUM(COALESCE(NULLIF(ORDER_QTY, 0), 0)) ORDER_QTY
,MAX(NVL(PARTNER_PRICE, '0')::NUMERIC) AS PARTNER_PRICE
,MAX(NVL(PRICE1, '0')::NUMERIC) AS PRICE1
,MAX(NVL(PRICE2, '0')::NUMERIC) AS PRICE2
,MAX(NVL(PRICE3, '0')::NUMERIC) AS PRICE3
,MAX(NVL(PRICE4, '0')::NUMERIC) AS PRICE4
,SUM(COALESCE(NULLIF(STOCK_QTY, 0), 0)) STOCK_QTY
FROM
(
SELECT
<!--
T1.PARENT_OBJID AS BOM_REPORT_OBJID
,T1.PART_OBJID
,T1.OBJID SALES_BOM_REPORT_PART_OBJID
-->
PM.OBJID PART_OBJID
,PM.PART_NAME
,PM.PART_NO
,PM.SPEC
,PM.MAKER
,PM.REMARK
,PM.UNIT
<!--
,BPQ.QTY AS ORDER_QTY
-->
,(SELECT AGGREGATE_QTY FROM VIEW_BOM V WHERE V.CHILD_OBJID = BPQ.CHILD_OBJID) ORDER_QTY
,(CASE WHEN T1.SUPPLY_OBJID = #{PARTNER_OBJID} THEN T1.PRICE ELSE '0' END) AS PARTNER_PRICE
,(CASE WHEN T1.SUPPLY_OBJID1 = #{PARTNER_OBJID} THEN T1.PRICE1 ELSE '0' END) AS PRICE1
,(CASE WHEN T1.SUPPLY_OBJID2 = #{PARTNER_OBJID} THEN T1.PRICE2 ELSE '0' END) AS PRICE2
,(CASE WHEN T1.SUPPLY_OBJID3 = #{PARTNER_OBJID} THEN T1.PRICE3 ELSE '0' END) AS PRICE3
,(CASE WHEN T1.SUPPLY_OBJID4 = #{PARTNER_OBJID} THEN T1.PRICE4 ELSE '0' END) AS PRICE4
<!--
,T1.WRITER
,(SELECT SUM(NVL(QTY, '0')::NUMERIC) FROM INVENTORY_MGMT IM WHERE IM.PART_OBJID = PM.OBJID) STOCK_QTY
-->
,(COALESCE((SELECT SUM(CASE WHEN (RECEIPT_QTY IS NULL OR RECEIPT_QTY ='')
THEN 0
ELSE RECEIPT_QTY::NUMERIC - COALESCE(MOVE_QTY,'0')::numeric END)
FROM INVENTORY_MGMT AS IM
INNER JOIN INVENTORY_MGMT_IN AS O
ON O.PARENT_OBJID = IM.OBJID
WHERE IM.PART_OBJID = PM.OBJID
),0) - COALESCE((SELECT SUM(CASE WHEN (REQUEST_QTY IS NULL OR REQUEST_QTY ='')
THEN 0
ELSE REQUEST_QTY::NUMERIC END)
FROM INVENTORY_MGMT AS IM
INNER JOIN INVENTORY_MGMT_OUT AS O
ON O.PARENT_OBJID = IM.OBJID
WHERE IM.PART_OBJID = PM.OBJID
),0)) AS STOCK_QTY
FROM SALES_BOM_REPORT_PART AS T1
,PART_BOM_REPORT AS PBR
,BOM_PART_QTY AS BPQ
,PART_MNG AS PM
WHERE T1.PARENT_OBJID = PBR.OBJID
AND PBR.OBJID = BPQ.BOM_REPORT_OBJID
<!--
AND T1.PART_OBJID = BPQ.PART_NO
AND T1.PART_OBJID = PM.OBJID::VARCHAR
240108 위에서 아래 조건으로 변경
AND T1.PART_OBJID = BPQ.LAST_PART_OBJID (설변시 최종파트)
-->
AND T1.BOM_PART_QTY_OBJID = BPQ.CHILD_OBJID
AND BPQ.LAST_PART_OBJID = PM.OBJID::VARCHAR
AND BPQ.STATUS IN ('deploy')
AND PBR.CONTRACT_OBJID = #{CONTRACT_MGMT_OBJID}
<if test='UNIT_CODE != null and UNIT_CODE != "" '>
AND PBR.UNIT_CODE = #{UNIT_CODE}
</if>
<if test='PART_TYPE != null and PART_TYPE != "" '>
AND PM.PART_TYPE = #{PART_TYPE}
</if>
<if test='PART_TYPE == null or PART_TYPE == "" '>
AND PM.PART_TYPE NOT IN ( '0001788') <!-- 표준구매품 제외 -->
</if>
<if test='preventDuplYN != null and preventDuplYN != "" and "Y".equals(preventDuplYN) '>
AND ( T1.SUPPLY_OBJID = #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID1= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID2= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID3= #{PARTNER_OBJID}
OR T1.SUPPLY_OBJID4= #{PARTNER_OBJID}
)
</if>
) PM
GROUP BY
PM.PART_OBJID
,PM.PART_NAME
,PM.PART_NO
,PM.SPEC
,PM.MAKER
,PM.REMARK
,PM.UNIT
ORDER BY PART_NO
</select>
<update id="mergeDeliveryPartPrice" parameterType="map">
INSERT INTO DELIVERY_PART_PRICE
(
OBJID
,PURCHASE_ORDER_PART_OBJID
,PART_OBJID
,LD_PART_OBJID
,PRICE
,PRICE1
,PRICE2
,PRICE3
,PRICE4
,PRICE_SUM
,WRITER
,REGDATE
)
VALUES
(
#{OBJID}
,#{PURCHASE_ORDER_PART_OBJID}
,#{PART_OBJID}
,#{LD_PART_OBJID}
,#{PRICE}
,#{PRICE1}
,#{PRICE2}
,#{PRICE3}
,#{PRICE4}
,#{PRICE_SUM}
,#{WRITER}
,NOW()
) ON CONFLICT (OBJID) DO
UPDATE
SET
PRICE = #{PRICE}
,PRICE1 = #{PRICE1}
,PRICE2 = #{PRICE2}
,PRICE3 = #{PRICE3}
,PRICE4 = #{PRICE4}
,PRICE_SUM = #{PRICE_SUM}
</update>
<update id="updateSalesBomReportPartPriceByPurchase" parameterType="map">
UPDATE SALES_BOM_REPORT_PART SET
PRICE = #{PARTNER_PRICE}
,PRICE1 = #{PRICE1 }
,PRICE2 = #{PRICE2 }
,PRICE3 = #{PRICE3 }
,PRICE4 = #{PRICE4 }
,PRICE_SUM = #{SUPPLY_UNIT_PRICE }
,MODIFIER = #{WRITER }
,UPDATE_DATE = NOW()
<!--
,WRITER = #{writer }
,REGDATE = NOW()
-->
WHERE OBJID = (SELECT SBRP.OBJID
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
,SALES_BOM_REPORT_PART SBRP
,BOM_PART_QTY Q
<!--
,PART_MNG P
-->
WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
<!-- AND POP.OBJID = #{PURCHASE_ORDER_PART_OBJID } -->
AND POP.OBJID = #{OBJID}
<!--
AND POM.BOM_REPORT_OBJID #{BOM_REPORT_OBJID}
-->
AND SBRP.PARENT_OBJID = POM.BOM_REPORT_OBJID
<!-- 240723 조건 설변건 저장안되서 아래로 수정
AND POP.PART_OBJID = SBRP.PART_OBJID
-->
AND SBRP.BOM_PART_QTY_OBJID = Q.CHILD_OBJID
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = POP.PART_OBJID
<!--
AND POP.PART_OBJID = P.OBJID
AND Q.STATUS = 'deploy'
-->
)
</update>
<update id="updatePurchaseOrderPartPriceByDeliveryCost" parameterType="map">
UPDATE PURCHASE_ORDER_PART SET
PARTNER_PRICE = #{PRICE }
,PRICE1 = #{PRICE1 }
,PRICE2 = #{PRICE2 }
,PRICE3 = #{PRICE3 }
,PRICE4 = #{PRICE4 }
,SUPPLY_UNIT_PRICE = #{PRICE_SUM }
,SUPPLY_UNIT_VAT_PRICE = #{PRICE_SUM }::numeric *0.1
WHERE OBJID = #{PURCHASE_ORDER_PART_OBJID }
</update>
<update id="updatePurchaseOrderriceByDeliveryCost" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER SET
TOTAL_SUPPLY_UNIT_PRICE = SUPPLY_UNIT_PRICE
,TOTAL_PRICE = SUPPLY_UNIT_PRICE - T.DISCOUNT_PRICE
,NEGO_RATE = ROUND( ((1-((SUPPLY_UNIT_PRICE - T.DISCOUNT_PRICE)/SUPPLY_UNIT_PRICE))*100), 1) ||'%'
,TOTAL_PRICE_TXT = NUM_TO_KOR((SUPPLY_UNIT_PRICE - T.DISCOUNT_PRICE)::INTEGER::VARCHAR,'일금 ',' 원정 (₩ ') || TO_CHAR((SUPPLY_UNIT_PRICE - T.DISCOUNT_PRICE), '999,999,999,999') ||')'
<!--
((1-((vTP)/colSum1))*100).toFixed(1)
-->
FROM
(SELECT
SUM(SUPPLY_UNIT_PRICE::NUMERIC) + SUM(SUPPLY_UNIT_VAT_PRICE::NUMERIC) SUPPLY_UNIT_PRICE
,(CASE WHEN COALESCE(DISCOUNT_PRICE, '') = '' THEN '0'
ELSE DISCOUNT_PRICE END)::NUMERIC AS DISCOUNT_PRICE
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
GROUP BY POM.OBJID
) T
WHERE OBJID = #{PURCHASE_ORDER_MASTER_OBJID }
<!--
(SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART POP WHERE OBJID = '1687975702')
WHERE OBJID = (SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART POP WHERE OBJID = #{PURCHASE_ORDER_PART_OBJID })
-->
</update>
<select id="getMultiObjids" parameterType="map" resultType="map">
SELECT
(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE POM.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
FROM PURCHASE_ORDER_MASTER AS POM
WHERE OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</select>
<select id="purchaseOrderMasterListSum" parameterType="map" resultType="map">
SELECT
SUM(NVL(POM.TOTAL_PRICE_ALL, '0')::NUMERIC) AS TOTAL_PRICE_ALL
,SUM(NVL(POM.TOTAL_SUPPLY_PRICE, '0')::NUMERIC) AS TOTAL_SUPPLY_PRICE
,SUM(NVL(POM.TOTAL_REAL_SUPPLY_PRICE, '0')::NUMERIC) AS TOTAL_REAL_SUPPLY_PRICE
,SUM(NVL(POM.TOTAL_SUPPLY_UNIT_PRICE, '0')::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
FROM
PURCHASE_ORDER_MASTER AS POM
WHERE 1=1
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND S_P.CUSTOMER_OBJID = REPLACE(#{customer_cd}, 'C_', '')
)
</if>
<if test="customer_project_name !=null and customer_project_name != '' ">
AND CM.CUSTOMER_PROJECT_NAME = #{customer_project_name}
</if>
<if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</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 = REPLACE(#{partner_objid}, 'C_', '')
</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 != '' ">
<choose>
<when test="'cancel'.equals(appr_status)">
AND POM.STATUS = #{appr_status}
</when>
<when test="'complete'.equals(appr_status)">
AND POM.STATUS = 'approvalComplete'
</when>
<when test="'create'.equals(appr_status)">
AND ( POM.STATUS = #{appr_status}
AND NOT EXISTS (SELECT 1 FROM APPROVAL AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
AND NOT EXISTS (SELECT 1 FROM APPROVAL_TARGET AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
OR AT.MASTER_TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
)
</when>
<otherwise>
AND A.APPR_STATUS = #{appr_status}
</otherwise>
</choose>
</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>
</select>
<select id="purchaseOrderMasterListSum_old" parameterType="map" resultType="map">
SELECT
<!--
SUM(CASE WHEN (SUPPLY_UNIT_VAT_SUM_PRICE IS NULL OR SUPPLY_UNIT_VAT_SUM_PRICE='')
THEN 0
ELSE POP.SUPPLY_UNIT_VAT_SUM_PRICE::NUMERIC
END) AS TOTAL_SUPPLY_PRICE
SUM(CASE WHEN (POP.SUPPLY_UNIT_PRICE IS NULL OR POP.SUPPLY_UNIT_PRICE='')
THEN 0
ELSE POP.SUPPLY_UNIT_PRICE::NUMERIC
END) AS TOTAL_SUPPLY_PRICE
-->
SUM(NVL(POM.TOTAL_PRICE_ALL, '0')::NUMERIC) AS TOTAL_PRICE_ALL
,SUM(NVL(POM.TOTAL_SUPPLY_PRICE, '0')::NUMERIC) AS TOTAL_SUPPLY_PRICE
,SUM(NVL(POM.TOTAL_REAL_SUPPLY_PRICE, '0')::NUMERIC) AS TOTAL_REAL_SUPPLY_PRICE
,SUM(NVL(POM.TOTAL_SUPPLY_UNIT_PRICE, '0')::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
FROM
<!-- 여기있어야 현황 sum이랑 같은 값나옴 240723
SALES_BOM_REPORT SBR,
PART_BOM_REPORT PBR
INNER JOIN
-->
PURCHASE_ORDER_MASTER AS POM
<!--
ON PBR.OBJID::VARCHAR = POM.BOM_REPORT_OBJID
INNER JOIN PURCHASE_ORDER_PART AS POP
ON POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
WHEN 'cancel' 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
-->
<!-- 동시발주건 조건 주석처리240813
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR)
)
-->
WHERE 1=1
<!-- 여기있어야 현황 sum이랑 같은 값나옴 240723
,PROJECT_MGMT CM
WHERE SBR.PARENT_OBJID = PBR.OBJID
AND PBR.CONTRACT_OBJID = CM.OBJID
AND CM.OBJID = '-203272655'
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
-->
AND POM.STATUS = 'approvalComplete'
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
<!--
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND TO_CHAR(S_P.REGDATE,'YYYY') = #{Year}
)
-->
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND S_P.CUSTOMER_OBJID = REPLACE(#{customer_cd}, 'C_', '')
)
</if>
<if test="customer_project_name !=null and customer_project_name != '' ">
AND CM.CUSTOMER_PROJECT_NAME = #{customer_project_name}
</if>
<if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</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 = REPLACE(#{partner_objid}, 'C_', '')
</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 != '' ">
<choose>
<when test="'cancel'.equals(appr_status)">
AND POM.STATUS = #{appr_status}
</when>
<when test="'complete'.equals(appr_status)">
AND POM.STATUS = 'approvalComplete'
</when>
<when test="'create'.equals(appr_status)">
AND ( POM.STATUS = #{appr_status}
AND NOT EXISTS (SELECT 1 FROM APPROVAL AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
AND NOT EXISTS (SELECT 1 FROM APPROVAL_TARGET AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
OR AT.MASTER_TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
)
</when>
<otherwise>
AND A.APPR_STATUS = #{appr_status}
</otherwise>
</choose>
</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>
</select>
<select id="purchaseOrderMasterList_new" parameterType="map" resultType="map">
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
,TO_CHAR(POM.REGDATE, 'YYYY') AS PO_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 CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
<!-- ,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END 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.TOTAL_PRICE_ALL
,POM.DISCOUNT_PRICE
,POM.DISCOUNT_PRICE_ALL
,POM.TOTAL_SUPPLY_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.TOTAL_REAL_SUPPLY_PRICE
,POM.NEGO_RATE
<!--
,POM.TOTAL_SUPPLY_UNIT_PRICE::NUMERIC - POM.DISCOUNT_PRICE::NUMERIC as TOTAL_SUPPLY_UNIT_PRICE_NEGO
-->
,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
,POM.MAIL_SEND_YN
,POM.MAIL_SEND_DATE
,POM.STATUS
,COALESCE(POM.FORM_TYPE, 'general') AS FORM_TYPE
,A.APPR_STATUS
,CASE WHEN POM.STATUS = 'cancel' then '취소'
ELSE COALESCE(A.APPR_STATUS_NAME,'작성중')
END AS APPR_STATUS_NAME
,A.ROUTE_OBJID
,A.APPROVAL_OBJID
,A.APPR_DATE
,SALES_REQUEST_OBJID
,SRM.REQUEST_MNG_NO AS PROPOSAL_NO
,CODE_NAME(SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME
,CODE_NAME(CM.PRODUCT) AS PRODUCT_NAME
,CODE_NAME(CM.CATEGORY_CD) AS CATEGORY_NAME
-- 발주서 품목 정보 (첫번째 품번/품명 + 외 N건)
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NO)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
) AS PART_NO
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NAME)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
) AS PART_NAME
FROM PURCHASE_ORDER_MASTER AS POM
LEFT OUTER JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
WHEN 'cancel' 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
<!-- 동시발주건 조건 주석처리(속도)240813
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR)
-->
)
<!--
INNER JOIN PROJECT_MGMT AS CM
-->
LEFT OUTER JOIN PROJECT_MGMT AS CM
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
left outer join SALES_REQUEST_MASTER as SRM
on POM.SALES_REQUEST_OBJID = SRM.OBJID
and SRM.DOC_TYPE = 'PROPOSAL'
<!-- 230907 outer join으로 변경
,PROJECT_MGMT AS CM
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
-->
WHERE 1=1
<!-- for test
-->
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
<!--
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND TO_CHAR(S_P.REGDATE,'YYYY') = #{Year}
)
-->
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND S_P.CUSTOMER_OBJID = REPLACE(#{customer_cd}, 'C_', '')
)
</if>
<if test="customer_project_name !=null and customer_project_name != '' ">
AND CM.CUSTOMER_PROJECT_NAME = #{customer_project_name}
</if>
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_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="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 = REPLACE(#{partner_objid}, 'C_', '')
</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="sales_mng_user_ids != null and sales_mng_user_ids != ''">
AND POM.SALES_MNG_USER_ID IN
<foreach item="value" collection="sales_mng_user_ids.split(',')"
open="(" separator="," close=")">
#{value}
</foreach>
</if>
<!-- 주문유형 필터 -->
<if test="category_cd != null and category_cd != ''">
AND CM.CATEGORY_CD = #{category_cd}
</if>
<!-- 제품구분 필터 -->
<if test="product_cd != null and product_cd != ''">
AND CM.PRODUCT = #{product_cd}
</if>
<!-- 발주일 필터: MAIL_SEND_DATE (그리드 컬럼과 일치) -->
<if test="reg_start_date !=null and reg_start_date != '' ">
AND TO_DATE(POM.MAIL_SEND_DATE, '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(POM.MAIL_SEND_DATE, 'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{reg_end_date}, 'YYYY-MM-DD')
</if>
<if test="appr_status !=null and appr_status != '' ">
<choose>
<when test="'cancel'.equals(appr_status)">
AND POM.STATUS = #{appr_status}
</when>
<when test="'complete'.equals(appr_status)">
AND POM.STATUS = 'approvalComplete'
</when>
<when test="'create'.equals(appr_status)">
AND ( POM.STATUS = #{appr_status}
AND NOT EXISTS (SELECT 1 FROM APPROVAL AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
AND NOT EXISTS (SELECT 1 FROM APPROVAL_TARGET AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
OR AT.MASTER_TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
)
</when>
<otherwise>
AND A.APPR_STATUS = #{appr_status}
</otherwise>
</choose>
</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>
<if test="SEARCH_PART_SPEC !=null and SEARCH_PART_SPEC != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.SPEC)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_SPEC}))||'%'
)
</if>
ORDER BY SPLIT_PART( PURCHASE_ORDER_NO, '-', 3)::NUMERIC DESC
</select>
<select id="purchaseOrderMasterList_new_old" parameterType="map" resultType="map">
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
,TO_CHAR(POM.REGDATE, 'YYYY') AS PO_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
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END 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.TOTAL_PRICE_ALL
,POM.DISCOUNT_PRICE
,POM.DISCOUNT_PRICE_ALL
,POM.TOTAL_SUPPLY_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.TOTAL_REAL_SUPPLY_PRICE
,POM.NEGO_RATE
<!--
,POM.TOTAL_SUPPLY_UNIT_PRICE::NUMERIC - POM.DISCOUNT_PRICE::NUMERIC as TOTAL_SUPPLY_UNIT_PRICE_NEGO
-->
,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
,POM.STATUS
,A.APPR_STATUS
,CASE WHEN POM.STATUS = 'cancel' then '취소'
ELSE COALESCE(A.APPR_STATUS_NAME,'작성중')
END AS APPR_STATUS_NAME
,A.ROUTE_OBJID
,A.APPROVAL_OBJID
,A.APPR_DATE
FROM PURCHASE_ORDER_MASTER AS POM
LEFT OUTER JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
WHEN 'cancel' 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
<!-- 동시발주건 조건 주석처리(속도)240813
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR)
-->
)
<!--
INNER JOIN PROJECT_MGMT AS CM
-->
LEFT OUTER JOIN PROJECT_MGMT AS CM
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
<!-- 230907 outer join으로 변경
,PROJECT_MGMT AS CM
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
-->
WHERE 1=1
<!-- for test
-->
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
<!--
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND TO_CHAR(S_P.REGDATE,'YYYY') = #{Year}
)
-->
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND S_P.CUSTOMER_OBJID = REPLACE(#{customer_cd}, 'C_', '')
)
</if>
<if test="customer_project_name !=null and customer_project_name != '' ">
AND CM.CUSTOMER_PROJECT_NAME = #{customer_project_name}
</if>
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_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="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 = REPLACE(#{partner_objid}, 'C_', '')
</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="sales_mng_user_ids != null and sales_mng_user_ids != ''">
AND POM.SALES_MNG_USER_ID IN
<foreach item="value" collection="sales_mng_user_ids.split(',')"
open="(" separator="," close=")">
#{value}
</foreach>
</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 != '' ">
<choose>
<when test="'cancel'.equals(appr_status)">
AND POM.STATUS = #{appr_status}
</when>
<when test="'complete'.equals(appr_status)">
AND POM.STATUS = 'approvalComplete'
</when>
<when test="'create'.equals(appr_status)">
AND ( POM.STATUS = #{appr_status}
AND NOT EXISTS (SELECT 1 FROM APPROVAL AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
AND NOT EXISTS (SELECT 1 FROM APPROVAL_TARGET AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
OR AT.MASTER_TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
)
</when>
<otherwise>
AND A.APPR_STATUS = #{appr_status}
</otherwise>
</choose>
</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>
<if test="SEARCH_PART_SPEC !=null and SEARCH_PART_SPEC != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.SPEC)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_SPEC}))||'%'
)
</if>
<!--
ORDER BY POM.REGDATE DESC
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="salesPartChgActStatusByPurchaseOrderId" parameterType="map">
UPDATE SALES_PART_CHG
SET
ACT_STATUS = #{act_status}
WHERE purchase_order_master_objid = #{targetObjId}
</update>
<update id="salesRequestMasterStatus" parameterType="map">
UPDATE SALES_REQUEST_MASTER
SET
STATUS = #{STATUS}
WHERE OBJID = #{SALES_REQUEST_OBJID}
</update>
<select id="purchaseOrderPartFileListForMail" parameterType="map" resultType="map">
SELECT OBJID
, TARGET_OBJID
, SAVED_FILE_NAME
, REAL_FILE_NAME
, DOC_TYPE
, DOC_TYPE_NAME
, FILE_SIZE
, FILE_EXT
, UPPER(FILE_EXT) UPPER_FILE_EXT
, REPLACE(FILE_PATH, '\', '/') AS FILE_PATH
, WRITER
, (SELECT USER_NAME FROM USER_INFO USER_INFO_T WHERE USER_INFO_T.USER_ID = WRITER) AS USER_NAME
, (SELECT DEPT_NAME FROM USER_INFO USER_INFO_T WHERE USER_INFO_T.USER_ID = WRITER) AS DEPT_NAME
, TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REGDATE
, REGDATE AS REGDATE_ORG
, STATUS
FROM ATTACH_FILE_INFO
WHERE 1=1
AND TARGET_OBJID::varchar IN (SELECT PART_OBJID<!-- ::NUMERIC 장납기일때 null이면 에러 발생해서 앞쪽을 varchar로 형변환 -->
FROM PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
)
AND DOC_TYPE IN ('3D_CAD','2D_DRAWING_CAD','2D_PDF_CAD')
AND UPPER(STATUS) = 'ACTIVE'
ORDER BY REGDATE_ORG DESC
</select>
<select id="deliveryMngStatus" parameterType="map" resultType="map">
<!--
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
REGDATE,
SEQ,
LEV,
PATH,
CYCLE,
IS_LEAF,
AGGREGATE_QTY
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.QTY,
A.REGDATE,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE,
NOT EXISTS (SELECT 1 FROM BOM_PART_QTY C WHERE C.PARENT_OBJID = A.CHILD_OBJID AND C.BOM_REPORT_OBJID = A.BOM_REPORT_OBJID) AS IS_LEAF,
NVL(A.QTY, '0')::NUMERIC AS AGGREGATE_QTY
FROM
BOM_PART_QTY A
WHERE 1=1
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.QTY,
B.REGDATE,
B.SEQ,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
B.PARENT_OBJID = ANY(PATH),
NOT EXISTS (SELECT 1 FROM BOM_PART_QTY C WHERE C.PARENT_OBJID = B.CHILD_OBJID AND C.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID) AS IS_LEAF,
VIEW_BOM.AGGREGATE_QTY * NVL(B.QTY, '0')::NUMERIC AS AGGREGATE_QTY
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
),REF_BOM_INFO AS(
SELECT
V.BOM_REPORT_OBJID AS PARENT_OBJID
,V.PART_NO AS PART_OBJID
,PM.PART_NO
,PM.PART_NAME
,V.LEV
,V.QTY
,V.AGGREGATE_QTY
,V.IS_LEAF
,(SELECT MAX(LEV) FROM VIEW_BOM) AS MAX_LEV
,SP.OBJID
,PM.PART_TYPE
,SP.SUPPLY_OBJID
,SP.PRICE
,SP.SUPPLY_OBJID1
,SP.PRICE1
,SP.SUPPLY_OBJID2
,SP.PRICE2
,SP.SUPPLY_OBJID3
,SP.PRICE3
,SP.SUPPLY_OBJID4
,SP.PRICE4
,SP.PRICE_SUM
,PM.SPEC
,PM.MAKER
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.PART_TYPE) AS PART_TYPE_NAME
,PBR.CONTRACT_OBJID
FROM
VIEW_BOM AS V
LEFT OUTER JOIN
SALES_BOM_REPORT_PART AS SP
ON V.PART_NO = SP.PART_OBJID
AND SP.PARENT_OBJID::VARCHAR = V.BOM_REPORT_OBJID::VARCHAR
LEFT OUTER JOIN
PART_MNG PM
ON V.PART_NO = PM.OBJID::VARCHAR
LEFT OUTER JOIN
PART_BOM_REPORT PBR
ON PBR.OBJID::VARCHAR = V.BOM_REPORT_OBJID::VARCHAR
WHERE 1=1
ORDER BY V.SEQ
)
WITH V_PRE_T AS (
SELECT RESULT_TABLE.*
FROM (
SELECT
ROW_NUMBER() OVER() AS RNUM
,SQL_TABLE.OBJID
,SQL_TABLE.CONTRACT_OBJID
FROM (
SELECT
DISTINCT PBR.OBJID
,CM.OBJID CONTRACT_OBJID
,CM.PROJECT_NO
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = PBR.UNIT_CODE) AS UNIT_PART_NAME
FROM
SALES_BOM_REPORT SBR
,PART_BOM_REPORT PBR
LEFT OUTER JOIN(
SELECT POM.BOM_REPORT_OBJID
FROM PURCHASE_ORDER_MASTER POM
WHERE POM.STATUS = 'approvalComplete'
GROUP BY POM.BOM_REPORT_OBJID
) AS S1 ON PBR.OBJID::VARCHAR = S1.BOM_REPORT_OBJID
,PROJECT_MGMT CM
WHERE 1=1
AND SBR.PARENT_OBJID = PBR.OBJID
AND PBR.CONTRACT_OBJID = CM.OBJID
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
</if>
<if test="customer_objid !=null and customer_objid != '' ">
AND CM.CUSTOMER_OBJID = #{customer_objid}
</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>
ORDER BY PROJECT_NO DESC, UNIT_PART_NAME
) AS SQL_TABLE
) AS RESULT_TABLE
WHERE 1=1
AND <![CDATA[ RNUM::integer <= #{PAGE_END}::integer ]]>
AND <![CDATA[ RNUM::integer >= #{PAGE_START}::integer]]>
)
, V1 AS (
SELECT
BPQ.BOM_REPORT_OBJID
,BPQ.status
,BPQ.OBJID
,BPQ.PARENT_OBJID
,BPQ.CHILD_OBJID
,BPQ.PARENT_PART_NO
,BPQ.PART_NO PART_NO_BPQ
,BPQ.QTY
,pm.part_type
,pm.part_no
FROM V_PRE_T V_PRE_T
,BOM_PART_QTY BPQ
,PART_MNG PM
WHERE 1=1
AND BPQ.BOM_REPORT_OBJID = V_PRE_T.OBJID
AND BPQ.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
AND NVL(BPQ.LAST_PART_OBJID, BPQ.PART_NO) = PM.OBJID
)
, V2 AS (
SELECT *
FROM V_PRE_T V_PRE_T
,PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
WHERE POM.BOM_REPORT_OBJID = V_PRE_T.OBJID
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.CONTRACT_MGMT_OBJID = V_PRE_T.CONTRACT_OBJID
)
-->
SELECT T.*
<!-- ,ROUND(TOTAL_PO_PART_CNT::NUMERIC / TOTAL_BOM_PART_CNT::NUMERIC * 100, 1) AS PO_RATE /*발주율*/ -->
,CASE WHEN TOTAL_PO_PART_CNT = '0' THEN 0
WHEN TOTAL_BOM_PART_CNT = '0' THEN 0
ELSE ROUND(TOTAL_PO_PART_CNT::NUMERIC / TOTAL_BOM_PART_CNT::NUMERIC * 100, 1)
END AS PO_RATE
,(CASE WHEN TOTAL_BOM_PART_CNT - TOTAL_PO_PART_CNT &lt; 0 THEN 0 ELSE TOTAL_BOM_PART_CNT - TOTAL_PO_PART_CNT END) AS NON_PO_PART_CNT /*미발주품수*/
,(TOTAL_DELIVERY_QTY::NUMERIC <!-- - TOTAL_DEFECT_QTY::NUMERIC -->) AS DELIVERY_QTY /*입고수량*/
,(TOTAL_PO_QTY - (TOTAL_DELIVERY_QTY::NUMERIC <!-- - TOTAL_DEFECT_QTY::NUMERIC -->)) AS NON_DELIVERY_QTY /*미입고수량*/
,CASE WHEN TOTAL_DEFECT_QTY = '0' THEN 0
WHEN TOTAL_DELIVERY_QTY = '0' THEN 0
<!--
ELSE ROUND(TOTAL_DEFECT_QTY::NUMERIC / (TOTAL_DELIVERY_QTY::NUMERIC - TOTAL_DEFECT_QTY::NUMERIC) * 100, 1)
-->
ELSE ROUND(TOTAL_DEFECT_QTY::NUMERIC / TOTAL_PO_QTY::NUMERIC * 100, 1)
END AS DELIVERY_RATE
<!-- ,ROUND(TOTAL_DEFECT_QTY::NUMERIC / TOTAL_DELIVERY_QTY::NUMERIC * 100, 1) AS DELIVERY_RATE /*불량율*/ -->
FROM (
SELECT CM.OBJID
,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
,SBR.OBJID AS SALES_OBJID
,PBR.OBJID AS BOM_REPORT_OBJID
<!--
,(SELECT COUNT(DISTINCT CASE WHEN PM.PART_TYPE IN ('0000063','0000064') THEN BPQ.PART_NO ELSE NULL END)
,(SELECT COUNT(DISTINCT CASE WHEN COALESCE(PM.PART_TYPE, 'XX') != 'XX' THEN BPQ.PART_NO ELSE NULL END)
-->
,(
SELECT
COUNT(DISTINCT CASE WHEN PM.PART_TYPE IN (SELECT CODE_ID FROM COMM_CODE WHERE PARENT_CODE_ID = '0000062') THEN BPQ.PART_NO ELSE NULL END)
FROM
BOM_PART_QTY BPQ
,PART_MNG PM
WHERE BPQ.PART_NO = PM.OBJID::VARCHAR
AND BPQ.BOM_REPORT_OBJID = PBR.OBJID
AND BPQ.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
<!--
v1으로 속도개선
FROM V1 BPQ
WHERE 1=1
-->
) AS TOTAL_BOM_PART_CNT /*BOM부품개수*/
<!--
,(SELECT SUM(BPQ.QTY::NUMERIC)
FROM BOM_PART_QTY BPQ, PART_MNG PM
WHERE BPQ.PART_NO = PM.OBJID::VARCHAR
AND BPQ.BOM_REPORT_OBJID = PBR.OBJID
AND PM.PART_TYPE != '') AS TOTAL_BOM_PART_QTY_SUM2 /*BOM부품 QTY SUM*/
아래는 3~ 총합에 * 1 * 2레벨
,((SELECT RBI.QTY::NUMERIC
FROM REF_BOM_INFO RBI
WHERE RBI.PARENT_OBJID = PBR.OBJID
AND RBI.LEV = 1
) *
(SELECT RBI.QTY::NUMERIC
FROM REF_BOM_INFO RBI
WHERE RBI.PARENT_OBJID = PBR.OBJID
AND RBI.LEV = 2
) *
(SELECT SUM(RBI.QTY::NUMERIC)
FROM REF_BOM_INFO RBI
WHERE RBI.PARENT_OBJID = PBR.OBJID
AND RBI.PART_TYPE != ''
AND RBI.LEV > 2
)
) AS TOTAL_BOM_PART_QTY_SUM /*BOM부품 QTY SUM*/
,(SELECT SUM(RBI.AGGREGATE_QTY)
FROM REF_BOM_INFO RBI
WHERE RBI.PARENT_OBJID = PBR.OBJID
AND RBI.LEV > 2
AND IS_LEAF = TRUE
) TOTAL_BOM_PART_QTY_SUM /*BOM부품 QTY SUM(VIEW_BOM 기준)*/
-->
,(
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
LEV,
PATH,
CYCLE,
IS_LEAF,
AGGREGATE_QTY
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.QTY,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE,
NOT EXISTS (SELECT 1 FROM BOM_PART_QTY C WHERE C.PARENT_OBJID = A.CHILD_OBJID) AS IS_LEAF,
NVL(A.QTY, '0')::NUMERIC AS AGGREGATE_QTY
FROM
BOM_PART_QTY A
WHERE 1=1
AND A.BOM_REPORT_OBJID = PBR.OBJID
<!--
V_PRE_T으로 속도개선
,V_PRE_T V_PRE_T
AND A.BOM_REPORT_OBJID = V_PRE_T.OBJID
-->
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.QTY,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
B.PARENT_OBJID = ANY(PATH),
NOT EXISTS (SELECT 1 FROM BOM_PART_QTY C WHERE C.PARENT_OBJID = B.CHILD_OBJID AND C.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID) AS IS_LEAF,
VIEW_BOM.AGGREGATE_QTY * NVL(B.QTY, '0')::NUMERIC AS AGGREGATE_QTY
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
)
SELECT SUM(V.AGGREGATE_QTY) FROM VIEW_BOM V
WHERE V.BOM_REPORT_OBJID = PBR.OBJID
AND V.LEV > 2
AND V.IS_LEAF = TRUE
) TOTAL_BOM_PART_QTY_SUM /*BOM부품 QTY SUM*/
<!--
,(SELECT COUNT(DISTINCT POP.PART_OBJID)
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.BOM_REPORT_OBJID = PBR.OBJID
) AS TOTAL_PO_PART_CNT /*발주품개수*/
,(
SELECT
COUNT(DISTINCT RBI.PART_OBJID)
FROM
REF_BOM_INFO RBI
,PURCHASE_ORDER_PART PO
,PURCHASE_ORDER_MASTER POM
WHERE RBI.PARENT_OBJID = PBR.OBJID
AND RBI.PART_OBJID = PO.PART_OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.OBJID = PO.PURCHASE_ORDER_MASTER_OBJID
AND RBI.PART_TYPE IS NOT NULL
AND RBI.PART_TYPE != ''
) AS TOTAL_PO_PART_CNT /*발주품개수(VIEW_BOM 기준)*/
-->
,(
SELECT COUNT(DISTINCT PO.PART_NO)
FROM
BOM_PART_QTY Q,
PURCHASE_ORDER_PART PO
,PURCHASE_ORDER_MASTER POM
<!--
,SALES_BOM_REPORT_PART SP
-->
,PART_MNG P
WHERE 1=1
AND POM.BOM_REPORT_OBJID = PBR.OBJID
<!--
AND Q.PART_NO = PO.PART_OBJID
AND PO.PART_OBJID = SP.PART_OBJID
AND (Q.LAST_PART_OBJID = PO.PART_OBJID OR Q.PART_NO = PO.PART_OBJID)
-->
AND POM.BOM_REPORT_OBJID = Q.BOM_REPORT_OBJID
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = PO.PART_OBJID
AND Q.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
AND P.OBJID = PO.PART_OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.OBJID = PO.PURCHASE_ORDER_MASTER_OBJID
AND P.PART_TYPE IS NOT NULL
AND P.PART_TYPE != ''
) AS TOTAL_PO_PART_CNT /*발주품개수(발주서 기준)*/
,(
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 = PBR.OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.CONTRACT_MGMT_OBJID = CM.OBJID
) AS TOTAL_PO_QTY /*발주수량*/
,(
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 = PBR.OBJID
AND POM.ORDER_TYPE_CD = '0001407'
AND POM.STATUS = 'approvalComplete'
AND POM.CONTRACT_MGMT_OBJID = CM.OBJID
) AS TOTAL_PO_NEW_QTY /*발주수량 신규*/
,(
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 = PBR.OBJID
AND POM.ORDER_TYPE_CD = '0001408'
AND POM.STATUS = 'approvalComplete'
AND POM.CONTRACT_MGMT_OBJID = CM.OBJID
) AS TOTAL_PO_RE_QTY /*발주수량 재발주*/
,(
SELECT
SUM(DH.RECEIPT_QTY::NUMERIC)
FROM
INVENTORY_MGMT_IN DH
,PURCHASE_ORDER_MASTER POM
WHERE CM.OBJID = DH.CONTRACT_MGMT_OBJID
AND POM.OBJID = DH.PURCHASE_ORDER_SUB_OBJID
AND POM.BOM_REPORT_OBJID = PBR.OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.CONTRACT_MGMT_OBJID = CM.OBJID
) AS TOTAL_DELIVERY_QTY /*입고수량*/
<!-- ,(SELECT SUM(DH.RECEIPT_QTY::NUMERIC)
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
,ARRIVAL_PLAN DH
,DELIVERY_HISTORY DH
WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.BOM_REPORT_OBJID = PBR.OBJID
AND POP.OBJID = DH.ORDER_PART_OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.CONTRACT_MGMT_OBJID = CM.OBJID
) AS TOTAL_DELIVERY_QTY --> /*입고수량*/
,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
,COALESCE(S1.TOTAL_DEFECT_PRICE, 0) TOTAL_DEFECT_PRICE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = PBR.UNIT_CODE) AS UNIT_PART_NAME
<!--
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(RBI.PART_NAME), ',') FROM REF_BOM_INFO RBI WHERE 1 = 1 AND PBR.OBJID = RBI.PARENT_OBJID AND RBI.LEV = '2') AS UNIT_PART_NAME
-->
FROM
SALES_BOM_REPORT SBR
,PART_BOM_REPORT PBR
LEFT OUTER JOIN( <!-- SELECT POM.BOM_REPORT_OBJID
,SUM(DH.DEFECT_QTY::NUMERIC) AS TOTAL_DEFECT_QTY
,SUM(CASE WHEN DEFECT_REASON = '0001114' THEN DH.DEFECT_QTY::NUMERIC ELSE NULL END) AS DEFECT_QTY_1 /*설계오류*/
,SUM(CASE WHEN DEFECT_REASON = '0001115' THEN DH.DEFECT_QTY::NUMERIC ELSE NULL END) AS DEFECT_QTY_2 /*제작불량*/
,SUM(CASE WHEN DEFECT_REASON = '0001116' THEN DH.DEFECT_QTY::NUMERIC ELSE NULL END) AS DEFECT_QTY_3 /*구매오류*/
,SUM(CASE WHEN DEFECT_REASON = '0001117' THEN DH.DEFECT_QTY::NUMERIC ELSE NULL END) AS DEFECT_QTY_4 /*오품반입*/
,SUM(POP.SUPPLY_UNIT_PRICE::NUMERIC * DH.DEFECT_QTY::NUMERIC) AS TOTAL_DEFECT_PRICE
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
,DELIVERY_HISTORY DH -->
<!-- 미사용
,DELIVERY_HISTORY_DEFECT DHD
-->
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 /*설계오류*/
,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
WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POP.PART_OBJID = DH.PART_OBJID
AND POM.OBJID = DH.PARENT_OBJID
AND POM.STATUS = 'approvalComplete'
<!-- AND POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID -->
<!--
AND POP.OBJID = DHD.PURCHASE_ORDER_PART_OBJID
-->
GROUP BY POM.BOM_REPORT_OBJID
) AS S1 ON PBR.OBJID::VARCHAR = S1.BOM_REPORT_OBJID
,PROJECT_MGMT CM
WHERE 1=1
AND SBR.PARENT_OBJID = PBR.OBJID
AND PBR.CONTRACT_OBJID = CM.OBJID
<!-- *** X240913 주의 상단에 검색조건 똑같이 해줘야 함*** -->
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
</if>
<if test="customer_objid !=null and customer_objid != '' ">
AND CM.CUSTOMER_OBJID = #{customer_objid}
</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 PBR.UNIT_CODE = #{unit_code}
</if>
<if test="unit_code_like !=null and unit_code_like != '' ">
AND PBR.UNIT_CODE LIKE '%'||#{unit_code_like}||'%'
</if>
<!-- <if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if> -->
ORDER BY PROJECT_NO DESC, UNIT_PART_NAME
) AS T
</select>
<select id="deliveryMngList_new" parameterType="map" resultType="map">
SELECT POM.OBJID
<!-- ,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR -->
,TO_CHAR(POM.REGDATE,'YYYY') AS POM_YEAR
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
,CM.CUSTOMER_PROJECT_NAME
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,CM.PROJECT_NO
,POM.PURCHASE_ORDER_NO
,POM.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.PARTNER_OBJID
,(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
<!-- 품의서 번호 -->
,POM.SALES_REQUEST_OBJID
,(SELECT REQUEST_MNG_NO FROM SALES_REQUEST_MASTER WHERE OBJID::VARCHAR = POM.SALES_REQUEST_OBJID) AS PROPOSAL_NO
<!-- 품번/품명 (첫번째 + 외 N건) -->
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NO)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NO
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NAME)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_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
,POM.MULTI_MASTER_YN
,POM.MULTI_YN
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
<!-- ,S1.TOTAL_PO_QTY -->
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY
<!--,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY -->
,S1.CUR_DELIVERY_DATE
,S1.TOTAL_DELIVERY_QTY
,S1.TOTAL_DELIVERY_PRICE
<!-- ,(S1.TOTAL_PO_QTY - S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY) AS NON_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
<!-- ,S1.TOTAL_DEFECT_QTY -->
<!-- ,(CASE WHEN 0 <![CDATA[ >= ]]> ((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)) THEN '입고완료' -->
<!-- ,((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 -->
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY )) AS NON_DELIVERY_QTY
<!-- ,S1.TOTAL_DEFECT_QTY -->
,(CASE WHEN 0 <![CDATA[ >= ]]> ((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 -->)) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
ELSE '입고중'
END) AS DELIVERY_STATUS
,POM.TYPE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.ORDER_TYPE_CD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME
,(SELECT user_name(RECEIVER_ID) FROM ARRIVAL_PLAN AP WHERE AP.parent_objid = POM.OBJID ORDER BY AP.RECEIPT_DATE desc LIMIT 1) AS CUR_RECEIVER_NAME
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = POM.OBJID AND AF.DOC_TYPE = 'INSPECTION_FILE' AND UPPER(AF.STATUS) = 'ACTIVE') AS INSPECTION_FILE_CNT
,POM.PURCHASE_CLOSE_DATE
<!-- ,A.APPR_STATUS_NAME -->
FROM PURCHASE_ORDER_MASTER AS POM
<!-- LEFT OUTER 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(
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
,MAX(DH.RECEIPT_DATE) AS CUR_DELIVERY_DATE
,SUM(DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
,SUM(pop.partner_price::NUMERIC * DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_PRICE
<!-- ,SUM(DH.ERROR_QTY::NUMERIC) AS TOTAL_DEFECT_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 ARRIVAL_PLAN DH
ON POP.OBJID = DH.ORDER_PART_OBJID
<!-- LEFT OUTER JOIN DELIVERY_HISTORY DH -->
<!-- ON POP.PART_OBJID = DH.PART_OBJID -->
GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID
) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN PROJECT_MGMT AS CM
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
<!-- ,PROJECT_MGMT AS CM -->
<!-- WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID -->
WHERE 1=1
<!-- AND POM.STATUS = 'approvalComplete' --> <!-- A.APPR_STATUS = 'complete' -->/*결재완료*/
<!-- AND POM.SALES_STATUS = 'OK' -->
<!-- AND (POM.SALES_STATUS = 'OK' OR POM.TYPE = '0001538' ) -->
AND POM.MAIL_SEND_DATE IS NOT NULL
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
<if test="Year !=null and Year != '' ">
<!-- AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year} -->
AND TO_CHAR(TO_DATE(S1.CUR_DELIVERY_DATE ,'YYYY-MM-DD'), 'YYYY') = #{Year}
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND CM.CUSTOMER_OBJID = REPLACE(#{customer_cd}, 'C_', '')
</if>
<if test="customer_project_name !=null and customer_project_name != '' ">
AND TRIM(UPPER(CM.CUSTOMER_PROJECT_NAME)) = TRIM(UPPER(#{customer_project_name}))
</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 = #{unit_code}
</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="type !=null and type != '' ">
AND POM.TYPE = #{type}
</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 = REPLACE(#{partner_objid}, 'C_', '')
</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="sales_mng_user_ids != null and sales_mng_user_ids != ''">
AND POM.SALES_MNG_USER_ID IN
<foreach item="value" collection="sales_mng_user_ids.split(',')"
open="(" separator="," close=")">
#{value}
</foreach>
</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="delivery_status !=null and delivery_status != '' ">
AND (CASE WHEN 0 <![CDATA[ >= ]]> ((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 -->)) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
ELSE '입고중'
END) = #{delivery_status}
</if>
<if test="SEARCH_PART_NO !=null and SEARCH_PART_NO != '' ">
AND POM.PURCHASE_ORDER_NO IN (SELECT PURCHASE_ORDER_NO FROM PURCHASE_ORDER_MASTER
WHERE EXISTS (
SELECT
1
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_PART.PURCHASE_ORDER_MASTER_OBJID = PURCHASE_ORDER_MASTER.OBJID
AND TRIM(UPPER(PURCHASE_ORDER_PART.PART_NO)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NO}))||'%'
)
)
</if>
<if test="SEARCH_PART_NAME !=null and SEARCH_PART_NAME != '' ">
AND POM.PURCHASE_ORDER_NO IN (SELECT PURCHASE_ORDER_NO FROM PURCHASE_ORDER_MASTER
WHERE EXISTS (
SELECT
1
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_PART.PURCHASE_ORDER_MASTER_OBJID = PURCHASE_ORDER_MASTER.OBJID
AND TRIM(UPPER(PURCHASE_ORDER_PART.PART_NAME)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NAME}))||'%'
)
)
</if>
<if test="SEARCH_PART_SPEC !=null and SEARCH_PART_SPEC != '' ">
AND POM.PURCHASE_ORDER_NO IN (SELECT PURCHASE_ORDER_NO FROM PURCHASE_ORDER_MASTER
WHERE EXISTS (
SELECT
1
FROM
PURCHASE_ORDER_PART
WHERE PURCHASE_ORDER_PART.PURCHASE_ORDER_MASTER_OBJID = PURCHASE_ORDER_MASTER.OBJID
AND TRIM(UPPER(PURCHASE_ORDER_PART.SPEC)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_SPEC}))||'%'
)
)
</if>
ORDER BY POM.REGDATE DESC
</select>
<delete id="deleteDeliveryHistoryDefect" parameterType="map">
DELETE FROM DELIVERY_HISTORY_DEFECT
WHERE PURCHASE_ORDER_PART_OBJID = #{PURCHASE_ORDER_PART_OBJID}
</delete>
<insert id="insertDeliveryHistoryDefect" parameterType="map">
INSERT INTO DELIVERY_HISTORY_DEFECT
(
OBJID,
PURCHASE_ORDER_PART_OBJID,
DEFECT_QTY,
DEFECT_REASON_CD,
WRITER,
REGDATE
)VALUES(
#{OBJID},
#{PURCHASE_ORDER_PART_OBJID},
#{DEFECT_QTY},
#{DEFECT_REASON_CD},
#{WRITER},
NOW()
)
</insert>
<select id="purchaseOrderStatusByProject" parameterType="map" resultType="map">
<!--
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
REGDATE,
SEQ,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.QTY,
A.REGDATE,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE
FROM
BOM_PART_QTY A
WHERE 1=1
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
AND A.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.QTY,
B.REGDATE,
B.SEQ,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
B.PARENT_OBJID = ANY(PATH)
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
AND B.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
),REF_BOM_INFO AS(
SELECT
V.BOM_REPORT_OBJID AS PARENT_OBJID
,V.PART_NO AS PART_OBJID
,PM.PART_NO
,PM.PART_NAME
,V.LEV
,V.QTY
,(SELECT MAX(LEV) FROM VIEW_BOM) AS MAX_LEV
,SP.OBJID
,SP.SUPPLY_OBJID
,SP.PRICE
,SP.SUPPLY_OBJID1
,SP.PRICE1
,SP.SUPPLY_OBJID2
,SP.PRICE2
,SP.SUPPLY_OBJID3
,SP.PRICE3
,SP.SUPPLY_OBJID4
,SP.PRICE4
,SP.PRICE_SUM
,PM.SPEC
,PM.MAKER
,PM.PART_TYPE
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.PART_TYPE) AS PART_TYPE_NAME
,PBR.CONTRACT_OBJID
FROM
VIEW_BOM AS V
LEFT OUTER JOIN
SALES_BOM_REPORT_PART AS SP
ON V.PART_NO = SP.PART_OBJID
AND SP.PARENT_OBJID::VARCHAR = V.BOM_REPORT_OBJID::VARCHAR
LEFT OUTER JOIN
PART_MNG PM
ON V.PART_NO = PM.OBJID::VARCHAR
LEFT OUTER JOIN
PART_BOM_REPORT PBR
ON PBR.OBJID::VARCHAR = V.BOM_REPORT_OBJID::VARCHAR
WHERE 1=1
ORDER BY V.SEQ
)
-->
SELECT
T.*
,(TOTAL_BOM_PART_CNT - TOTAL_PO_PART_CNT) AS NON_PO_PART_CNT /*미발주품수*/
,CASE
WHEN COALESCE(TOTAL_PO_PART_CNT, 0) = 0 OR COALESCE(TOTAL_BOM_PART_CNT, 0) = 0 THEN 0
ELSE ROUND(TOTAL_PO_PART_CNT::numeric / TOTAL_BOM_PART_CNT * 100, 1)
END AS RATE_PO_S /*발주율*/
,SBOM_PRICE_SUM * QTY1 * QTY2 as SBOM_PRICE_SUM_ALL
FROM (
SELECT
CM.OBJID
,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_NAME
,CM.PROJECT_NO
,SBR.OBJID AS SALES_OBJID
,PBR.OBJID AS BOM_REPORT_OBJID
,(
SELECT
COUNT(DISTINCT CASE WHEN PM.PART_TYPE IN (SELECT CODE_ID FROM COMM_CODE WHERE PARENT_CODE_ID = '0000062') THEN BPQ.PART_NO ELSE NULL END)
FROM
BOM_PART_QTY BPQ
,PART_MNG PM
WHERE 1=1
<!--
AND NVL(BPQ.LAST_PART_OBJID, BPQ.PART_NO) = PM.OBJID
-->
AND COALESCE(NULLIF(BPQ.LAST_PART_OBJID, ''), BPQ.PART_NO) = PM.OBJID
AND BPQ.BOM_REPORT_OBJID = PBR.OBJID
AND BPQ.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
) AS TOTAL_BOM_PART_CNT /*BOM부품개수*/
<!--
,(
SELECT
COUNT(DISTINCT RBI.PART_OBJID)
FROM
REF_BOM_INFO RBI
,PURCHASE_ORDER_PART PO
,PURCHASE_ORDER_MASTER POM
WHERE RBI.PARENT_OBJID = PBR.OBJID
WHERE POM.BOM_REPORT_OBJID = PBR.OBJID
AND RBI.PART_OBJID = PO.PART_OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.OBJID = PO.PURCHASE_ORDER_MASTER_OBJID
AND RBI.PART_TYPE IS NOT NULL
AND RBI.PART_TYPE != ''
<if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if>
<if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
) AS TOTAL_PO_PART_CNT /*발주품개수(VIEW_BOM 기준)*/
-->
,(
CASE
WHEN EXISTS (
SELECT 1
FROM PURCHASE_ORDER_MASTER POM
WHERE POM.BOM_REPORT_OBJID = PBR.OBJID
AND POM.TYPE = '0001785'
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
) THEN (
SELECT COUNT(DISTINCT BPQ.PART_NO)
FROM BOM_PART_QTY BPQ
WHERE BPQ.PARENT_PART_NO IN (
SELECT DISTINCT PO.PART_OBJID
FROM PURCHASE_ORDER_PART PO
JOIN PURCHASE_ORDER_MASTER POM ON POM.OBJID = PO.PURCHASE_ORDER_MASTER_OBJID
WHERE POM.BOM_REPORT_OBJID = PBR.OBJID
AND POM.TYPE = '0001785'
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
AND POM.STATUS = 'approvalComplete'
)
AND BPQ.STATUS IN ('beforeEdit', 'editing', 'deleting', 'deploy')
AND BPQ.BOM_REPORT_OBJID = PBR.OBJID )
ELSE (
SELECT COUNT(DISTINCT PO.PART_NO)
FROM
BOM_PART_QTY Q,
PURCHASE_ORDER_PART PO
,PURCHASE_ORDER_MASTER POM
<!--
,SALES_BOM_REPORT_PART SP
-->
,PART_MNG P
WHERE 1=1
AND POM.BOM_REPORT_OBJID = PBR.OBJID
<!--
AND Q.PART_NO = PO.PART_OBJID
AND PO.PART_OBJID = SP.PART_OBJID
AND (Q.LAST_PART_OBJID = PO.PART_OBJID OR Q.PART_NO = PO.PART_OBJID)
-->
AND POM.BOM_REPORT_OBJID = Q.BOM_REPORT_OBJID
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = PO.PART_OBJID
AND Q.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
AND P.OBJID = PO.PART_OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.OBJID = PO.PURCHASE_ORDER_MASTER_OBJID
AND P.PART_TYPE IS NOT NULL
AND P.PART_TYPE != ''
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>)
END
) AS TOTAL_PO_PART_CNT /*발주품개수(발주서 기준)*/
,(
SELECT
SUM(POP.ORDER_QTY::NUMERIC)
FROM
PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
AND POM.BOM_REPORT_OBJID = PBR.OBJID
) AS TOTAL_PO_QTY /*발주수량*/
,COALESCE(S1.TOTAL_SUPPLY_UNIT_PRICE, 0) TOTAL_SUPPLY_UNIT_PRICE
,COALESCE(S1.PRICE_PT_1, 0) PRICE_PT_1
,COALESCE(S1.PRICE_PT_2, 0) PRICE_PT_2
,COALESCE(S1.PRICE_PT_3, 0) PRICE_PT_3
,CASE
WHEN COALESCE(S1.PRICE_PT_1, 0) = 0 THEN 0
ELSE ROUND(COALESCE(S1.PRICE_PT_1, 0) / S1.TOTAL_SUPPLY_UNIT_PRICE * 100, 1)
END AS RATE_PRICE_PT_1
,CASE
WHEN COALESCE(S1.PRICE_PT_2, 0) = 0 THEN 0
ELSE ROUND(COALESCE(S1.PRICE_PT_2, 0) / S1.TOTAL_SUPPLY_UNIT_PRICE * 100, 1)
END AS RATE_PRICE_PT_2
,COALESCE(S1.PRICE_PT_ETC, 0) PRICE_PT_ETC
<!--
,CASE
WHEN COALESCE(S1.PRICE_PT_ETC, 0) = 0 THEN 0
ELSE ROUND(COALESCE(S1.PRICE_PT_ETC, 0) / S1.TOTAL_SUPPLY_UNIT_PRICE * 100, 1)
END AS RATE_PRICE_PT_ETC
,ROUND(COALESCE(S1.PRICE_PT_1, 0) / S1.TOTAL_SUPPLY_UNIT_PRICE * 100, 1) AS RATE_PRICE_PT_1
,ROUND(COALESCE(S1.PRICE_PT_2, 0) / S1.TOTAL_SUPPLY_UNIT_PRICE * 100, 1) AS RATE_PRICE_PT_2
,ROUND(COALESCE(S1.PRICE_PT_ETC, 0) / S1.TOTAL_SUPPLY_UNIT_PRICE * 100, 1) AS RATE_PRICE_PT_ETC
-->
,COALESCE(S2.TOTAL_SUPPLY_UNIT_PRICE, 0) RE_TOTAL_SUPPLY_UNIT_PRICE
,COALESCE(S4.TOTAL_SUPPLY_UNIT_PRICE, 0) TURNKEY_TOTAL_SUPPLY_UNIT_PRICE
,COALESCE(S3.DISCOUNT_PRICE, 0) DISCOUNT_PRICE
,COALESCE(S3.TOTAL_SUPPLY_PRICE, 0) TOTAL_SUPPLY_PRICE
,COALESCE(S3.TOTAL_SUPPLY_PRICE, 0) - COALESCE(S3.DISCOUNT_PRICE, 0) NEGO_TOTAL_PRICE
,COALESCE(S3.TOTAL_PRICE, 0) TOTAL_PRICE
,COALESCE(S3.TOTAL_PRICE_ALL, 0) TOTAL_PRICE_ALL
,(CASE WHEN S3.TOTAL_SUPPLY_PRICE = 0 THEN 0 ELSE ROUND(S3.DISCOUNT_PRICE/S3.TOTAL_SUPPLY_PRICE*100, 4) END) NEGO_RATE
,(
SELECT
COUNT(1)
FROM
PURCHASE_ORDER_MASTER POM
WHERE POM.STATUS = 'approvalComplete'
AND POM.BOM_REPORT_OBJID = PBR.OBJID
AND POM.ORDER_TYPE_CD = '0001408'
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
) RE_COUNT
,(
SELECT
COUNT(1)
FROM
PURCHASE_ORDER_MASTER POM
WHERE POM.STATUS = 'approvalComplete'
AND POM.BOM_REPORT_OBJID = PBR.OBJID
AND TYPE = '0001785'
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
) TURNKEY_COUNT
,PWT.UNIT_NO || '-' || PWT.TASK_NAME UNIT_PART_NAME
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = PBR.UNIT_CODE) AS UNIT_PART_NAME2
,(SELECT SUM(NVL(SBP.PRICE_SUM, '0')::NUMERIC) AS DISCOUNT_PRICE FROM SALES_BOM_REPORT_PART SBP WHERE SBP.PARENT_OBJID = PBR.OBJID) SBOM_PRICE_SUM
,(SELECT MAX(NVL(BPQ.QTY, '0')::NUMERIC) AS QTY FROM BOM_PART_QTY BPQ WHERE BPQ.BOM_REPORT_OBJID = PBR.OBJID AND NVL(PARENT_PART_NO, '') = '' AND STATUS IN ('adding', 'beforeEdit', 'editing','deleting', 'deploy') ) QTY1
,(SELECT SUM(NVL(BPQ2.QTY, '0')::NUMERIC) AS QTY FROM BOM_PART_QTY BPQ2 WHERE BPQ2.BOM_REPORT_OBJID = PBR.OBJID AND BPQ2.STATUS IN ('adding', 'beforeEdit', 'editing','deleting', 'deploy')
AND BPQ2.PARENT_OBJID = (SELECT MAX(BPQ.CHILD_OBJID) FROM BOM_PART_QTY BPQ WHERE BPQ.BOM_REPORT_OBJID = PBR.OBJID AND NVL(PARENT_PART_NO, '') = '' AND BPQ.STATUS IN ('adding', 'beforeEdit', 'editing','deleting', 'deploy')) ) QTY2
<!--
(SELECT ARRAY_TO_STRING(ARRAY_AGG(RBI.PART_NAME), ',') FROM REF_BOM_INFO RBI WHERE 1 = 1 AND PBR.OBJID = RBI.PARENT_OBJID AND RBI.LEV = '2') AS UNIT_PART_NAME
-->
FROM
PROJECT_MGMT CM
LEFT OUTER JOIN PMS_WBS_TASK PWT
ON PWT.CONTRACT_OBJID = CM.OBJID
LEFT OUTER JOIN PART_BOM_REPORT PBR
ON PBR.CONTRACT_OBJID = CM.OBJID
AND PBR.UNIT_CODE = PWT.OBJID
LEFT OUTER JOIN SALES_BOM_REPORT SBR
ON SBR.PARENT_OBJID = PBR.OBJID
LEFT OUTER JOIN(
SELECT
<!--
POM.BOM_REPORT_OBJID
-->
POM.CONTRACT_MGMT_OBJID, UNIT_CODE
,SUM(POP.SUPPLY_UNIT_PRICE::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
,SUM(CASE WHEN PM.PART_TYPE IN ('0000063') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_1
,SUM(CASE WHEN PM.PART_TYPE IN ('0000064','0001540','0001398','0001397','0001396') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_2
,SUM(CASE WHEN PM.PART_TYPE IN ('0000065') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_3
,SUM(CASE WHEN PM.PART_TYPE IN ('0000063','0000064','0001540','0001398','0001397','0001396', '0000065') THEN NULL ELSE POP.SUPPLY_UNIT_PRICE::NUMERIC END) AS PRICE_PT_ETC
<!--
-->
FROM
PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
LEFT OUTER JOIN
PART_MNG PM
ON POP.PART_OBJID = PM.OBJID::VARCHAR
WHERE POM.STATUS = 'approvalComplete'
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.ORDER_TYPE_CD = '0001407'
AND TYPE != '0001785'
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
<!--
GROUP BY POM.BOM_REPORT_OBJID
-->
GROUP BY POM.CONTRACT_MGMT_OBJID, UNIT_CODE
) AS S1
<!--
ON PBR.OBJID::VARCHAR = S1.BOM_REPORT_OBJID
-->
ON PBR.CONTRACT_OBJID = S1.CONTRACT_MGMT_OBJID
AND PBR.UNIT_CODE = S1.UNIT_CODE
LEFT OUTER JOIN(
SELECT
POM.BOM_REPORT_OBJID
,SUM(POP.SUPPLY_UNIT_PRICE::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
<!--
,SUM(CASE WHEN PM.PART_TYPE IN ('0000063') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_1
,SUM(CASE WHEN PM.PART_TYPE IN ('0000064') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_2
,SUM(CASE WHEN PM.PART_TYPE IN ('0000065') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_3
,SUM(CASE WHEN PM.PART_TYPE IN ('0000063','0000064') THEN NULL ELSE POP.SUPPLY_UNIT_PRICE::NUMERIC END) AS PRICE_PT_ETC
-->
FROM
PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
LEFT OUTER JOIN
PART_MNG PM
ON POP.PART_OBJID = PM.OBJID::VARCHAR
WHERE POM.STATUS = 'approvalComplete'
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.ORDER_TYPE_CD = '0001408'
AND TYPE != '0001785'
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
GROUP BY POM.BOM_REPORT_OBJID
) AS S2
ON PBR.OBJID::VARCHAR = S2.BOM_REPORT_OBJID
LEFT OUTER JOIN(
SELECT
POM.BOM_REPORT_OBJID
,SUM(POP.SUPPLY_UNIT_PRICE::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
<!--
,SUM(CASE WHEN PM.PART_TYPE IN ('0000063') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_1
,SUM(CASE WHEN PM.PART_TYPE IN ('0000064') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_2
,SUM(CASE WHEN PM.PART_TYPE IN ('0000065') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_3
,SUM(CASE WHEN PM.PART_TYPE IN ('0000063','0000064') THEN NULL ELSE POP.SUPPLY_UNIT_PRICE::NUMERIC END) AS PRICE_PT_ETC
-->
FROM
PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
LEFT OUTER JOIN
PART_MNG PM
ON POP.PART_OBJID = PM.OBJID::VARCHAR
WHERE POM.STATUS = 'approvalComplete'
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND TYPE = '0001785'
<!--
<if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if>
AND POM.ORDER_TYPE_CD = '0001407'
-->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
GROUP BY POM.BOM_REPORT_OBJID
) AS S4
ON PBR.OBJID::VARCHAR = S4.BOM_REPORT_OBJID
LEFT OUTER JOIN(
SELECT
<!--
POM.BOM_REPORT_OBJID
-->
POM.CONTRACT_MGMT_OBJID
,UNIT_CODE
,SUM(NVL(POM.TOTAL_PRICE_ALL, '0')::NUMERIC) AS TOTAL_PRICE_ALL
,SUM(NVL(POM.TOTAL_SUPPLY_PRICE, '0')::NUMERIC) AS TOTAL_SUPPLY_PRICE
,SUM(NVL(POM.TOTAL_REAL_SUPPLY_PRICE, '0')::NUMERIC) AS TOTAL_REAL_SUPPLY_PRICE
,SUM(NVL(POM.TOTAL_SUPPLY_UNIT_PRICE, '0')::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
,SUM(NVL(POM.DISCOUNT_PRICE, '0')::NUMERIC) AS DISCOUNT_PRICE
,SUM(NVL(POM.TOTAL_PRICE, '0')::NUMERIC) AS TOTAL_PRICE
FROM PURCHASE_ORDER_MASTER POM
WHERE POM.STATUS = 'approvalComplete'
<!--
AND POM.ORDER_TYPE_CD = '0001408'
-->
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
<!--
GROUP BY POM.BOM_REPORT_OBJID
-->
GROUP BY POM.CONTRACT_MGMT_OBJID
,UNIT_CODE
) AS S3
ON CM.OBJID = S3.CONTRACT_MGMT_OBJID
AND PWT.OBJID = S3.UNIT_CODE
<!--
ON PBR.CONTRACT_OBJID = S3.CONTRACT_MGMT_OBJID
AND PBR.UNIT_CODE = S3.UNIT_CODE
ON PBR.OBJID::VARCHAR = S3.BOM_REPORT_OBJID
-->
WHERE 1=1
<!-- <if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND CM.OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</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 PBR.UNIT_CODE = #{unit_code}
</if>
) AS T
ORDER BY PROJECT_NO DESC, UNIT_PART_NAME
</select>
<select id="purchaseOrderStatusByProjectSum" parameterType="map" resultType="map">
SELECT
COALESCE(SUM(COALESCE(S1.SUPPLY_UNIT_PRICE, 0)), 0) AS TOTAL_SUPPLY_UNIT_PRICE
FROM PROJECT_MGMT CM
<!--
SALES_BOM_REPORT SBR
,PART_BOM_REPORT PBR
-->
LEFT OUTER JOIN(
SELECT
POM.CONTRACT_MGMT_OBJID
<!--
POM.BOM_REPORT_OBJID
-->
,SUM(POM.TOTAL_SUPPLY_PRICE::NUMERIC) AS TOTAL_SUPPLY_PRICE
,SUM(POM.TOTAL_SUPPLY_UNIT_PRICE::NUMERIC) AS SUPPLY_UNIT_PRICE
<!--
,SUM(POP.SUPPLY_UNIT_PRICE::NUMERIC) AS SUPPLY_UNIT_PRICE
,SUM(POP.SUPPLY_UNIT_VAT_SUM_PRICE::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
-->
FROM
PURCHASE_ORDER_MASTER POM
<!--
,PURCHASE_ORDER_PART POP
LEFT OUTER JOIN
PART_MNG PM
ON POP.PART_OBJID = PM.OBJID::VARCHAR
-->
WHERE POM.STATUS = 'approvalComplete'
<!-- 신규
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.ORDER_TYPE_CD = '0001407'
-->
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
GROUP BY POM.BOM_REPORT_OBJID
) AS S1
<!--
ON PBR.OBJID::VARCHAR = S1.BOM_REPORT_OBJID
-->
ON CM.OBJID::VARCHAR = S1.CONTRACT_MGMT_OBJID
<!--
LEFT OUTER JOIN(
SELECT
POM.BOM_REPORT_OBJID
,SUM(POP.SUPPLY_UNIT_VAT_SUM_PRICE::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
,SUM(CASE WHEN PM.PART_TYPE IN ('0000063') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_1
,SUM(CASE WHEN PM.PART_TYPE IN ('0000064') THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS PRICE_PT_2
FROM
PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
LEFT OUTER JOIN
PART_MNG PM
ON POP.PART_OBJID = PM.OBJID::VARCHAR
WHERE POM.STATUS = 'approvalComplete'
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POM.ORDER_TYPE_CD = '0001408'
<if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if>
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
GROUP BY POM.BOM_REPORT_OBJID
) AS S2
ON PBR.OBJID::VARCHAR = S2.BOM_REPORT_OBJID
WHERE SBR.PARENT_OBJID = PBR.OBJID
AND PBR.CONTRACT_OBJID = CM.OBJID
-->
WHERE 1=1
<!-- <if test="project_no !=null and project_no != '' ">
AND CM.OBJID = #{project_no}
</if> -->
<!-- <if test="project_no_array != null and project_no_array.length > 0">
AND CM.OBJID IN
<foreach item="item" index="index" collection="project_no_array" open="(" separator="," close=")">
#{item}
</foreach>
</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 PBR.UNIT_CODE = #{unit_code}
</if>
</select>
<select id="purchaseOrderStatusAmountBySupply" parameterType="map" resultType="map">
SELECT ASM.OBJID
,ASM.SUPPLY_NAME
,S1.*
FROM ADMIN_SUPPLY_MNG ASM
,( SELECT POM.PARTNER_OBJID
,SUM(POP.SUPPLY_UNIT_PRICE::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '01' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M01
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '02' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M02
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '03' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M03
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '04' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M04
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '05' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M05
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '06' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M06
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '07' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M07
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '08' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M08
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '09' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M09
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '10' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M10
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '11' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M11
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '12' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M12
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
,PROJECT_MGMT CM
WHERE POM.STATUS = 'approvalComplete'
AND POM.CONTRACT_MGMT_OBJID = CM.OBJID
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
<if test="Year !=null and Year != '' ">
AND TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'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="sales_mng_user_id !=null and sales_mng_user_id != '' ">
AND POM.SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
GROUP BY POM.PARTNER_OBJID
) AS S1
WHERE 1=1
AND ASM.OBJID::VARCHAR = S1.PARTNER_OBJID
<if test="partner_objid !=null and partner_objid != '' ">
AND ASM.OBJID::VARCHAR = #{partner_objid}
</if>
ORDER BY ASM.SUPPLY_NAME
</select>
<!-- purchaseOrderStatusAmountBySupply 쿼리의 총계만 계산하여 가져온다. -->
<select id="purchaseOrderStatusAmountBySupply_sum" parameterType="map" resultType="map">
SELECT
COALESCE(SUM(TOTAL_SUPPLY_UNIT_PRICE),'0') AS TOTAL_SUPPLY_UNIT_PRICE,
COALESCE(SUM(M01),'0') AS M01,
COALESCE(SUM(M02),'0') AS M02,
COALESCE(SUM(M03),'0') AS M03,
COALESCE(SUM(M04),'0') AS M04,
COALESCE(SUM(M05),'0') AS M05,
COALESCE(SUM(M06),'0') AS M06,
COALESCE(SUM(M07),'0') AS M07,
COALESCE(SUM(M08),'0') AS M08,
COALESCE(SUM(M09),'0') AS M09,
COALESCE(SUM(M10),'0') AS M10,
COALESCE(SUM(M11),'0') AS M11,
COALESCE(SUM(M12),'0') AS M12
FROM(
SELECT ASM.OBJID
,ASM.SUPPLY_NAME
,S1.*
FROM ADMIN_SUPPLY_MNG ASM
,( SELECT POM.PARTNER_OBJID
,SUM(POP.SUPPLY_UNIT_PRICE::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '01' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M01
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '02' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M02
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '03' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M03
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '04' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M04
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '05' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M05
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '06' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M06
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '07' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M07
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '08' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M08
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '09' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M09
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '10' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M10
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '11' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M11
,SUM(CASE WHEN TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'MM') = '12' THEN POP.SUPPLY_UNIT_PRICE::NUMERIC ELSE NULL END) AS M12
FROM PURCHASE_ORDER_MASTER POM
,PURCHASE_ORDER_PART POP
,PROJECT_MGMT CM
WHERE POM.STATUS = 'approvalComplete'
AND POM.CONTRACT_MGMT_OBJID = CM.OBJID
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
<if test="Year !=null and Year != '' ">
AND TO_CHAR(TO_DATE(POM.DELIVERY_DATE,'YYYY-MM-DD'),'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="sales_mng_user_id !=null and sales_mng_user_id != '' ">
AND POM.SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
GROUP BY POM.PARTNER_OBJID
) AS S1
WHERE 1=1
AND ASM.OBJID::VARCHAR = S1.PARTNER_OBJID
<if test="partner_objid !=null and partner_objid != '' ">
AND ASM.OBJID::VARCHAR = #{partner_objid}
</if>
ORDER BY ASM.SUPPLY_NAME
) AS TOTAL_SUM
</select>
<!-- 공급업체에 해당하는 정보 목록 Count를 가져온다. -->
<select id="getdeliveryMngInvalidListCnt" parameterType="map" resultType="map">
SELECT
CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE,
TOTAL_CNT::numeric
FROM (
SELECT
COUNT(1)::float TOTAL_CNT
FROM(
SELECT TBL.*
FROM(
SELECT
CM.PROJECT_NO
,CM.PROJECT_NAME
,CM.OBJID AS CONTRACT_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
<!-- ,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.UNIT_CODE) AS UNIT_NAME -->
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.UNIT_CODE
,(SELECT PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NAME
,(SELECT PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NO
,DH.ORDER_QTY
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,DH.INSPECT_DATE
,DH.DEFECT_QTY
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_REASON) AS DEFECT_REASON_NAME
,DH.DEFECT_REASON
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_RESP) AS DEFECT_RESP_NAME
,DH.DEFECT_RESP
,(SELECT (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS DESIGN_NAME
,(SELECT PM.WRITER FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS DESIGN_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,DH.DEFECT_CONTENT
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_ACTION) AS DEFECT_ACTION_NAME
,DH.DEFECT_ACTION
,POM.PURCHASE_ORDER_NO
,POM.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.PARTNER_OBJID
,POM.SALES_MNG_USER_ID
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,DH.OBJID
,SUBSTR(PURCHASE_DATE,0,5) AS PURCHASE_DATE
FROM PURCHASE_ORDER_MASTER AS POM
,PURCHASE_ORDER_PART AS POP
,PROJECT_MGMT AS CM
,DELIVERY_HISTORY DH
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POP.PART_OBJID = DH.PART_OBJID
AND POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
AND DH.DEFECT_QTY::INTEGER > 0
) TBL WHERE 1=1
<if test="Year != null and Year !=''">
AND PURCHASE_DATE = #{Year}
</if>
<if test="project_no != null and project_no != ''">
AND CONTRACT_OBJID = #{project_no}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
<if test="part_no != null and part_no != ''">
AND UPPER(PART_NO) LIKE UPPER('%${part_no}%')
</if>
<if test="partner_objid != null and partner_objid != ''">
AND PARTNER_OBJID = #{partner_objid}
</if>
<if test="part_name != null and part_name != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${part_name}%')
</if>
<if test="defect_reason != null and defect_reason != ''">
AND DEFECT_REASON = #{defect_reason}
</if>
<if test="defect_resp != null and defect_resp != ''">
AND DEFECT_RESP = #{defect_resp}
</if>
<if test="defect_action != null and defect_action != ''">
AND DEFECT_ACTION = #{defect_action}
</if>
<if test="design_user_id != null and design_user_id != ''">
AND DESIGN_USER_ID = #{design_user_id}
</if>
<if test="sales_mng_user_id != null and sales_mng_user_id != ''">
AND SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
) TBL WHERE 1=1
)A WHERE 1=1
</select>
<!-- 공급업체에 해당하는 정보 목록을 가져온다. -->
<select id="getdeliveryMngInvalidList" parameterType="map" resultType="map">
SELECT *
FROM(
SELECT TBL.*, ROW_NUMBER() OVER(ORDER BY DEFECT_ACTION DESC) RNUM
FROM(
SELECT TBL.*
FROM(
SELECT
CM.PROJECT_NO
,CM.PROJECT_NAME
,CM.OBJID AS CONTRACT_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
<!-- ,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.UNIT_CODE) AS UNIT_NAME -->
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.UNIT_CODE
,(SELECT PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NAME
,(SELECT PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NO
,DH.ORDER_QTY
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,DH.INSPECT_DATE
,DH.DEFECT_QTY
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_REASON) AS DEFECT_REASON_NAME
,DH.DEFECT_REASON
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_RESP) AS DEFECT_RESP_NAME
,DH.DEFECT_RESP
,(SELECT (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS DESIGN_NAME
,(SELECT PM.WRITER FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS DESIGN_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,DH.DEFECT_CONTENT
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_ACTION) AS DEFECT_ACTION_NAME
,DH.DEFECT_ACTION
,DH.DEFECT_ACTION_DATE
,POM.PURCHASE_ORDER_NO
,POM.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.PARTNER_OBJID
,POM.SALES_MNG_USER_ID
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,DH.OBJID
,SUBSTR(PURCHASE_DATE,0,5) AS PURCHASE_DATE
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = DH.OBJID AND DOC_TYPE='DEFECT_ACTION_IMG_01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT
,APPR.APPROVAL_OBJID
,APPR.ROUTE_OBJID
,APPR.APPR_STATUS
,APPR.APPR_STATUS_NAME
FROM PURCHASE_ORDER_MASTER AS POM
,PURCHASE_ORDER_PART AS POP
,PROJECT_MGMT AS CM
,DELIVERY_HISTORY DH
LEFT OUTER JOIN (SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE UPPER(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
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 ('DEFECT_ACTION')
) AS APPR
ON DH.OBJID::NUMERIC = APPR.TARGET_OBJID
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POP.PART_OBJID = DH.PART_OBJID
AND POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
AND DH.DEFECT_QTY::INTEGER > 0
) TBL
WHERE 1=1
<if test="Year != null and Year !=''">
AND PURCHASE_DATE = #{Year}
</if>
<if test="project_no != null and project_no != ''">
AND CONTRACT_OBJID = #{project_no}
</if>
<if test="unit_code != null and unit_code != ''">
AND UNIT_CODE = #{unit_code}
</if>
<if test="part_no != null and part_no != ''">
AND UPPER(PART_NO) LIKE UPPER('%${part_no}%')
</if>
<if test="partner_objid != null and partner_objid != ''">
AND PARTNER_OBJID = #{partner_objid}
</if>
<if test="part_name != null and part_name != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${part_name}%')
</if>
<if test="defect_reason != null and defect_reason != ''">
AND DEFECT_REASON = #{defect_reason}
</if>
<if test="defect_resp != null and defect_resp != ''">
AND DEFECT_RESP = #{defect_resp}
</if>
<if test="defect_action != null and defect_action != ''">
AND DEFECT_ACTION = #{defect_action}
</if>
<if test="design_user_id != null and design_user_id != ''">
AND DESIGN_USER_ID = #{design_user_id}
</if>
<if test="sales_mng_user_id != null and sales_mng_user_id != ''">
AND SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
<if test="appr_status !=null and appr_status != '' ">
AND APPR.APPR_STATUS = #{appr_status}
</if>
)TBL WHERE 1=1
) A WHERE 1=1
AND <![CDATA[ RNUM::integer <= #{PAGE_END}::integer ]]>
AND <![CDATA[ RNUM::integer >= #{PAGE_START}::integer]]>
</select>
<select id="getdeliveryMngInvalidGridList" parameterType="map" resultType="map">
SELECT
POM.PURCHASE_ORDER_NO
,CM.PROJECT_NO
,CM.PROJECT_NAME
,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
,POP.ORDER_QTY
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,(SELECT (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = AP.PART_OBJID) AS DESIGN_NAME
<!-- ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = AP.OBJID AND DOC_TYPE='DEFECT_ACTION_IMG_01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT -->
,CASE WHEN AP.DEFECT_ACTION_TITLE IS NOT NULL THEN 1
ELSE 0
END CU01_CNT
,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
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = AP.DEFECT_ACTION) AS DEFECT_ACTION_NAME
,AP.DEFECT_ACTION
,AP.DEFECT_ACTION_DATE
<!--
,CM.OBJID AS CONTRACT_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.UNIT_CODE) AS UNIT_NAME
,(SELECT TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.UNIT_CODE
,(SELECT PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NAME
,(SELECT PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NO
,DH.ORDER_QTY
,DH.INSPECT_DATE
,DH.DEFECT_QTY
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_REASON) AS DEFECT_REASON_NAME
,DH.DEFECT_REASON
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_RESP) AS DEFECT_RESP_NAME
,DH.DEFECT_RESP
,(SELECT (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS DESIGN_NAME
,(SELECT PM.WRITER FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS DESIGN_USER_ID
,DH.DEFECT_CONTENT
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_ACTION) AS DEFECT_ACTION_NAME
,DH.DEFECT_ACTION
,DH.DEFECT_ACTION_DATE
,POM.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.PARTNER_OBJID
,POM.SALES_MNG_USER_ID
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,DH.OBJID
,SUBSTR(PURCHASE_DATE,0,5) AS PURCHASE_DATE -->
,APPR.APPROVAL_OBJID
,APPR.ROUTE_OBJID
,APPR.APPR_STATUS
,APPR.APPR_STATUS_NAME
FROM
PURCHASE_ORDER_MASTER AS POM
,PURCHASE_ORDER_PART AS POP
,PROJECT_MGMT AS CM
,ARRIVAL_PLAN AP
<!-- ,DELIVERY_HISTORY DH -->
LEFT OUTER JOIN (SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE UPPER(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
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 ('DEFECT_ACTION')
) AS APPR
ON AP.OBJID::NUMERIC = APPR.TARGET_OBJID
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POP.OBJID =AP.ORDER_PART_OBJID
AND AP.ERROR_QTY !=''
AND AP.ERROR_QTY !='0'
<!-- AND POP.PART_OBJID = DH.PART_OBJID
AND POP.OBJID = DH.PURCHASE_ORDER_PART_OBJID
AND DH.DEFECT_QTY::INTEGER > 0 -->
<if test="Year != null and Year !=''">
AND SUBSTR(PURCHASE_DATE,0,5) = #{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 UNIT_CODE = #{unit_code}
</if>
<if test="part_no != null and part_no != ''">
AND UPPER(PART_NO) LIKE UPPER('%${part_no}%')
</if>
<if test="partner_objid != null and partner_objid != ''">
AND PARTNER_OBJID = #{partner_objid}
</if>
<if test="part_name != null and part_name != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${part_name}%')
</if>
<if test="defect_reason != null and defect_reason != ''">
AND ERROR_REASON = #{defect_reason}
<!-- AND DEFECT_REASON = #{defect_reason} -->
</if>
<if test="defect_resp != null and defect_resp != ''">
AND ATTRIBUTION = #{defect_resp}
<!-- AND DEFECT_RESP = #{defect_resp} -->
</if>
<if test="defect_action != null and defect_action != ''">
AND DEFECT_ACTION = #{defect_action}
</if>
<if test="design_user_id != null and design_user_id != ''">
AND (SELECT PM.WRITER FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = AP.PART_OBJID) = #{design_user_id}
</if>
<if test="sales_mng_user_id != null and sales_mng_user_id != ''">
AND SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
<if test="appr_status !=null and appr_status != '' ">
AND APPR.APPR_STATUS = #{appr_status}
</if>
</select>
<!-- 부적합품 정보 조회 -->
<select id="getdeliveryMngInvalidInfo" parameterType="map" resultType="map">
SELECT
POM.PURCHASE_ORDER_NO
,CM.PROJECT_NO
,CM.PROJECT_NAME
,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
,POP.SPEC
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,(SELECT (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = AP.PART_OBJID) AS DESIGN_NAME
<!-- ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = DH.OBJID AND DOC_TYPE='DEFECT_ACTION_IMG_01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT -->
,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
,AP.DEFECT_CONTENT
,AP.DEFECT_ACTION
,AP.DEFECT_NOTE
,AP.DEFECT_ACTION_DATE
,AP.DEFECT_ACTION_TITLE
,AP.RE_ARRIVAL_PLAN_DATE
,APPR.APPROVAL_OBJID
,APPR.ROUTE_OBJID
,APPR.APPR_STATUS
,APPR.APPR_STATUS_NAME
FROM
PURCHASE_ORDER_MASTER AS POM
,PURCHASE_ORDER_PART AS POP
,PROJECT_MGMT AS CM
,ARRIVAL_PLAN AP
LEFT OUTER JOIN (SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE UPPER(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
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 ('DEFECT_ACTION')
) AS APPR
ON AP.OBJID::NUMERIC = APPR.TARGET_OBJID
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
AND POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
AND POP.OBJID =AP.ORDER_PART_OBJID
AND AP.ERROR_QTY !=''
AND AP.ERROR_QTY !='0'
AND AP.OBJID = #{OBJID}
</select>
<delete id="updateinvalidAction" parameterType="map">
UPDATE ARRIVAL_PLAN
<!-- UPDATE DELIVERY_HISTORY -->
SET DEFECT_ACTION = #{defect_action}
, DEFECT_CONTENT = #{defect_content}
, DEFECT_ACTION_DATE = #{defect_action_date}
, RE_ARRIVAL_PLAN_DATE = #{delivery_plan_date}
<!-- , DELIVERY_PLAN_DATE = #{delivery_plan_date} -->
, DEFECT_ACTION_TITLE = #{defect_action_title}
, DEFECT_NOTE = #{defect_note}
WHERE OBJID IN
<foreach collection="checkArr" item="objkey" index="index" separator="," open="(" close=")">
#{objkey}
</foreach>
</delete>
<select id="bacodePrintInfo" parameterType="map" resultType="map">
SELECT
* FROM PURCHASE_ORDER_PART
WHERE OBJID = #{OBJID}
</select>
<select id="SalesRequestPartListBySupply" parameterType="map" resultType="map">
SELECT
PART_OBJID
,SRP.QTY AS ORDER_QTY
,PM.PART_NAME
,PM.PART_NO
,PM.SPEC
,PM.MAKER
,(COALESCE((SELECT
SUM(CASE WHEN (RECEIPT_QTY IS NULL OR RECEIPT_QTY ='')
THEN 0
ELSE RECEIPT_QTY::NUMERIC END)
FROM INVENTORY_MGMT IM, INVENTORY_MGMT_IN AS O WHERE O.PARENT_OBJID = IM.OBJID AND IM.CONTRACT_OBJID = SRM.PROJECT_NO AND IM.UNIT = SRM.UNIT_NAME AND IM.PART_OBJID = SRP.PART_OBJID
),0) - COALESCE((SELECT
SUM(CASE WHEN (OUT_QTY IS NULL OR OUT_QTY ='')
THEN 0
ELSE OUT_QTY::NUMERIC END)
FROM INVENTORY_MGMT IM, INVENTORY_MGMT_OUT AS O WHERE O.PARENT_OBJID = IM.OBJID AND IM.CONTRACT_OBJID = SRM.PROJECT_NO AND IM.UNIT = SRM.UNIT_NAME AND IM.PART_OBJID = SRP.PART_OBJID
),0)) AS STOCK_QTY
FROM
SALES_REQUEST_MASTER SRM
LEFT OUTER JOIN
SALES_REQUEST_PART SRP
ON SRM.OBJID::VARCHAR = SRP.SALES_REQUEST_MASTER_OBJID
LEFT OUTER JOIN
PART_MNG PM ON SRP.PART_OBJID = PM.OBJID::VARCHAR
<!--
LEFT OUTER JOIN
INVENTORY_MGMT IM
ON IM.CONTRACT_OBJID = SRM.PROJECT_NO
AND IM.UNIT = SRM.UNIT_NAME
AND IM.PART_OBJID = SRP.PART_OBJID
-->
WHERE 1=1
AND SRM.OBJID = #{SALES_REQUEST_MASTER_OBJID}
AND SRP.VENDOR_PM = #{PARTNER_OBJID}
<!-- AND PARTNER_OBJID = #{PARTNER_OBJID} -->
</select>
<select id="purchaseOrderStatusGoods" parameterType="map" resultType="map">
SELECT
T.*
,(T.DESIGN_CNT - T.OUT_CNT - T.STOCK_CNT) as SHORTAGE_CNT
FROM (
SELECT
PM.OBJID
,PM.PART_NO
,PM.PART_NAME
,PM.MAKER
,PM.SPEC
,PM.REVISION
,P.TOTAL_PURCHASE_ORDER_CNT /* 발주수량 */
,P.PURCHASE_ORDER_MASTER_CNT /* 발주수 */
,(COALESCE((SELECT SUM(CASE WHEN (RECEIPT_QTY IS NULL OR RECEIPT_QTY ='')
THEN 0
ELSE (RECEIPT_QTY::numeric - coalesce(MOVE_QTY::numeric, 0)) END)
FROM INVENTORY_MGMT_IN AS O
,INVENTORY_MGMT AS S_IM
WHERE S_IM.PART_OBJID = PM.OBJID
AND O.PARENT_OBJID = S_IM.OBJID
),0)
- COALESCE((SELECT SUM(CASE WHEN (OUT_QTY IS NULL OR OUT_QTY ='')
THEN 0
ELSE OUT_QTY::NUMERIC END)
FROM INVENTORY_MGMT_OUT AS O
,INVENTORY_MGMT AS S_IM
WHERE S_IM.PART_OBJID = PM.OBJID
AND O.PARENT_OBJID = S_IM.OBJID
),0)) AS STOCK_CNT /* 보유수량 */
,COALESCE((SELECT SUM(CASE WHEN (QTY IS NULL OR QTY ='') THEN 0
ELSE QTY::numeric END)
FROM BOM_PART_QTY AS BPQ
WHERE BPQ.PART_NO = PM.OBJID
AND BPQ.STATUS = 'deploy'
),0) as DESIGN_CNT /* 설게수량 */
,COALESCE((SELECT SUM(CASE WHEN (OUT_QTY IS NULL OR OUT_QTY ='') THEN 0
ELSE OUT_QTY::NUMERIC END)
FROM INVENTORY_MGMT_OUT AS O
,INVENTORY_MGMT AS S_IM
WHERE S_IM.PART_OBJID = PM.OBJID
AND O.PARENT_OBJID = S_IM.OBJID
and (O.contract_mgmt_objid is not null and O.contract_mgmt_objid != '')
and (O.UNIT is not null and O.UNIT != '')
),0) as OUT_CNT /* 설게불출수량 */
FROM
PART_MNG PM
LEFT OUTER JOIN (
SELECT
PART_OBJID
,SUM(NVL(REAL_ORDER_QTY, '0')::numeric) as TOTAL_PURCHASE_ORDER_CNT
,COUNT(1) as PURCHASE_ORDER_MASTER_CNT
FROM
PURCHASE_ORDER_PART P
LEFT OUTER JOIN PURCHASE_ORDER_MASTER POM
ON P.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
WHERE POM.MULTI_MASTER_YN != 'N' OR POM.MULTI_MASTER_YN IS NULL
AND POM.STATUS = 'approvalComplete'
GROUP BY PART_OBJID
) p
ON P.PART_OBJID = PM.OBJID
WHERE PM.IS_NEW = '1'
AND PM.IS_LONGD = '1'
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_MAKER != null and SEARCH_MAKER != ''">
AND UPPER(MAKER) LIKE UPPER('%${SEARCH_MAKER}%')
</if>
ORDER BY PM.PART_NO, (CASE WHEN PM.REVISION LIKE 'RE%' THEN 0 ELSE 1 END, PM.REVISION) DESC
) T
</select>
<select id="designQTYGridList" parameterType="map" resultType="map">
SELECT
T.*
,(DESIGN_CNT::numeric - OUT_CNT) as STOCK_CNT
FROM (
SELECT
BPQ.BOM_REPORT_OBJID
,BPQ.QTY AS DESIGN_CNT
,PM.OBJID AS PART_OBJID
,PM.PART_NO
,PM.PART_NAME
,PBR.CONTRACT_OBJID
,(SELECT PROJECT_NO FROM PROJECT_MGMT P WHERE P.OBJID = PBR.CONTRACT_OBJID ) as PROJECT_NO
,(SELECT REQ_DEL_DATE FROM PROJECT_MGMT P WHERE P.OBJID = PBR.CONTRACT_OBJID )
,PBR.UNIT_CODE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = PBR.UNIT_CODE) AS UNIT_NAME
,COALESCE((SELECT SUM(CASE WHEN (OUT_QTY IS NULL OR OUT_QTY ='') THEN 0
ELSE OUT_QTY::NUMERIC END)
FROM INVENTORY_MGMT_OUT AS O
,INVENTORY_MGMT AS S_IM
WHERE S_IM.PART_OBJID = PM.OBJID
AND O.PARENT_OBJID = S_IM.OBJID
AND O.CONTRACT_MGMT_OBJID = PBR.CONTRACT_OBJID
AND O.UNIT = PBR.UNIT_CODE
),0) as OUT_CNT
FROM
BOM_PART_QTY BPQ
LEFT OUTER JOIN PART_MNG PM
ON PM.OBJID = BPQ.PART_NO
LEFT OUTER JOIN PART_BOM_REPORT PBR
ON PBR.OBJID = BPQ.BOM_REPORT_OBJID
WHERE BPQ.STATUS = 'deploy'
AND BPQ.PART_NO = #{objId}
) T
</select>
<select id="purchaseOrderQTYGridList" parameterType="map" resultType="map">
SELECT
POM.PURCHASE_ORDER_NO
,POM.PURCHASE_DATE
,PM.PART_NO
,PM.PART_NAME
,P.REAL_ORDER_QTY
,(SELECT PROJECT_NO FROM PROJECT_MGMT PROJ WHERE PROJ.OBJID = POM.CONTRACT_MGMT_OBJID ) as PROJECT_NO
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
FROM
PURCHASE_ORDER_PART P
LEFT OUTER JOIN PURCHASE_ORDER_MASTER POM
ON P.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
LEFT OUTER JOIN PART_MNG PM
ON PM.OBJID = P.PART_OBJID
WHERE (POM.MULTI_MASTER_YN != 'N' OR POM.MULTI_MASTER_YN IS NULL)
AND POM.STATUS = 'approvalComplete'
AND P.PART_OBJID = #{objId}
</select>
<!-- 발주서 메일 발송 상태 업데이트 -->
<update id="updateMailSendStatus" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET
MAIL_SEND_YN = #{MAIL_SEND_YN}
,MAIL_SEND_DATE = #{MAIL_SEND_DATE}
WHERE OBJID = #{OBJID}
</update>
<!-- 입고관리 데이터 드롭다운용 조회 (반제품검사 팝업에서 사용) -->
<!-- ARRIVAL_PLAN 테이블에서 입고완료된 품목 조회 (1차+2차 합산) -->
<select id="getDeliveryListForDropdown" parameterType="map" resultType="map">
SELECT
AP.ORDER_PART_OBJID AS OBJID
,AP.PART_OBJID
,COALESCE(CASE WHEN POM.TYPE IN ('0001070','0001069') THEN PM.PART_NO ELSE POP.PART_NO END, PM.PART_NO, '') AS PART_NO
,COALESCE(POP.PART_NAME, PM.PART_NAME, '') AS PART_NAME
,COALESCE(POP.PART_NAME, PM.PART_NAME, '') AS MODEL_NAME
,COALESCE(POM.PURCHASE_ORDER_NO, '') AS WORK_ORDER_NO
,COALESCE(SUM(AP.RECEIPT_QTY::NUMERIC), 0) AS RECEIPT_QTY
FROM ARRIVAL_PLAN AP
LEFT JOIN PURCHASE_ORDER_PART POP ON POP.OBJID = AP.ORDER_PART_OBJID
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = AP.PART_OBJID OR PM.OBJID = POP.PART_OBJID
LEFT JOIN PURCHASE_ORDER_MASTER POM ON POM.OBJID = AP.PARENT_OBJID
WHERE AP.RECEIPT_QTY IS NOT NULL
AND AP.RECEIPT_QTY::NUMERIC > 0
AND AP.INVENTORY_STATUS = 'Y'
GROUP BY AP.ORDER_PART_OBJID, AP.PART_OBJID, POP.PART_NO, POP.PART_NAME, PM.PART_NO, PM.PART_NAME, POM.PURCHASE_ORDER_NO, POM.TYPE
ORDER BY PART_NO
</select>
</mapper>