Files
wace_plm/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml
2025-12-29 09:25:42 +09:00

6126 lines
224 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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
,S1.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
,COALESCE(POM.FORM_TYPE, '') AS FORM_TYPE
<!-- ,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_NOT_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(AP_AGG.MAX_RECEIPT_DATE) AS CUR_DELIVERY_DATE
,SUM(COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0)) AS TOTAL_DELIVERY_QTY
-- 발주금액 = 단가 × 발주수량
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * COALESCE(POP.ORDER_QTY::NUMERIC, 0)) AS TOTAL_SUPPLY_PRICE
-- 입고금액 = 단가 × 입고수량
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0)) AS TOTAL_DELIVERY_PRICE
-- 미입고금액 = 단가 × (발주수량 - 입고수량)
,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * (COALESCE(POP.ORDER_QTY::NUMERIC, 0) - COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0))) AS TOTAL_NOT_DELIVERY_PRICE
FROM PURCHASE_ORDER_PART POP
LEFT OUTER JOIN (
-- ARRIVAL_PLAN을 ORDER_PART_OBJID별로 먼저 집계
SELECT ORDER_PART_OBJID
,SUM(RECEIPT_QTY::NUMERIC) AS SUM_RECEIPT_QTY
,MAX(RECEIPT_DATE) AS MAX_RECEIPT_DATE
FROM ARRIVAL_PLAN
GROUP BY ORDER_PART_OBJID
) AP_AGG ON POP.OBJID = AP_AGG.ORDER_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>