Files
wace_plm/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml
2025-11-25 12:02:52 +09:00

2777 lines
78 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="salesMng">
<!-- Part 관리 기본 조회 -->
<sql id="partMngBase">
(
SELECT
P.OBJID,
P.PRODUCT_MGMT_OBJID,
P.UPG_NO,
P.PART_NO,
P.PART_NAME,
P.UNIT,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = P.UNIT) AS UNIT_TITLE,
P.QTY,
P.SPEC,
P.MATERIAL,
P.WEIGHT,
P.PART_TYPE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
P.REMARK,
P.ES_SPEC,
P.MS_SPEC,
P.CHANGE_OPTION,
P.DESIGN_APPLY_POINT,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = P.DESIGN_APPLY_POINT) AS DESIGN_APPLY_POINT_TITLE,
P.MANAGEMENT_FLAG,
P.REVISION,
P.STATUS,
P.REG_DATE,
P.EDIT_DATE,
P.WRITER,
P.IS_LAST,
(SELECT EO_NO FROM EO_MNG AS EO WHERE EO.OBJID::varchar = P.EO) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG AS EO WHERE EO.OBJID::varchar = P.EO) AS EO_DATE,
P.EO,
P.EO_TEMP,
AF.SAVED_FILE_NAME,
AF.REAL_FILE_NAME,
REPLACE(AF.FILE_PATH, '\', '\\') AS FILE_PATH,
case when CAD.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU01_CNT,
case when DRAWING.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU02_CNT,
case when PDF.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU03_CNT,
case when PDFDRA.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU_TOTAL_CNT,
AF_ECD.SAVED_FILE_NAME AS ECD_SAVED_FILE_NAME,
AF_ECD.REAL_FILE_NAME AS ECD_REAL_FILE_NAME,
REPLACE(AF_ECD.FILE_PATH, '\', '\\') AS ECD_FILE_PATH,
CASE
WHEN AF_ECD.SAVED_FILE_NAME IS NOT NULL THEN 'Y'
ELSE 'N'
END ECD_FLAG
FROM
PART_MNG P
LEFT OUTER JOIN
(
SELECT
TARGET_OBJID,
SAVED_FILE_NAME,
REAL_FILE_NAME,
FILE_PATH,
DOC_TYPE
FROM ATTACH_FILE_INFO
WHERE 1 = 1
AND DOC_TYPE IN ('PART_SHAPE_IMG')
AND STATUS = 'Active'
) AF
ON P.OBJID::NUMERIC = AF.TARGET_OBJID
LEFT OUTER JOIN
(
SELECT
TARGET_OBJID,
SAVED_FILE_NAME,
REAL_FILE_NAME,
FILE_PATH,
DOC_TYPE
FROM ATTACH_FILE_INFO
WHERE 1 = 1
AND DOC_TYPE IN ('ECD_DOC')
AND STATUS = 'Active'
) AF_ECD
ON P.OBJID::NUMERIC = AF_ECD.TARGET_OBJID
LEFT OUTER JOIN
(
SELECT
TARGET_OBJID,
SAVED_FILE_NAME,
REAL_FILE_NAME,
FILE_PATH,
DOC_TYPE
FROM ATTACH_FILE_INFO
WHERE 1 = 1
AND DOC_TYPE IN ('3D_CAD')
AND STATUS = 'Active'
) CAD
ON P.OBJID::NUMERIC = CAD.TARGET_OBJID
LEFT OUTER JOIN
(
SELECT
TARGET_OBJID,
SAVED_FILE_NAME,
REAL_FILE_NAME,
FILE_PATH,
DOC_TYPE
FROM ATTACH_FILE_INFO
WHERE 1 = 1
AND DOC_TYPE IN ('2D_DRAWING_CAD')
AND STATUS = 'Active'
) DRAWING
ON P.OBJID::NUMERIC = DRAWING.TARGET_OBJID
LEFT OUTER JOIN
(
SELECT
TARGET_OBJID,
SAVED_FILE_NAME,
REAL_FILE_NAME,
FILE_PATH,
DOC_TYPE
FROM ATTACH_FILE_INFO
WHERE 1 = 1
AND DOC_TYPE IN ('2D_PDF_CAD')
AND STATUS = 'Active'
) PDF
ON P.OBJID::NUMERIC = PDF.TARGET_OBJID
LEFT OUTER JOIN
(
SELECT
TARGET_OBJID,
SAVED_FILE_NAME,
REAL_FILE_NAME,
FILE_PATH,
DOC_TYPE
FROM ATTACH_FILE_INFO
WHERE 1 = 1
AND DOC_TYPE IN ('2D_PDF_CAD','2D_DRAWING_CAD')
AND STATUS = 'Active'
) PDFDRA
ON P.OBJID::NUMERIC = PDFDRA.TARGET_OBJID
)
</sql>
<update id="mergeSalesMngBOM" parameterType="map">
INSERT INTO SALES_BOM_PART_QTY
(
SALES_BOM_OBJID
,OBJID
,BOM_REPORT_OBJID
,PRODUCT_TYPE_CODE
,PARTNER_OBJID
,PARTNER_PRICE
,PARTNER_REMARK
,REGDATE
,PART_OBJID
,SALES_PART_CODE
,PALETTE_CODE
,SOURCING_CODE
,PROCESS1_CODE
,PROCESS2_CODE
,PROCESS3_CODE
,PROCESS4_CODE
)
VALUES
(
#{SALES_BOM_OBJID}
,#{OBJID}
,#{BOM_REPORT_OBJID}
,#{PRODUCT_TYPE_CODE}
,#{PARTNER_OBJID}
,#{PARTNER_PRICE}
,#{PARTNER_REMARK}
,NOW()
,#{PART_OBJID}
,#{SALES_PART_CODE}
,#{PALETTE_CODE}
,#{SOURCING_CODE}
,#{PROCESS1_CODE}
,#{PROCESS2_CODE}
,#{PROCESS3_CODE}
,#{PROCESS4_CODE}
) ON CONFLICT (OBJID) DO
UPDATE
SET
PRODUCT_TYPE_CODE = #{PRODUCT_TYPE_CODE}
,PARTNER_OBJID = #{PARTNER_OBJID}
,PARTNER_PRICE = #{PARTNER_PRICE}
,PARTNER_REMARK = #{PARTNER_REMARK}
,SALES_PART_CODE = #{SALES_PART_CODE}
,PALETTE_CODE = #{PALETTE_CODE}
,SOURCING_CODE = #{SOURCING_CODE}
,PROCESS1_CODE = #{PROCESS1_CODE}
,PROCESS2_CODE = #{PROCESS2_CODE}
,PROCESS3_CODE = #{PROCESS3_CODE}
,PROCESS4_CODE = #{PROCESS4_CODE}
</update>
<update id="mergeSalesBOMReport" parameterType="map">
INSERT INTO SALES_BOM_REPORT
(
BOM_REPORT_OBJID,
PRODUCT_MGMT_OBJID,
PRODUCT_MGMT_SPEC,
PRODUCT_MGMT_UPG,
PRODUCT_MGMT_VC,
WRITER,
REGDATE,
STATUS,
DEPLOY_DATE,
REV,
SPEC_NAME,
NOTE
)VALUES(
#{BOM_REPORT_OBJID},
#{PRODUCT_MGMT_OBJID},
#{PRODUCT_MGMT_SPEC},
#{PRODUCT_MGMT_UPG},
#{PRODUCT_MGMT_VC},
#{WRITER},
NOW(),
#{STATUS},
#{DEPLOY_DATE},
#{REV},
#{SPEC_NAME},
#{NOTE}
) ON CONFLICT (BOM_REPORT_OBJID) DO
UPDATE
SET
WRITER = #{WRITER}
</update>
<!-- <update id="mergeSalesMngBOM" parameterType="map">
INSERT INTO SALES_BOM_PART_QTY
(
SALES_BOM_OBJID
,OBJID
,BOM_REPORT_OBJID
,PARENT_OBJID
,CHILD_OBJID
,PARENT_PART_NO
,PART_NO
,QTY
,PRODUCT_TYPE_CODE
,FIRST_PARTNER_OBJID
,FIRST_PARTNER_PRICE
,FIRST_PARTNER_QTY
,SECOND_PARTNER_OBJID
,SECOND_PARTNER_PRICE
,SECOND_PARTNER_QTY
,THIRD_PARTNER_OBJID
,THIRD_PARTNER_PRICE
,THIRD_PARTNER_QTY
,REGDATE
)
VALUES
(
#{SALES_BOM_OBJID}
,#{OBJID}
,#{BOM_REPORT_OBJID}
,#{PARENT_OBJID}
,#{CHILD_OBJID}
,#{PARENT_PART_NO}
,#{PART_NO}
,#{QTY}
,#{PRODUCT_TYPE_CODE}
,#{FIRST_PARTNER_OBJID}
,#{FIRST_PARTNER_PRICE}
,#{FIRST_PARTNER_QTY}
,#{SECOND_PARTNER_OBJID}
,#{SECOND_PARTNER_PRICE}
,#{SECOND_PARTNER_QTY}
,#{THIRD_PARTNER_OBJID}
,#{THIRD_PARTNER_PRICE}
,#{THIRD_PARTNER_QTY}
,NOW()
) ON CONFLICT (OBJID) DO
UPDATE
SET
PRODUCT_TYPE_CODE = #{PRODUCT_TYPE_CODE}
,FIRST_PARTNER_OBJID = #{FIRST_PARTNER_OBJID}
,FIRST_PARTNER_PRICE = #{FIRST_PARTNER_PRICE}
,FIRST_PARTNER_QTY = #{FIRST_PARTNER_QTY}
,SECOND_PARTNER_OBJID = #{SECOND_PARTNER_OBJID}
,SECOND_PARTNER_PRICE = #{SECOND_PARTNER_PRICE}
,SECOND_PARTNER_QTY = #{SECOND_PARTNER_QTY}
,THIRD_PARTNER_OBJID = #{THIRD_PARTNER_OBJID}
,THIRD_PARTNER_PRICE = #{THIRD_PARTNER_PRICE}
,THIRD_PARTNER_QTY = #{THIRD_PARTNER_QTY}
</update> -->
<select id="structureAscendingListPopup" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
PRODUCT_MGMT_OBJID,
SPEC_NAME,
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
REGDATE,
SEQ,
LEV,
PATH,
CYCLE
) AS (
SELECT
PBM.PRODUCT_MGMT_OBJID,
PBM.SPEC_NAME,
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
LEFT JOIN
PART_BOM_REPORT PBM
ON A.BOM_REPORT_OBJID = PBM.OBJID::TEXT
WHERE 1=1
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
AND A.BOM_REPORT_OBJID = #{bom_report_objid}
UNION ALL
SELECT
PBM.PRODUCT_MGMT_OBJID,
PBM.SPEC_NAME,
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
LEFT JOIN
PART_BOM_REPORT PBM
ON B.BOM_REPORT_OBJID = PBM.OBJID::TEXT
INNER JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
)
SELECT
V.BOM_REPORT_OBJID
,V.OBJID
,V.PARENT_OBJID
,V.CHILD_OBJID
,V.PARENT_PART_NO
,V.QTY
,V.LEV
,(SELECT COUNT(*) FROM BOM_PART_QTY WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT
,V.SEQ
, (CASE WHEN V.CYCLE IS NULL THEN 1 ELSE 0 END) AS LEAF
,P.OBJID AS PART_OBJID
,P.PART_NO
,P.PART_NAME
,P.UNIT_TITLE
,P.QTY
,P.MATERIAL
,P.WEIGHT
,P.PART_TYPE_TITLE
,P.REVISION
,P.EO_NO
,P.EO_DATE
,P.SPEC
,P.PART_REGDATE_TITLE
,(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID::VARCHAR = V.PRODUCT_MGMT_OBJID::VARCHAR) AS PRODUCT_CODE
,V.SPEC_NAME
,SBPQ.PRODUCT_TYPE_CODE
,SBPQ.PARTNER_OBJID
,SBPQ.PARTNER_PRICE
,SBPQ.PARTNER_REMARK
,SBPQ.SALES_PART_CODE
,SBPQ.PALETTE_CODE
,COALESCE(SBPQ.SOURCING_CODE, P.SOURCING_CODE) AS SOURCING_CODE
,SBPQ.PROCESS1_CODE
,SBPQ.PROCESS2_CODE
,SBPQ.PROCESS3_CODE
,SBPQ.PROCESS4_CODE
FROM
VIEW_BOM V
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> P
ON V.PART_NO = P.OBJID::TEXT
LEFT OUTER JOIN SALES_BOM_PART_QTY SBPQ
ON V.BOM_REPORT_OBJID::VARCHAR = SBPQ.BOM_REPORT_OBJID
AND V.OBJID::VARCHAR = SBPQ.OBJID
ORDER BY V.SEQ
</select>
<!-- 구매 BOM을 통한 구매 의뢰 시 대상 Part 정보를 가져온다. -->
<select id="getSalesRequestTargetPartList" 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.BOM_REPORT_OBJID = #{bom_report_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)
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
V.BOM_REPORT_OBJID
,V.PARENT_OBJID
,V.CHILD_OBJID
,V.PARENT_PART_NO
,V.QTY
,V.LEV
,(SELECT COUNT(*) FROM BOM_PART_QTY WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT
,V.SEQ
,(CASE WHEN V.CYCLE IS NULL THEN 1 ELSE 0 END) AS LEAF
,T2.OBJID AS PART_OBJID
,T2.PART_NO
,T2.PART_NAME
,T2.UNIT_TITLE
,T2.EO_NO
,T2.EO_DATE
,T2.REVISION
,T2.SPEC
,T2.MATERIAL
,T2.WEIGHT
,SBPQ.PRODUCT_TYPE_CODE
,SBPQ.FIRST_PARTNER_OBJID
,SBPQ.FIRST_PARTNER_PRICE
,SBPQ.FIRST_PARTNER_QTY
,SBPQ.SECOND_PARTNER_OBJID
,SBPQ.SECOND_PARTNER_PRICE
,SBPQ.SECOND_PARTNER_QTY
,SBPQ.THIRD_PARTNER_OBJID
,SBPQ.THIRD_PARTNER_PRICE
,SBPQ.THIRD_PARTNER_QTY
,(SELECT CC.CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CC.CODE_ID = SBPQ.PRODUCT_TYPE_CODE) AS PRODUCT_TYPE_CODE_NAME
,(SELECT SM.SUPPLY_NAME FROM SUPPLY_MNG SM WHERE 1=1 AND SM.SUPPLY_CODE = SBPQ.FIRST_PARTNER_OBJID) AS FIRST_PARTNER_NAME
,(SELECT SM.SUPPLY_NAME FROM SUPPLY_MNG SM WHERE 1=1 AND SM.SUPPLY_CODE = SBPQ.SECOND_PARTNER_OBJID) AS SECOND_PARTNER_NAME
,(SELECT SM.SUPPLY_NAME FROM SUPPLY_MNG SM WHERE 1=1 AND SM.SUPPLY_CODE = SBPQ.THIRD_PARTNER_OBJID) AS THIRD_PARTNER_NAME
,SBPQ.OBJID
,SBPQ.OBJID AS SALES_BOM_QTY_OBJID
FROM
VIEW_BOM V
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> T2
ON V.PART_NO = T2.OBJID::TEXT
LEFT OUTER JOIN SALES_BOM_PART_QTY SBPQ
ON V.BOM_REPORT_OBJID::VARCHAR = SBPQ.BOM_REPORT_OBJID
AND V.OBJID::VARCHAR = SBPQ.OBJID
WHERE 1=1
AND(
(SBPQ.FIRST_PARTNER_OBJID IS NOT NULL AND SBPQ.FIRST_PARTNER_OBJID != '') OR
(SBPQ.SECOND_PARTNER_OBJID IS NOT NULL AND SBPQ.SECOND_PARTNER_OBJID != '') OR
(SBPQ.THIRD_PARTNER_OBJID IS NOT NULL AND SBPQ.THIRD_PARTNER_OBJID != '')
)
ORDER BY V.PATH,V.REGDATE
</select>
<!-- 구매 BOM을 통한 구매 의뢰 시 저장된 Part 정보를 가져온다. -->
<select id="getSalesRequestSavedPartList" parameterType="map" resultType="map">
SELECT
ROW_NUMBER() OVER(ORDER BY SRP.REGDATE DESC) AS RNUM,
SRP.OBJID,
SRP.SALES_BOM_QTY_OBJID,
SRP.PART_OBJID,
SRP.SALES_REQUEST_MASTER_OBJID,
SRP.QTY,
SRP.ORG_QTY,
SRP.PARTNER_OBJID,
SRP.PARTNER_PRICE,
SRP.DELIVERY_REQUEST_DATE,
SRP.WRITER,
SRP.REGDATE,
SRP.STATUS,
SRP.REMARK,
PM.PART_NAME,
PM.MATERIAL,
PM.SPEC,
PM.PART_NO,
PM.REVISION,
PM.PART_NAME||'('||PM.MATERIAL||','||PM.SPEC||')/'||PM.PART_NO AS TARGET_TITLE,
PM.UNIT_TITLE
FROM
SALES_REQUEST_MASTER SRM
INNER JOIN SALES_REQUEST_PART SRP
ON SRM.OBJID = SRP.SALES_REQUEST_MASTER_OBJID
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> PM
ON SRP.PART_OBJID = PM.OBJID::TEXT
WHERE 1=1
AND SRM.OBJID = #{SALES_REQUEST_MASTER_OBJID}
<if test="PARTNER_OBJID != null and !''.equals(PARTNER_OBJID)">
AND SRP.PARTNER_OBJID = #{PARTNER_OBJID}
</if>
</select>
<update id="mergeSalesRequestMasterInfo" parameterType="map">
INSERT INTO SALES_REQUEST_MASTER
(
OBJID,
REQUEST_MNG_NO,
REQUEST_CD,
PROJECT_NO,
RELEASE_DATE,
REQUEST_REASONS,
REQUEST_USER_ID,
DELIVERY_REQUEST_DATE,
UNIT_NAME,
STATUS,
RECEIPT_USER_ID,
RECEIPT_DATE,
WRITER,
REMARK,
REGDATE,
PURCHASE_TYPE,
ORDER_TYPE,
PRODUCT_NAME,
AREA_CD,
CUSTOMER_OBJID,
PAID_TYPE
)
VALUES
(
#{SALES_REQUEST_MASTER_OBJID },
(SELECT 'R'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,11,13)),'0')::INTEGER+1)::TEXT,3,'0') FROM SALES_REQUEST_MASTER),
#{REQUEST_CD },
#{PROJECT_NO },
#{RELEASE },
#{REQUEST_REASONS },
#{REQUEST_USER_ID },
#{DELIVERY_REQUEST_DATE },
#{UNIT_NAME },
#{STATUS },
#{RECEIPT_USER_ID },
#{RECEIPT_DATE },
#{WRITER },
#{REMARK },
NOW(),
#{PURCHASE_TYPE },
#{ORDER_TYPE },
#{PRODUCT_NAME },
#{AREA_CD },
#{CUSTOMER_OBJID },
#{PAID_TYPE }
) ON CONFLICT (OBJID) DO
UPDATE
SET
REQUEST_CD = #{REQUEST_CD },
PROJECT_NO = #{PROJECT_NO },
RELEASE_DATE = #{RELEASE },
REQUEST_REASONS = #{REQUEST_REASONS },
REQUEST_USER_ID = #{REQUEST_USER_ID },
DELIVERY_REQUEST_DATE = #{DELIVERY_REQUEST_DATE },
UNIT_NAME = #{UNIT_NAME },
STATUS = #{STATUS },
RECEIPT_USER_ID = #{RECEIPT_USER_ID },
RECEIPT_DATE = #{RECEIPT_DATE },
REMARK = #{REMARK },
PURCHASE_TYPE = #{PURCHASE_TYPE },
ORDER_TYPE = #{ORDER_TYPE },
PRODUCT_NAME = #{PRODUCT_NAME },
AREA_CD = #{AREA_CD },
CUSTOMER_OBJID = #{CUSTOMER_OBJID },
PAID_TYPE = #{PAID_TYPE }
</update>
<select id="getSalesRequestMasterInfo" parameterType="map" resultType="map">
SELECT
SRM.OBJID,
SRM.REQUEST_MNG_NO,
SRM.REQUEST_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_CD) AS REQUEST_CD_NAME,
SRM.PROJECT_NO,
PM.PROJECT_NO AS PROJECT_NUMBER,
PM.PROJECT_NAME,
PM.SETUP,
SM.SUPPLY_NAME AS CUSTOMER_NAME,
SM.OBJID::VARCHAR AS CUSTOMER_OBJID, -- 고객사 OBJID (드롭다운 선택용)
PM.MECHANICAL_TYPE,
SRM.RELEASE_DATE,
SRM.REQUEST_REASONS,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_REASONS) AS REQUEST_REASONS_NAME,
SRM.REQUEST_USER_ID,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.REQUEST_USER_ID) AS REQUEST_USER_NAME,
SRM.DELIVERY_REQUEST_DATE,
SRM.UNIT_NAME,
(SELECT TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = SRM.UNIT_NAME) AS UNIT_CODE_NAME,
SRM.STATUS,
CASE SRM.STATUS
WHEN 'create' THEN '미접수'
WHEN 'release' THEN '제출 완료'
WHEN 'reception' THEN '접수'
WHEN 'approvalRequest' THEN '결재중'
WHEN 'approvalComplete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END STATUS_TITLE,
SRM.RECEIPT_USER_ID,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.RECEIPT_USER_ID) AS RECEIPT_USER_NAME,
SRM.RECEIPT_DATE,
SRM.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
SRM.REGDATE,
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
SRM.REMARK,
-- 저장된 값 우선, 없으면 조인으로 가져오기
COALESCE(NULLIF(SRM.PURCHASE_TYPE, ''), POM.TYPE) AS PURCHASE_TYPE, -- 구매유형
COALESCE(NULLIF(SRM.ORDER_TYPE, ''), POM.ORDER_TYPE_CD) AS ORDER_TYPE, -- 주문유형
COALESCE(NULLIF(SRM.PRODUCT_NAME, ''), PM.PRODUCT) AS PRODUCT_NAME, -- 제품구분
COALESCE(NULLIF(SRM.AREA_CD, ''), SM.AREA_CD) AS AREA_CD, -- 국내/해외
COALESCE(NULLIF(SRM.CUSTOMER_OBJID, ''), SM.OBJID::VARCHAR) AS CUSTOMER_OBJID, -- 고객사
COALESCE(NULLIF(SRM.PAID_TYPE, ''), CM.PAID_TYPE) AS PAID_TYPE, -- 유/무상
CM.CATEGORY_CD AS CATEGORY_CD -- 제품유형 코드 ID (드롭다운 선택용)
FROM
SALES_REQUEST_MASTER SRM
LEFT JOIN PROJECT_MGMT PM ON SRM.PROJECT_NO = PM.OBJID::VARCHAR
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID::VARCHAR
LEFT JOIN SUPPLY_MNG SM ON CM.CUSTOMER_OBJID::VARCHAR = SM.OBJID::VARCHAR
LEFT JOIN PURCHASE_ORDER_MASTER POM ON SRM.OBJID = POM.SALES_REQUEST_OBJID
WHERE 1=1
AND SRM.OBJID = #{SALES_REQUEST_MASTER_OBJID}
</select>
<!-- 구매의뢰 저장 시 저장된 파트 정보를 초기화 -->
<delete id="initSalesRequestPart" parameterType="map">
DELETE FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
</delete>
<update id="mergeSalesRequestPartInfo" parameterType="map">
INSERT INTO SALES_REQUEST_PART
(
OBJID,
SALES_BOM_QTY_OBJID,
PART_OBJID,
SALES_REQUEST_MASTER_OBJID,
QTY,
ORG_QTY,
PARTNER_OBJID,
PARTNER_PRICE,
DELIVERY_REQUEST_DATE,
WRITER,
REGDATE,
STATUS
<!-- REMARK -->
)
VALUES
(
#{SALES_REQUEST_PART_OBJID },
#{SALES_BOM_QTY_OBJID },
#{PART_OBJID },
#{SALES_REQUEST_MASTER_OBJID},
#{QTY },
#{ORG_QTY },
#{PARTNER_OBJID },
#{PARTNER_PRICE },
#{DELIVERY_REQUEST_DATE },
#{WRITER},
NOW(),
#{STATUS}
<!-- #{REMARK} -->
) ON CONFLICT (OBJID) DO
UPDATE
SET
SALES_BOM_QTY_OBJID = #{SALES_BOM_QTY_OBJID },
PART_OBJID = #{PART_OBJID },
SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID},
QTY = #{QTY },
ORG_QTY = #{ORG_QTY },
PARTNER_OBJID = #{PARTNER_OBJID },
PARTNER_PRICE = #{PARTNER_PRICE },
DELIVERY_REQUEST_DATE = #{DELIVERY_REQUEST_DATE },
WRITER = #{WRITER},
STATUS = #{STATUS}
<!-- REMARK = #{REMARK} -->
</update>
<update id="mergeSalesRequestPartSupplyInfo" parameterType="map">
UPDATE SALES_REQUEST_PART SET
PARTNER_OBJID = #{PARTNER_OBJID }
WHERE OBJID = #{OBJID}
AND SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
</update>
<select id="getSalesRequestMasterList" parameterType="map" resultType="map">
SELECT
ROW_NUMBER() OVER(ORDER BY REGDATE DESC) AS RNUM,
AA.*
FROM (
SELECT
SRM.OBJID,
SRM.REQUEST_MNG_NO,
SRM.CATEGORY_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.CATEGORY_CD) AS CATEGORY_CD_NAME,
SRM.PRODUCT_GROUP,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_GROUP) AS PRODUCT_GROUP_NAME,
SRM.PRODUCT,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT) AS PRODUCT_NAME,
SRM.PRODUCT_CODE,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID::VARCHAR = SRM.PRODUCT_CODE::VARCHAR) AS PRODUCT_CODE_NAME,
SRM.SALES_MNG_USER_ID,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME,
SRM.REQUEST_STATUS,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_STATUS) AS REQUEST_STATUS_TITLE,
SRM.REQUEST_STATUS_REMARK,
SRM.TITLE,
SRM.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
SRM.REGDATE,
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
SRM.STATUS,
CASE SRM.STATUS
WHEN 'create' THEN '등록'
WHEN 'release' THEN '제출 완료'
WHEN 'reception' THEN '의뢰 접수'
WHEN 'approvalRequest' THEN '결재중'
WHEN 'approvalComplete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END STATUS_TITLE,
SRP.TARGET_TITLE,
A.APPR_STATUS,
A.ROUTE_OBJID,
A.APPROVAL_OBJID,
A.ROUTE_OBJID
FROM
SALES_REQUEST_MASTER SRM
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 ('SALES_REQUEST')
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
LEFT OUTER JOIN(
SELECT
ROW_NUMBER() OVER(PARTITION BY SRP.SALES_REQUEST_MASTER_OBJID ORDER BY SRP.REGDATE DESC) SUB_RNUM,
SRP.OBJID,
SRP.SALES_BOM_QTY_OBJID,
SRP.PART_OBJID,
SRP.SALES_REQUEST_MASTER_OBJID,
SRP.QTY,
SRP.PARTNER_OBJID,
SRP.PARTNER_PRICE,
SRP.DELIVERY_REQUEST_DATE,
SRP.WRITER,
SRP.REGDATE,
SRP.STATUS,
SRP.REMARK,
PM.PART_NAME||'('||PM.MATERIAL||','||PM.SPEC||')/'||PM.PART_NO AS TARGET_TITLE,
PM.UNIT_TITLE
FROM
SALES_REQUEST_MASTER SRM
INNER JOIN SALES_REQUEST_PART SRP
ON SRM.OBJID = SRP.SALES_REQUEST_MASTER_OBJID
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> PM
ON SRP.PART_OBJID = PM.OBJID::TEXT
WHERE 1=1
) SRP ON SRP.SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR
AND SRP.SUB_RNUM = 1
WHERE 1=1
) AA
WHERE 1=1
<if test="SEARCH_CATEGORY_CD != null and !''.equals(SEARCH_CATEGORY_CD)">
AND CATEGORY_CD = #{SEARCH_CATEGORY_CD}
</if>
<if test="SEARCH_PRODUCT_GROUP != null and !''.equals(SEARCH_PRODUCT_GROUP)">
AND PRODUCT_GROUP = #{SEARCH_PRODUCT_GROUP}
</if>
<if test="SEARCH_PRODUCT != null and !''.equals(SEARCH_PRODUCT)">
AND PRODUCT = #{SEARCH_PRODUCT}
</if>
<if test="SEARCH_PRODUCT_CODE != null and !''.equals(SEARCH_PRODUCT_CODE)">
AND PRODUCT_CODE = #{SEARCH_PRODUCT_CODE}
</if>
<if test="SEARCH_PART_NO != null and !''.equals(SEARCH_PART_NO)">
AND OBJID IN (
SELECT
SRP.SALES_REQUEST_MASTER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN PART_MNG PM
ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
WHERE PART_NO LIKE'%${SEARCH_PART_NO}%'
)
</if>
<if test="SEARCH_PART_NAME != null and !''.equals(SEARCH_PART_NAME)">
AND OBJID IN (
SELECT
SRP.SALES_REQUEST_MASTER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN PART_MNG PM
ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
WHERE PART_NAME LIKE'%${SEARCH_PART_NAME}%'
)
</if>
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
<![CDATA[ AND 0 < POSITION(STATUS || ',' IN #{SEARCH_STATUS}||',') ]]>
</if>
</select>
<select id="getSalesRequestMasterGridList" parameterType="map" resultType="map">
SELECT
SRM.OBJID,
SRM.REQUEST_MNG_NO,
SRM.REQUEST_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_CD) AS REQUEST_CD_NAME,
-- 추가된 컬럼들
SRM.PURCHASE_TYPE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
SRM.ORDER_TYPE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_TYPE_NAME,
SRM.PRODUCT_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_NAME) AS PRODUCT_NAME_FULL,
SRM.AREA_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.AREA_CD) AS AREA_CD_NAME,
SRM.CUSTOMER_OBJID,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID) AS CUSTOMER_NAME,
SRM.PAID_TYPE,
(CASE WHEN SRM.PAID_TYPE = 'paid' THEN '유상' WHEN SRM.PAID_TYPE = 'free' THEN '무상' ELSE SRM.PAID_TYPE END) AS PAID_TYPE_NAME,
-- 품번/품명 ("외 N건" 형태로 표시)
(
SELECT
CASE
WHEN COUNT(*) > 1 THEN
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
END
FROM SALES_REQUEST_PART
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
) AS PART_NO,
(
SELECT
CASE
WHEN COUNT(*) > 1 THEN
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
END
FROM SALES_REQUEST_PART
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
) AS PART_NAME,
SRM.PROJECT_NO,
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
(SELECT PROJECT_NAME FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NAME,
SRM.RELEASE_DATE,
SRM.REQUEST_REASONS,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_REASONS) AS REQUEST_REASONS_NAME,
COALESCE(SRM.REQUEST_USER_ID, SRM.WRITER) AS REQUEST_USER_ID,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = COALESCE(SRM.REQUEST_USER_ID, SRM.WRITER)) AS REQUEST_USER_NAME,
SRM.DELIVERY_REQUEST_DATE,
SRM.UNIT_NAME,
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = SRM.UNIT_NAME) AS UNIT_CODE_NAME,
SRM.STATUS,
CASE
WHEN ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) >= (SELECT COUNT(1) FROM SALES_REQUEST_PART AS SRP WHERE srp.SALES_REQUEST_master_OBJID = SRM.OBJID )) and ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) > 0) THEN '발주완료'
WHEN ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) &lt; (SELECT COUNT(1) FROM SALES_REQUEST_PART AS SRP WHERE srp.SALES_REQUEST_master_OBJID = SRM.OBJID )) and ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) > 0) THEN '발주부분완료'
WHEN SRM.STATUS = 'create' THEN '등록'
WHEN SRM.STATUS = 'release' THEN '제출 완료'
WHEN SRM.STATUS = 'reception' THEN '접수'
WHEN SRM.STATUS = 'approvalRequest' THEN '결재중'
WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료'
WHEN SRM.STATUS = 'reject' THEN '반려'
<!-- WHEN 'orderComplete' THEN '발주완료' -->
ELSE ''
END STATUS_TITLE,
SRM.RECEIPT_USER_ID,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.RECEIPT_USER_ID) AS RECEIPT_USER_NAME,
RECEIPT_DATE,
SRM.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
SRM.REGDATE,
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
A.APPR_STATUS,
A.ROUTE_OBJID,
A.APPROVAL_OBJID,
A.ROUTE_OBJID,
SRP.TOTAL_QTY,
SRP.ITEMS_QTY,
(SELECT STRING_AGG(PURCHASE_ORDER_NO,',') FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) AS PURCHASE_ORDER_NO_ARR
FROM
SALES_REQUEST_MASTER SRM
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 ('SALES_REQUEST')
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
LEFT OUTER JOIN(
SELECT
SALES_REQUEST_MASTER_OBJID ,
SUM(COALESCE(QTY,'0')::NUMERIC) AS TOTAL_QTY,
count(1) AS ITEMS_QTY
FROM
SALES_REQUEST_PART
GROUP BY SALES_REQUEST_MASTER_OBJID
) SRP ON SRP.SALES_REQUEST_MASTER_OBJID = SRM.OBJID
<!-- LEFT OUTER JOIN(
SELECT
ROW_NUMBER() OVER(PARTITION BY SRP.SALES_REQUEST_MASTER_OBJID ORDER BY SRP.REGDATE DESC) SUB_RNUM,
SRP.OBJID,
SRP.SALES_BOM_QTY_OBJID,
SRP.PART_OBJID,
SRP.SALES_REQUEST_MASTER_OBJID,
SRP.QTY,
SRP.PARTNER_OBJID,
SRP.PARTNER_PRICE,
SRP.DELIVERY_REQUEST_DATE,
SRP.WRITER,
SRP.REGDATE,
SRP.STATUS,
SRP.REMARK,
PM.PART_NAME||'('||PM.MATERIAL||','||PM.SPEC||')/'||PM.PART_NO AS TARGET_TITLE,
PM.UNIT_TITLE
FROM
SALES_REQUEST_MASTER SRM
INNER JOIN SALES_REQUEST_PART SRP
ON SRM.OBJID = SRP.SALES_REQUEST_MASTER_OBJID
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> PM
ON SRP.PART_OBJID = PM.OBJID::TEXT
WHERE 1=1
) SRP ON SRP.SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR
AND SRP.SUB_RNUM = 1 -->
WHERE 1=1
<if test="Year !=null and Year != '' ">
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
</if>
<!-- <if test="contract_objid != null and !''.equals(contract_objid)">
AND SRM.PROJECT_NO = #{contract_objid}
</if> -->
<if test="project_nos != null and project_nos != ''">
AND SRM.PROJECT_NO IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="request_cd != null and !''.equals(request_cd)">
AND SRM.REQUEST_CD = #{request_cd}
</if>
<if test="request_reasons != null and !''.equals(request_reasons)">
AND SRM.REQUEST_REASONS = #{request_reasons}
</if>
<if test="receipt_writer != null and !''.equals(receipt_writer)">
AND SRM.RECEIPT_USER_ID = #{receipt_writer}
</if>
<if test="receipt_date_start != null and !''.equals(receipt_date_start)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{receipt_date_start}, 'YYYY-MM-DD')
</if>
<if test="receipt_date_end != null and !''.equals(receipt_date_end)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{receipt_date_end}, 'YYYY-MM-DD')
</if>
<!-- <if test="SEARCH_PART_NO != null and !''.equals(SEARCH_PART_NO)">
AND OBJID IN (
SELECT
SRP.SALES_REQUEST_MASTER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN PART_MNG PM
ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
WHERE PART_NO LIKE'%${SEARCH_PART_NO}%'
)
</if>
<if test="SEARCH_PART_NAME != null and !''.equals(SEARCH_PART_NAME)">
AND OBJID IN (
SELECT
SRP.SALES_REQUEST_MASTER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN PART_MNG PM
ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
WHERE PART_NAME LIKE'%${SEARCH_PART_NAME}%'
)
</if> -->
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
<![CDATA[ AND 0 < POSITION(STATUS || ',' IN #{SEARCH_STATUS}||',') ]]>
</if>
ORDER BY SRM.REGDATE desc
</select>
<select id="purchaseOrderAdminSupplyInfo" parameterType="map" resultType="map">
SELECT
PM.OBJID
,PM.CATEGORY_CD
,CODE_NAME(PM.CATEGORY_CD) AS CATEGORY_NAME
,PM.CUSTOMER_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = PM.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
,PM.PRODUCT
,CODE_NAME(PM.PRODUCT) AS PRODUCT_NAME
,PM.STATUS_CD
,CODE_NAME(PM.STATUS_CD) AS STATUS_NAME
,PM.DUE_DATE
,PM.LOCATION
,PM.SETUP
,PM.FACILITY
,CODE_NAME(PM.FACILITY) AS FACILITY_NAME
,PM.FACILITY_QTY
,PM.FACILITY_TYPE
,PM.FACILITY_DEPTH
,PM.PRODUCTION_NO
,PM.BUS_CAL_CD
,CODE_NAME(PM.BUS_CAL_CD) AS BUS_CAL_NAME
,PM.CATEGORY1_CD
,CODE_NAME(PM.CATEGORY1_CD) AS CATEGORY1_NAME
,PM.CHG_USER_ID
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = PM.CHG_USER_ID ) AS CHG_USER_NAME
,PM.PLAN_DATE
,PM.COMPLETE_DATE
,PM.RESULT_CD
,CODE_NAME(PM.RESULT_CD) AS RESULT_NAME
,PM.PROJECT_NO
,PM.PM_USER_ID
,PM.CONTRACT_PRICE
,PM.CONTRACT_PRICE_CURRENCY
,PM.CONTRACT_CURRENCY
,CODE_NAME(PM.CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
,TO_CHAR(PM.REGDATE,'YYYY-MM-DD') AS REG_DATE
,PM.WRITER
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = PM.WRITER ) AS WRITER_NAME
,PM.CONTRACT_NO
,PM.CUSTOMER_EQUIP_NAME
,PM.REQ_DEL_DATE
,PM.CONTRACT_DEL_DATE
,PM.CONTRACT_COMPANY
,CODE_NAME(PM.CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
,PM.CONTRACT_DATE
,PM.PO_NO
,PM.MANUFACTURE_PLANT
,CODE_NAME(PM.MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
,PM.CONTRACT_RESULT
,CODE_NAME(PM.CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
,PM.AREA_CD
,CODE_NAME(PM.AREA_CD) AS AREA_NAME
,PM.PROJECT_NAME
,PM.MECHANICAL_TYPE
,PM.OVERHAUL_ORDER
,RM.RELEASE_DATE
,CM.PAID_TYPE
,CM.OBJID AS CONTRACT_OBJID
FROM
PROJECT_MGMT AS PM
LEFT OUTER JOIN
RELEASE_MGMT RM
ON PM.OBJID::VARCHAR = RM.PARENT_OBJID
AND PM.PRODUCT = RM.PRODUCT
LEFT OUTER JOIN
CONTRACT_MGMT CM
ON PM.CONTRACT_OBJID = CM.OBJID
WHERE 1=1
AND PM.OBJID = #{PROJECT_NO}
</select>
<select id="SalesBomPartListByProjectUnit" parameterType="map" resultType="map">
<!-- M-BOM 데이터 조회: PROJECT_MGMT.BOM_REPORT_OBJID -> BOM_PART_QTY -> PART_MNG -->
SELECT
BPQ.BOM_REPORT_OBJID
,BPQ.PART_NO AS PART_OBJID
,PM.PART_NAME
,PM.PART_NO
,PM.SPEC
,PM.MAKER
,PM.REMARK
,PM.UNIT
,BPQ.QTY AS ORDER_QTY
,NULL AS SUPPLY_OBJID
,NULL AS WRITER
FROM
PROJECT_MGMT AS PJT
INNER JOIN BOM_PART_QTY AS BPQ
ON PJT.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID::VARCHAR
LEFT JOIN PART_MNG AS PM
ON COALESCE(NULLIF(BPQ.LAST_PART_OBJID, ''), BPQ.PART_NO) = PM.OBJID::VARCHAR
WHERE 1=1
AND PJT.OBJID = #{PROJECT_OBJID}
AND PJT.BOM_REPORT_OBJID IS NOT NULL
AND PJT.BOM_REPORT_OBJID != ''
ORDER BY BPQ.SEQ, PM.PART_NO
</select>
<update id="mergeReceiptSalesRequestInfo" parameterType="map">
UPDATE
SALES_REQUEST_MASTER
SET
STATUS = #{STATUS}
,RECEIPT_DATE = #{RECEIPT_DATE}
,RECEIPT_USER_ID = #{RECEIPT_USER_ID}
WHERE OBJID = #{OBJID}
</update>
<update id="changeStatusSalesRequestMaster" parameterType="map">
UPDATE
SALES_REQUEST_MASTER
SET
STATUS = #{STATUS}
WHERE OBJID = #{OBJID}
</update>
<update id="releaseSalesRequestMaster" parameterType="map">
UPDATE
SALES_REQUEST_MASTER
SET
RELEASE_DATE = TO_CHAR(NOW(),'YYYY-MM-DD')
WHERE OBJID = #{OBJID}
</update>
<select id="getSalesPartnerInfoList" parameterType="map" resultType="map">
SELECT
A.*,
ROW_NUMBER() OVER(ORDER BY A.SEQ) AS RNUM
FROM(
SELECT
BPQ.PART_NO,
SBPQ.FIRST_PARTNER_OBJID AS PARTNER_OBJID,
SBPQ.FIRST_PARTNER_PRICE AS PARTNER_PRICE,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = SBPQ.FIRST_PARTNER_OBJID) AS PARTNER_NAME,
1 AS SEQ
FROM BOM_PART_QTY BPQ
LEFT OUTER JOIN SALES_BOM_PART_QTY SBPQ
ON BPQ.BOM_REPORT_OBJID::VARCHAR = SBPQ.BOM_REPORT_OBJID
AND BPQ.OBJID::VARCHAR = SBPQ.OBJID
AND SBPQ.FIRST_PARTNER_OBJID IS NOT NULL
AND SBPQ.FIRST_PARTNER_OBJID != ''
UNION ALL
SELECT
BPQ.PART_NO,
SBPQ.SECOND_PARTNER_OBJID AS PARTNER_OBJID,
SBPQ.SECOND_PARTNER_PRICE AS PARTNER_PRICE,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = SBPQ.SECOND_PARTNER_OBJID) AS PARTNER_NAME,
2 AS SEQ
FROM BOM_PART_QTY BPQ
LEFT OUTER JOIN SALES_BOM_PART_QTY SBPQ
ON BPQ.BOM_REPORT_OBJID::VARCHAR = SBPQ.BOM_REPORT_OBJID
AND BPQ.OBJID::VARCHAR = SBPQ.OBJID
AND SBPQ.SECOND_PARTNER_OBJID IS NOT NULL
AND SBPQ.SECOND_PARTNER_OBJID != ''
UNION ALL
SELECT
BPQ.PART_NO,
SBPQ.THIRD_PARTNER_OBJID AS PARTNER_OBJID,
SBPQ.THIRD_PARTNER_PRICE AS PARTNER_PRICE,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = SBPQ.THIRD_PARTNER_OBJID) AS PARTNER_NAME,
3 AS SEQ
FROM BOM_PART_QTY BPQ
LEFT OUTER JOIN SALES_BOM_PART_QTY SBPQ
ON BPQ.BOM_REPORT_OBJID::VARCHAR = SBPQ.BOM_REPORT_OBJID
AND BPQ.OBJID::VARCHAR = SBPQ.OBJID
AND SBPQ.THIRD_PARTNER_OBJID IS NOT NULL
AND SBPQ.THIRD_PARTNER_OBJID != ''
)A WHERE 1=1
AND PART_NO::VARCHAR = #{PART_OBJID}
</select>
<!-- 구매 BOM을 통한 구매 의뢰 시 저장된 Part 정보를 가져온다. -->
<select id="getSalesRequestPartPartnerList" parameterType="map" resultType="map">
SELECT
SRP.PARTNER_OBJID
FROM
SALES_REQUEST_MASTER SRM
INNER JOIN SALES_REQUEST_PART SRP
ON SRM.OBJID = SRP.SALES_REQUEST_MASTER_OBJID
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> PM
ON SRP.PART_OBJID = PM.OBJID::TEXT
WHERE 1=1
AND SRM.OBJID = #{SALES_REQUEST_MASTER_OBJID}
GROUP BY SRP.PARTNER_OBJID
</select>
<!-- 파트에 연결된 발주관리 정보를 가져온다. -->
<select id="getOrderSpecMngList" parameterType="map" resultType="map">
SELECT
OBJID,
SEQ,
PART_OBJID,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = PARTNER_OBJID::VARCHAR) AS PARTNER_NAME,
PARTNER_RANK,
PARTNER_OBJID,
PARTNER_PRICE,
PARTNER_QTY,
APPLY_DATE,
REMARK,
REGDATE,
TO_CHAR(REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
IS_LAST,
WRITER,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = OSM.WRITER) AS WRITER_NAME
FROM
ORDER_SPEC_MNG OSM
WHERE 1=1
AND PART_OBJID = #{PART_OBJID}
ORDER BY
SEQ NULLS LAST,
APPLY_DATE DESC
</select>
<!-- 파트에 연결된 발주관리 정보를 가져온다. -->
<select id="getOrderSpecMngMap" parameterType="map" resultType="map">
SELECT
OBJID,
SEQ,
PART_OBJID,
PARTNER_RANK,
PARTNER_OBJID,
PARTNER_PRICE,
PARTNER_QTY,
APPLY_DATE,
REMARK,
REGDATE,
IS_LAST,
WRITER
FROM
ORDER_SPEC_MNG
WHERE 1=1
<if test="OBJID != null and !''.equals(OBJID)">
AND OBJID = #{OBJID}
</if>
<if test="PART_OBJID != null and !''.equals(PART_OBJID)">
AND PART_OBJID = #{PART_OBJID}
</if>
<if test="PARTNER_OBJID != null and !''.equals(PARTNER_OBJID)">
AND PARTNER_OBJID = #{PARTNER_OBJID}
</if>
</select>
<update id="mergeOrderSpecMng" parameterType="map">
INSERT INTO ORDER_SPEC_MNG
(
OBJID,
SEQ,
PART_OBJID,
PARTNER_RANK,
PARTNER_OBJID,
PARTNER_PRICE,
PARTNER_QTY,
APPLY_DATE,
REMARK,
REGDATE,
IS_LAST,
WRITER
)
VALUES
(
#{OBJID},
#{SEQ},
#{PART_OBJID},
#{PARTNER_RANK},
#{PARTNER_OBJID},
#{PARTNER_PRICE},
#{PARTNER_QTY},
#{APPLY_DATE},
#{REMARK},
NOW(),
#{IS_LAST},
#{WRITER}
) ON CONFLICT (OBJID) DO
UPDATE
SET
SEQ = #{SEQ},
PART_OBJID = #{PART_OBJID},
PARTNER_RANK = #{PARTNER_RANK},
PARTNER_OBJID = #{PARTNER_OBJID},
PARTNER_PRICE = #{PARTNER_PRICE},
PARTNER_QTY = #{PARTNER_QTY},
APPLY_DATE = #{APPLY_DATE},
REMARK = #{REMARK},
REGDATE = NOW(),
IS_LAST = #{IS_LAST},
WRITER = #{WRITER}
</update>
<delete id="deleteOrderSpecMng" parameterType="map">
DELETE FROM ORDER_SPEC_MNG WHERE 1=1 <![CDATA[ AND 0 < POSITION(OBJID::TEXT || ',' IN #{checkArr}||',') ]]>
</delete>
<update id="insertOrderSpecMngHistory" parameterType="map">
INSERT INTO ORDER_SPEC_MNG_HISTORY
SELECT
*
FROM ORDER_SPEC_MNG WHERE OBJID = #{OBJID}
</update>
<select id="getOrderSpecMngHistoryList" parameterType="map" resultType="map">
SELECT
OBJID,
SEQ,
PART_OBJID,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = PARTNER_OBJID::VARCHAR) AS PARTNER_NAME,
PARTNER_RANK,
PARTNER_OBJID,
PARTNER_PRICE,
PARTNER_QTY,
APPLY_DATE,
REMARK,
REGDATE,
IS_LAST,
WRITER
FROM
ORDER_SPEC_MNG_HISTORY
WHERE 1=1
AND OBJID = #{OBJID}
ORDER BY REGDATE DESC
</select>
<select id="getSalesBOMList" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
PRODUCT_MGMT_OBJID,
SPEC_NAME,
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
REGDATE,
SEQ,
LEV,
PATH,
CYCLE
) AS (
SELECT
PBM.PRODUCT_MGMT_OBJID,
PBM.SPEC_NAME,
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
LEFT JOIN
PART_BOM_REPORT PBM
ON A.BOM_REPORT_OBJID = PBM.OBJID::TEXT
WHERE 1=1
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
AND A.BOM_REPORT_OBJID = #{bom_report_objid}
UNION ALL
SELECT
PBM.PRODUCT_MGMT_OBJID,
PBM.SPEC_NAME,
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
LEFT JOIN
PART_BOM_REPORT PBM
ON B.BOM_REPORT_OBJID = PBM.OBJID::TEXT
INNER JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
)
SELECT
V.PARENT_PART_NO
,V.QTY
,V.QTY AS ORG_QTY
,V.LEV
,V.SEQ
,P.OBJID AS PART_OBJID
,P.PART_NO
,P.PART_NAME
,P.UNIT_TITLE
,P.QTY
,P.MATERIAL
,P.WEIGHT
,P.PART_TYPE_TITLE
,P.REVISION
,P.EO_NO
,P.EO_DATE
,P.SPEC
,P.PART_REGDATE_TITLE
,(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID::VARCHAR = V.PRODUCT_MGMT_OBJID::VARCHAR) AS PRODUCT_CODE
,V.SPEC_NAME
,SBPQ.PRODUCT_TYPE_CODE
,SBPQ.PARTNER_OBJID
,SBPQ.PARTNER_PRICE
,SBPQ.PARTNER_REMARK AS REMARK
,P.PART_NAME||'('||P.MATERIAL||','||P.SPEC||')/'||P.PART_NO AS TARGET_TITLE
FROM
VIEW_BOM V
LEFT OUTER JOIN <include refid="partMng.partMngBase"/> P
ON V.PART_NO = P.OBJID::TEXT
LEFT OUTER JOIN SALES_BOM_PART_QTY SBPQ
ON V.BOM_REPORT_OBJID::VARCHAR = SBPQ.BOM_REPORT_OBJID
AND V.OBJID::VARCHAR = SBPQ.OBJID
ORDER BY V.PATH,V.REGDATE
</select>
<delete id="deleteSalesRequestMaster" parameterType="map">
DELETE FROM SALES_REQUEST_MASTER WHERE OBJID = #{SALES_REQUEST_MASTER_OBJID}
</delete>
<delete id="deleteSalesRequestPart" parameterType="map">
DELETE FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
</delete>
<!-- 발주특성 중 검색조건에 해당하는 대상의 목록을 가져온다. -->
<select id="getOrderSpecMngTargetList" parameterType="map" resultType="map">
SELECT
OBJID,
SEQ,
PART_OBJID,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = PARTNER_OBJID::VARCHAR) AS PARTNER_NAME,
PARTNER_RANK,
PARTNER_OBJID,
PARTNER_PRICE,
PARTNER_QTY,
APPLY_DATE,
REMARK,
REGDATE,
TO_CHAR(REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
IS_LAST,
WRITER,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = OSM.WRITER) AS WRITER_NAME
FROM
ORDER_SPEC_MNG OSM
WHERE 1=1
<if test="OBJID != null and !''.equals(OBJID)">
AND OSM.OBJID = #{OBJID}
</if>
<if test="NOT_EXIST_OBJID != null and !''.equals(NOT_EXIST_OBJID)">
AND OSM.OBJID != #{NOT_EXIST_OBJID}
</if>
<if test="PART_OBJID != null and !''.equals(PART_OBJID)">
AND OSM.PART_OBJID = #{PART_OBJID}
</if>
<if test="PARTNER_OBJID != null and !''.equals(PARTNER_OBJID)">
AND OSM.PARTNER_OBJID = #{PARTNER_OBJID}
</if>
<!-- 파라미터 seq보다 숫자가 큰 -->
<if test="HIGHER_THEN_SEQ != null and !''.equals(HIGHER_THEN_SEQ)">
AND OSM.SEQ::NUMERIC >= #{HIGHER_THEN_SEQ}::NUMERIC
</if>
<!-- 파라미터 seq보다 숫자가 작은 -->
<if test="LOWER_THEN_SEQ != null and !''.equals(LOWER_THEN_SEQ)">
AND OSM.SEQ::NUMERIC <![CDATA[ <= ]]> #{LOWER_THEN_SEQ}::NUMERIC
</if>
<if test="SEQ != null and !''.equals(SEQ)">
AND OSM.SEQ = #{SEQ}
</if>
ORDER BY SEQ NULLS LAST
</select>
<!-- 저장 시 순위를 정렬한다. -->
<update id="updateOrderSpecMngSeq" parameterType="map">
UPDATE
ORDER_SPEC_MNG
SET SEQ = #{SEQ}
WHERE OBJID = #{OBJID}
</update>
<!-- 발주특성 저장 시 파트에 소싱정보를 업데이트 한다. -->
<update id="updateOrderSpecMng" parameterType="map">
UPDATE
PART_MNG
SET SOURCING_CODE = #{SOURCING_CODE}
WHERE OBJID::VARCHAR = #{OBJID}::VARCHAR
</update>
<!-- 파트에 연결된 발주관리 정보를 가져온다. -->
<select id="getOrderSpecMngPartnerList" parameterType="map" resultType="map">
SELECT
OBJID,
SEQ,
PART_OBJID,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = PARTNER_OBJID::VARCHAR) AS PARTNER_NAME,
PARTNER_RANK,
PARTNER_OBJID,
PARTNER_PRICE,
PARTNER_QTY,
APPLY_DATE,
REMARK,
REGDATE,
TO_CHAR(REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
IS_LAST,
WRITER,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = OSM.WRITER) AS WRITER_NAME
FROM
ORDER_SPEC_MNG OSM
WHERE 1=1
AND PART_OBJID = #{PART_OBJID}
ORDER BY
SEQ NULLS LAST,
APPLY_DATE DESC
</select>
<!-- BOM 정보를 가져온다. -->
<select id="getBOMReportData" parameterType="map" resultType="map">
SELECT
*
FROM
PART_BOM_REPORT
WHERE 1=1
AND OBJID::VARCHAR = #{bom_report_objid}::VARCHAR
</select>
<select id="getParsingData" parameterType="map" resultType="map">
SELECT
*
FROM SALES_BOM_PART_QTY_TEMP
</select>
<select id="salesBomReportList" parameterType="map" resultType="map">
SELECT PBR.OBJID
<!-- 수주정보 -->
,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = PBR.CUSTOMER_OBJID) AS CUSTOMER_NAME
,CM.CUSTOMER_PROJECT_NAME
,CM.STATUS_CD
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = CM.STATUS_CD) AS STATUS_NAME
,CM.CATEGORY_CD
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = CM.CATEGORY_CD) AS CATEGORY_NAME
,CM.DUE_DATE
,CM.LOCATION
,CM.SETUP
,CM.FACILITY
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = CM.FACILITY) AS FACILITY_NAME
,CODE_NAME(CM.MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
,CM.FACILITY_QTY
,CM.FACILITY_TYPE
,CM.FACILITY_DEPTH
,CM.PRODUCTION_NO
,CM.PROJECT_NAME
,CM.PROJECT_NO
,CODE_NAME(CM.CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
,CM.CONTRACT_DEL_DATE
,CM.PO_NO
,CM.CONTRACT_DATE
,CM.REQ_DEL_DATE
<!-- 프로젝트정보 ※계약납기, 수주회사, 수주일, PO계약NO 없음.. -->
,CM.PROJECT_NO
<!-- 구매BOM -->
,PBR.UNIT_CODE
<!-- ,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = PBR.UNIT_CODE) AS UNIT_NAME -->
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = PBR.UNIT_CODE) AS UNIT_NAME
,(SELECT COUNT(*) FROM BOM_PART_QTY AS A WHERE A.BOM_REPORT_OBJID = PBR.OBJID) AS BOM_CNT
,PBR.DEPLOY_DATE
,PBR.WRITER AS WRITER1
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PBR.WRITER) AS WRITER1_NAME
<!-- 구매BOM SBR -->
,SBR.OBJID AS SBR_OBJID
,TO_CHAR(SBR.REGDATE, 'YYYY-MM-DD') AS REGDATE2
,SBR.WRITER AS WRITER2
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = SBR.WRITER) AS WRITER2_NAME
,(SELECT COUNT(1) FROM SALES_BOM_REPORT_PART SBRP WHERE SBRP.PARENT_OBJID = PBR.OBJID) SALES_PART_CNT
FROM PART_BOM_REPORT PBR
LEFT OUTER JOIN SALES_BOM_REPORT SBR
ON PBR.OBJID = SBR.PARENT_OBJID
,PROJECT_MGMT CM
WHERE 1=1
AND PBR.CONTRACT_OBJID = CM.OBJID
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE, 'YYYY') = #{Year}
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND PBR.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and project_name != '' ">
AND CM.OBJID = #{project_name}
</if>
<if test="unit_code !=null and unit_code != '' ">
AND PBR.UNIT_CODE = #{unit_code}
</if>
<if test="writer2_id !=null and writer2_id != '' ">
AND SBR.WRITER = #{writer2_id}
</if>
<if test="SEARCH_UNIT_NAME != null and !''.equals(SEARCH_UNIT_NAME)">
AND (SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = PBR.UNIT_CODE) LIKE '%' || #{SEARCH_UNIT_NAME} || '%'
</if>
order by SUBSTRING(CM.PROJECT_NO,POSITION('-' IN CM.PROJECT_NO)+1) DESC
</select>
<select id="salesBomReportInfo" parameterType="map" resultType="map">
SELECT OBJID
,PARENT_OBJID
,SUPPLY_OBJID
,PRICE
,SUPPLY_OBJID1
,PRICE1
,SUPPLY_OBJID2
,PRICE2
,SUPPLY_OBJID3
,PRICE3
,SUPPLY_OBJID4
,PRICE4
,WRITER
FROM SALES_BOM_REPORT
WHERE OBJID = #{objId}
</select>
<select id="salesBomReportInfo2" parameterType="map" resultType="map">
SELECT OBJID
,PARENT_OBJID
,SUPPLY_OBJID
,PRICE
,SUPPLY_OBJID1
,PRICE1
,SUPPLY_OBJID2
,PRICE2
,SUPPLY_OBJID3
,PRICE3
,SUPPLY_OBJID4
,PRICE4
,WRITER
FROM SALES_BOM_REPORT
WHERE 1=1
<if test=" (SEARCH_OBJID == null or SEARCH_OBJID == '') and (SEARCH_PARENT_OBJID == null or SEARCH_PARENT_OBJID == '') ">
AND OBJID = '!@#$'
</if>
<if test="SEARCH_OBJID != null and SEARCH_OBJID != ''">
AND OBJID = #{SEARCH_OBJID}
</if>
<if test="SEARCH_PARENT_OBJID != null and SEARCH_PARENT_OBJID != ''">
AND PARENT_OBJID = #{SEARCH_PARENT_OBJID}
</if>
</select>
<update id="mergeSalesBomReportInfo" parameterType="map">
INSERT INTO SALES_BOM_REPORT (
OBJID
,PARENT_OBJID
,SUPPLY_OBJID
,PRICE
,SUPPLY_OBJID1
,PRICE1
,SUPPLY_OBJID2
,PRICE2
,SUPPLY_OBJID3
,PRICE3
,SUPPLY_OBJID4
,PRICE4
,WRITER
,REGDATE
) VALUES (
#{OBJID }
,#{PARENT_OBJID }
,#{SUPPLY_OBJID }
,#{PRICE }
,#{SUPPLY_OBJID1}
,#{PRICE1 }
,#{SUPPLY_OBJID2}
,#{PRICE2 }
,#{SUPPLY_OBJID3}
,#{PRICE3 }
,#{SUPPLY_OBJID4}
,#{PRICE4 }
,#{writer }
,NOW()
) ON CONFLICT (OBJID) DO
UPDATE SET
SUPPLY_OBJID = #{SUPPLY_OBJID }
,PRICE = #{PRICE }
,SUPPLY_OBJID1 = #{SUPPLY_OBJID1}
,PRICE1 = #{PRICE1 }
,SUPPLY_OBJID2 = #{SUPPLY_OBJID2}
,PRICE2 = #{PRICE2 }
,SUPPLY_OBJID3 = #{SUPPLY_OBJID3}
,PRICE3 = #{PRICE3 }
,SUPPLY_OBJID4 = #{SUPPLY_OBJID4}
,PRICE4 = #{PRICE4 }
,WRITER = #{writer }
,REGDATE = NOW()
</update>
<update id="mergeSalesBomReportInfo2" parameterType="map">
INSERT INTO SALES_BOM_REPORT (
OBJID
,PARENT_OBJID
,SUPPLY_OBJID
,PRICE
,SUPPLY_OBJID1
,PRICE1
,SUPPLY_OBJID2
,PRICE2
,SUPPLY_OBJID3
,PRICE3
,SUPPLY_OBJID4
,PRICE4
,WRITER
,REGDATE
) VALUES (
#{OBJID }
,#{PARENT_OBJID }
,#{SUPPLY_OBJID }
,#{PRICE }
,#{SUPPLY_OBJID1}
,#{PRICE1 }
,#{SUPPLY_OBJID2}
,#{PRICE2 }
,#{SUPPLY_OBJID3}
,#{PRICE3 }
,#{SUPPLY_OBJID4}
,#{PRICE4 }
,#{writer }
,NOW()
) ON CONFLICT (PARENT_OBJID) DO
UPDATE SET
SUPPLY_OBJID = #{SUPPLY_OBJID }
,PRICE = #{PRICE }
,SUPPLY_OBJID1 = #{SUPPLY_OBJID1}
,PRICE1 = #{PRICE1 }
,SUPPLY_OBJID2 = #{SUPPLY_OBJID2}
,PRICE2 = #{PRICE2 }
,SUPPLY_OBJID3 = #{SUPPLY_OBJID3}
,PRICE3 = #{PRICE3 }
,SUPPLY_OBJID4 = #{SUPPLY_OBJID4}
,PRICE4 = #{PRICE4 }
,MODIFIER = #{writer }
,UPDATE_DATE = NOW()
</update>
<select id="salesBomReportPartList" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
LAST_PART_OBJID,
QTY,
REGDATE,
SEQ,
LEV,
PATH,
PATH2,
CYCLE
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.LAST_PART_OBJID,
A.QTY,
A.REGDATE,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
ARRAY [A.SEQ::TEXT],
FALSE
FROM
BOM_PART_QTY A
WHERE 1=1
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
AND A.BOM_REPORT_OBJID = #{parent_objId}
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
</when>
<otherwise>
AND STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
</otherwise>
</choose>
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.LAST_PART_OBJID,
B.QTY,
B.REGDATE,
B.SEQ,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
PATH2||B.SEQ::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
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
</when>
<otherwise>
AND B.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
</otherwise>
</choose>
)
SELECT
V.BOM_REPORT_OBJID AS PARENT_OBJID
,V.PART_NO AS PART_OBJID
,V.CHILD_OBJID
,V.PARENT_PART_NO
,PM.OBJID OBJID_PART
,PM.PART_NO
,PM.PART_NAME
,V.LEV
,V.QTY
,(SELECT MAX(LEV) FROM VIEW_BOM) AS MAX_LEV
,SP.OBJID
,V.LAST_PART_OBJID
,NVL(V.LAST_PART_OBJID, V.PART_NO) LAST_PART_OBJID2
,SP.PRICE
,SP.SUPPLY_OBJID
,(SELECT ASM.SUPPLY_NAME FROM ADMIN_SUPPLY_MNG ASM WHERE 1=1 AND ASM.OBJID::VARCHAR = SP.SUPPLY_OBJID::VARCHAR) AS SUPPLY_NAME
,SP.PRICE1
,SP.SUPPLY_OBJID1
,(SELECT ASM.SUPPLY_NAME FROM ADMIN_SUPPLY_MNG ASM WHERE 1=1 AND ASM.OBJID::VARCHAR = SP.SUPPLY_OBJID1::VARCHAR) AS SUPPLY_NAME1
,SP.PRICE2
,SP.SUPPLY_OBJID2
,(SELECT ASM.SUPPLY_NAME FROM ADMIN_SUPPLY_MNG ASM WHERE 1=1 AND ASM.OBJID::VARCHAR = SP.SUPPLY_OBJID2::VARCHAR) AS SUPPLY_NAME2
,SP.PRICE3
,SP.SUPPLY_OBJID3
,(SELECT ASM.SUPPLY_NAME FROM ADMIN_SUPPLY_MNG ASM WHERE 1=1 AND ASM.OBJID::VARCHAR = SP.SUPPLY_OBJID3::VARCHAR) AS SUPPLY_NAME3
,SP.PRICE4
,SP.SUPPLY_OBJID4
,(SELECT ASM.SUPPLY_NAME FROM ADMIN_SUPPLY_MNG ASM WHERE 1=1 AND ASM.OBJID::VARCHAR = SP.SUPPLY_OBJID4::VARCHAR) AS SUPPLY_NAME4
,SP.PRICE_SUM
,SP.PRE_BOOKING_QTY
,PM.SPEC
,PM.POST_PROCESSING
,PM.MAKER
,PM.REMARK
,PM.REVISION
,PM.EO_NO
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.PART_TYPE) AS PART_TYPE_NAME
,(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
,(SELECT SUM(NVL(SBP.PRE_BOOKING_QTY, '0')::NUMERIC) FROM SALES_BOM_REPORT_PART SBP where SBP.PART_OBJID = PM.OBJID GROUP BY PART_OBJID) AS TOTAL_PRE_BOOKING_QTY
FROM VIEW_BOM V
<!--
(SELECT *
,( SELECT OBJID
FROM PART_MNG PM1
WHERE IS_LAST = '1'
AND PART_NO = (
( SELECT PM2.PART_NO
FROM PART_MNG PM2
WHERE PM2.OBJID = V.PART_NO)
)
) LAST_PART_OBJID
FROM VIEW_BOM V
) AS V
-->
LEFT OUTER JOIN SALES_BOM_REPORT_PART AS SP
ON SP.PARENT_OBJID = #{parent_objId}
AND BOM_PART_QTY_OBJID = V.CHILD_OBJID
<!-- 231208 같은 part가 여러개일경우 중복건 발생으로 위조건으로 대체
AND V.PART_NO = SP.PART_OBJID
AND SP.PARENT_PART_OBJID = V.PARENT_PART_NO
-->
LEFT OUTER JOIN PART_MNG PM
ON nvl(V.LAST_PART_OBJID, V.PART_NO) = PM.OBJID::VARCHAR
<!-- 231208 설변된 최종part로 연결되게 수정
ON V.PART_NO = PM.OBJID::VARCHAR
-->
WHERE 1=1
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(PM.PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NO_END != null and SEARCH_PART_NO_END != ''">
AND UPPER(PM.PART_NO) LIKE UPPER('%${SEARCH_PART_NO_END}')
</if>
<if test="SEARCH_PART_NO_EQ != null and SEARCH_PART_NO_EQ != ''">
AND UPPER(PM.PART_NO) = #{SEARCH_PART_NO_EQ}
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(PM.PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_PART_NAME_EQ != null and SEARCH_PART_NAME_EQ != ''">
AND TRIM(UPPER(PM.PART_NAME)) = TRIM(UPPER(#{SEARCH_PART_NAME_EQ}))
</if>
<if test='SEARCH_PO_Y != null and SEARCH_PO_Y != "" and "Y".equals(SEARCH_PO_Y) '>
AND (V.LEV &lt; 3
OR EXISTS (
SELECT (1)
FROM PURCHASE_ORDER_PART PO
,PURCHASE_ORDER_MASTER POM
WHERE 1=1
AND POM.BOM_REPORT_OBJID = v.BOM_REPORT_OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.OBJID = PO.PURCHASE_ORDER_MASTER_OBJID
AND NVL(V.LAST_PART_OBJID, V.PART_NO) = PO.PART_OBJID
)
)
</if>
<if test='SEARCH_PO_N != null and SEARCH_PO_N != "" and "Y".equals(SEARCH_PO_N) '>
AND (V.LEV &lt; 3
OR NOT EXISTS (
SELECT (1)
FROM PURCHASE_ORDER_PART PO
,PURCHASE_ORDER_MASTER POM
WHERE 1=1
AND POM.BOM_REPORT_OBJID = v.BOM_REPORT_OBJID
AND POM.STATUS = 'approvalComplete'
AND POM.OBJID = PO.PURCHASE_ORDER_MASTER_OBJID
AND NVL(V.LAST_PART_OBJID, V.PART_NO) = PO.PART_OBJID
)
)
</if>
<!--
ORDER BY V.SEQ
-->
ORDER BY V.PATH2
</select>
<delete id="deleteSalesBomReportPart" parameterType="map">
DELETE FROM SALES_BOM_REPORT_PART WHERE PARENT_OBJID = #{PARENT_OBJID}
</delete>
<update id="mergeSalesBomReportPart" parameterType="map">
INSERT INTO SALES_BOM_REPORT_PART (
OBJID
,PARENT_OBJID
,PART_OBJID
,SUPPLY_OBJID
,PRICE
,SUPPLY_OBJID1
,PRICE1
,SUPPLY_OBJID2
,PRICE2
,SUPPLY_OBJID3
,PRICE3
,SUPPLY_OBJID4
,PRICE4
,PRICE_SUM
,WRITER
,REGDATE
,PARENT_PART_OBJID
,BOM_PART_QTY_OBJID
,PRE_BOOKING_QTY
) VALUES (
#{OBJID }
,#{PARENT_OBJID }
,#{PART_OBJID }
,#{SUPPLY_OBJID }
,#{PRICE }
,#{SUPPLY_OBJID1}
,#{PRICE1 }
,#{SUPPLY_OBJID2}
,#{PRICE2 }
,#{SUPPLY_OBJID3}
,#{PRICE3 }
,#{SUPPLY_OBJID4}
,#{PRICE4 }
,#{PRICE_SUM }
,#{writer }
,NOW()
,#{PARENT_PART_NO }
,#{CHILD_OBJID }
,#{PRE_BOOKING_QTY }
) ON CONFLICT (OBJID) DO
UPDATE SET
SUPPLY_OBJID = #{SUPPLY_OBJID }
,PRICE = #{PRICE }
,SUPPLY_OBJID1 = #{SUPPLY_OBJID1}
,PRICE1 = #{PRICE1 }
,SUPPLY_OBJID2 = #{SUPPLY_OBJID2}
,PRICE2 = #{PRICE2 }
,SUPPLY_OBJID3 = #{SUPPLY_OBJID3}
,PRICE3 = #{PRICE3 }
,SUPPLY_OBJID4 = #{SUPPLY_OBJID4}
,PRICE4 = #{PRICE4 }
,PRICE_SUM = #{PRICE_SUM }
,MODIFIER = #{writer }
,UPDATE_DATE = NOW()
,PRE_BOOKING_QTY = #{PRE_BOOKING_QTY}
</update>
<update id="mergeSalesBomReportPart2" parameterType="map">
INSERT INTO SALES_BOM_REPORT_PART (
OBJID
,PARENT_OBJID
,PART_OBJID
,SUPPLY_OBJID
,PRICE
,SUPPLY_OBJID1
,PRICE1
,SUPPLY_OBJID2
,PRICE2
,SUPPLY_OBJID3
,PRICE3
,SUPPLY_OBJID4
,PRICE4
,PRICE_SUM
,WRITER
,REGDATE
,PARENT_PART_OBJID
,BOM_PART_QTY_OBJID
) VALUES (
#{OBJID }
,#{PARENT_OBJID }
,#{PART_OBJID }
,#{SUPPLY_OBJID }
,#{PRICE }
,#{SUPPLY_OBJID1}
,#{PRICE1 }
,#{SUPPLY_OBJID2}
,#{PRICE2 }
,#{SUPPLY_OBJID3}
,#{PRICE3 }
,#{SUPPLY_OBJID4}
,#{PRICE4 }
,#{PRICE_SUM }
,#{writer }
,NOW()
,#{PARENT_PART_NO }
,#{CHILD_OBJID }
) ON CONFLICT (PARENT_OBJID, PART_OBJID) DO
UPDATE SET
SUPPLY_OBJID = #{SUPPLY_OBJID }
,PRICE = #{PRICE }
,SUPPLY_OBJID1 = #{SUPPLY_OBJID1}
,PRICE1 = #{PRICE1 }
,SUPPLY_OBJID2 = #{SUPPLY_OBJID2}
,PRICE2 = #{PRICE2 }
,SUPPLY_OBJID3 = #{SUPPLY_OBJID3}
,PRICE3 = #{PRICE3 }
,SUPPLY_OBJID4 = #{SUPPLY_OBJID4}
,PRICE4 = #{PRICE4 }
,PRICE_SUM = #{PRICE_SUM }
,MODIFIER = #{writer }
,UPDATE_DATE = NOW()
<!--
WHERE PARENT_OBJID = #{PARENT_OBJID}
AND PART_OBJID = #{PART_OBJID}
-->
</update>
<update id="updateSalesBomReportPartPrice" parameterType="map">
UPDATE SALES_BOM_REPORT_PART SET
PRICE = #{PRICE }
,PRICE1 = #{PRICE1 }
,PRICE2 = #{PRICE2 }
,PRICE3 = #{PRICE3 }
,PRICE4 = #{PRICE4 }
,PRICE_SUM = #{PRICE_SUM }
<!--
,WRITER = #{writer }
,REGDATE = NOW()
-->
WHERE OBJID = #{OBJID }
</update>
<select id="salesPartChgList" parameterType="map" resultType="map">
SELECT PM.OBJID
,PM.EO_NO
,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR
,CM.CUSTOMER_PROJECT_NAME
,COALESCE(CM2.PROJECT_NO, CM.PROJECT_NO) PROJECT_NO
,(SELECT PART_NO||' '||PART_NAME FROM PART_MNG SP WHERE SP.OBJID = PM.PARENT_PART_NO) PARENT_PART_INFO
,PM.PART_NO
,PM.PART_NAME
,CASE WHEN PM.BOM_QTY_STATUS = 'adding' THEN PM.QTY_TEMP
ELSE PM.QTY END QTY
,CASE
WHEN PM.BOM_QTY_STATUS = 'adding' THEN ''
WHEN PM.BOM_QTY_STATUS = 'beforeEdit' and PM.QTY = PM.QTY_TEMP THEN ''
ELSE PM.QTY_TEMP END QTY_TEMP
,'' AS EO_STEP
,PM.CHANGE_TYPE
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = PM.CHANGE_TYPE) AS CHANGE_TYPE_NAME
,PM.CHANGE_OPTION
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = PM.CHANGE_OPTION) AS CHANGE_OPTION_NAME
,PM.REVISION
,PM.EO_DATE
,PM.PART_TYPE
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = PM.PART_TYPE) AS PART_TYPE_NAME
,PM.WRITER
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) AS WRITER_NAME
,'' AS STATUS
,SPC.OBJID AS SPC_OBJID
,SPC.CONFIRM_DATE
,SPC.WRITER AS WRTIER1
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = SPC.WRITER) AS WRITER1_NAME
,SPC.ACT_CD
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = SPC.ACT_CD) AS ACT_NAME
,SPC.PURCHASE_ORDER_MASTER_OBJID
,SPC.NOTE
,POM.PURCHASE_ORDER_NO
,SPC.ACT_STATUS
,(CASE WHEN SPC.ACT_STATUS IS NULL THEN '0001063' ELSE SPC.ACT_STATUS END) AS ACT_STATUS
,(SELECT CODE_NAME FROM COMM_CODE AS O
WHERE O.CODE_ID = (CASE WHEN SPC.ACT_STATUS IS NULL THEN '0001063' ELSE SPC.ACT_STATUS END)
) AS ACT_STATUS_NAME
,TO_CHAR(PM.HIS_REG_DATE,'YYYY-MM-DD') AS HIS_REG_DATE_TITLE
,PM.BOM_REPORT_OBJID
,PM.QTY_CHILD_OBJID
FROM PART_MNG_HISTORY PM
LEFT OUTER JOIN SALES_PART_CHG SPC
ON PM.OBJID::varchar = SPC.PART_OBJID
AND PM.QTY_CHILD_OBJID = SPC.QTY_CHILD_OBJID
LEFT OUTER JOIN PURCHASE_ORDER_MASTER POM
ON SPC.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
LEFT OUTER JOIN PART_BOM_REPORT B
ON PM.BOM_REPORT_OBJID = B.OBJID
LEFT OUTER JOIN PROJECT_MGMT CM
ON PM.CONTRACT_OBJID = CM.OBJID
LEFT OUTER JOIN PROJECT_MGMT CM2
ON B.CONTRACT_OBJID = CM2.OBJID
WHERE 1=1
<!-- 파트 신규등록건 조회 제외 -->
AND NOT ( PM.HIS_STATUS = 'DEPLOY'
AND PM.CHANGE_TYPE IS NULL
AND PM.REVISION = 'RE')
AND PM.REVISION IS NOT NULL
<!-- 240520 조건 추가-->
AND NVL(PM.BOM_STATUS, '') = 'deploy'
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE, 'YYYY') = #{Year}
</if>
<!-- <if test="contract_objid !=null and contract_objid != '' ">
AND CM.OBJID = #{contract_objid}
</if> -->
<if test="project_nos != null and project_nos != ''">
AND COALESCE(CM2.OBJID, CM.OBJID) IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="part_no !=null and part_no != '' ">
AND PM.PART_NO = #{part_no}
</if>
<if test="part_name !=null and part_name != '' ">
AND PM.PART_NAME = #{part_name}
</if>
<if test="change_option !=null and change_option != '' ">
AND PM.CHANGE_OPTION = #{change_option}
</if>
<if test="eo_date_start !=null and eo_date_start != '' ">
AND TO_DATE(PM.EO_DATE, 'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{eo_date_start}, 'YYYY-MM-DD')
</if>
<if test="eo_date_end !=null and eo_date_end != '' ">
AND TO_DATE(PM.EO_DATE, 'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{eo_date_end} , 'YYYY-MM-DD')
</if>
<if test="change_type !=null and change_type != '' ">
AND PM.CHANGE_TYPE = #{change_type}
</if>
<if test="part_type !=null and part_type != '' ">
AND PM.PART_TYPE = #{part_type}
</if>
<if test="part_writer !=null and part_writer != '' ">
AND PM.WRITER = #{part_writer}
</if>
<if test="sales_writer !=null and sales_writer != '' ">
AND SPC.WRITER = #{sales_writer}
</if>
<if test="revision !=null and revision != '' ">
AND PM.REVISION = #{revision}
</if>
<if test="confirm_date_start !=null and confirm_date_start != '' ">
AND TO_DATE(SPC.CONFIRM_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{confirm_date_start}, 'YYYY-MM-DD')
</if>
<if test="confirm_date_end !=null and confirm_date_end != '' ">
AND TO_DATE(SPC.CONFIRM_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{confirm_date_end} , 'YYYY-MM-DD')
</if>
<if test="act_cd !=null and act_cd != '' ">
AND SPC.ACT_CD = #{act_cd}
</if>
<if test="act_status !=null and act_status != '' ">
AND (CASE WHEN SPC.ACT_STATUS IS NULL THEN '0001063' ELSE SPC.ACT_STATUS END) = #{act_status}
</if>
ORDER BY COALESCE(PM.HIS_REG_DATE, PM.REG_DATE) DESC, PM.PART_NO
</select>
<select id="salesPartChgInfo" parameterType="map" resultType="map">
SELECT SPC.OBJID
,SPC.PART_OBJID
,SPC.CONFIRM_DATE
,SPC.ACT_CD
,SPC.PURCHASE_ORDER_MASTER_OBJID
,SPC.NOTE
,SPC.REGDATE
,SPC.WRITER
,SPC.ACT_STATUS
,PM.EO_NO
,PM.PART_NO
,CM.PROJECT_NO
FROM SALES_PART_CHG SPC
,PART_MNG_HISTORY PM
,PROJECT_MGMT CM
WHERE SPC.PART_OBJID = PM.OBJID::varchar
AND PM.CONTRACT_OBJID = CM.OBJID
AND SPC.OBJID = #{objId}
limit 1
</select>
<update id="mergeSalesPartChgInfo" parameterType="map">
INSERT INTO SALES_PART_CHG (
OBJID
,PART_OBJID
,CONFIRM_DATE
,ACT_CD
,PURCHASE_ORDER_MASTER_OBJID
,NOTE
,WRITER
,REGDATE
,ACT_STATUS
,BOM_REPORT_OBJID
,QTY_CHILD_OBJID
) VALUES (
#{OBJID }
,#{PART_OBJID }
,#{CONFIRM_DATE}
,#{ACT_CD }
,#{PURCHASE_ORDER_MASTER_OBJID}
,#{NOTE }
,#{writer }
,NOW()
,#{ACT_STATUS }
,#{BOM_REPORT_OBJID }
,#{QTY_CHILD_OBJID }
<!--
,(SELECT BOM_REPORT_OBJID FROM PART_MNG_HISTORY H WHERE H.OBJID = #{PART_OBJID}::NUMERIC)
,(SELECT QTY_CHILD_OBJID FROM PART_MNG_HISTORY H WHERE H.OBJID = #{PART_OBJID}::NUMERIC)
-->
) ON CONFLICT (OBJID) DO
UPDATE SET
PART_OBJID = #{PART_OBJID }
,CONFIRM_DATE = #{CONFIRM_DATE}
,ACT_CD = #{ACT_CD }
,PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
,NOTE = #{NOTE }
,WRITER = #{writer }
,REGDATE = NOW()
,ACT_STATUS = #{ACT_STATUS }
</update>
<select id="salesLongDeliveryList" parameterType="map" resultType="map">
SELECT T1.OBJID
,T1.LD_PART_NAME
,T1.SPEC
,T1.FORM_NO
,T1.MAKER
,T1.MATERIAL_CODE
,T1.SUPPLY_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG S WHERE S.OBJID = T1.SUPPLY_OBJID::NUMERIC) AS SUPPLY_NAME
,T1.REGDATE
,T1.WRITER
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T1.WRITER) AS WRITER_NAME
,T1.LOCATION
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = T1.LOCATION) AS LOCATION_NAME
,T1.PRICE
,(T1.PRICE::NUMERIC * (SELECT SUM(COALESCE(INPUT_QTY, '0')::NUMERIC) FROM SALES_LONG_DELIVERY_INPUT T2 WHERE T1.OBJID = T2.PARENT_OBJID)) AS PRICE_SUM
,(SELECT SUM(COALESCE(INPUT_QTY, '0')::NUMERIC) FROM SALES_LONG_DELIVERY_INPUT T2 WHERE T1.OBJID = T2.PARENT_OBJID AND (CONTRACT_OBJID = '' or CONTRACT_OBJID IS NULL))
- COALESCE((SELECT SUM(COALESCE(INPUT_QTY, '0')::NUMERIC) FROM SALES_LONG_DELIVERY_INPUT T2 WHERE T1.OBJID = T2.PARENT_OBJID AND CONTRACT_OBJID != '' AND CONTRACT_OBJID IS NOT NULL), 0) AS INPUT_QTY
,(SELECT COALESCE(COUNT(1), 0) FROM SALES_LONG_DELIVERY_INPUT T2 WHERE T1.OBJID = T2.PARENT_OBJID) AS INPUT_CNT
,T3.*
FROM SALES_LONG_DELIVERY T1
LEFT OUTER JOIN (SELECT PARENT_OBJID
<!-- RIGHT JOIN (SELECT PARENT_OBJID -->
,SUM(QTY::NUMERIC) AS M_TOTAL
,SUM(CASE WHEN MONTH::NUMERIC = 1 THEN QTY::NUMERIC ELSE NULL END) AS M01
,SUM(CASE WHEN MONTH::NUMERIC = 2 THEN QTY::NUMERIC ELSE NULL END) AS M02
,SUM(CASE WHEN MONTH::NUMERIC = 3 THEN QTY::NUMERIC ELSE NULL END) AS M03
,SUM(CASE WHEN MONTH::NUMERIC = 4 THEN QTY::NUMERIC ELSE NULL END) AS M04
,SUM(CASE WHEN MONTH::NUMERIC = 5 THEN QTY::NUMERIC ELSE NULL END) AS M05
,SUM(CASE WHEN MONTH::NUMERIC = 6 THEN QTY::NUMERIC ELSE NULL END) AS M06
,SUM(CASE WHEN MONTH::NUMERIC = 7 THEN QTY::NUMERIC ELSE NULL END) AS M07
,SUM(CASE WHEN MONTH::NUMERIC = 8 THEN QTY::NUMERIC ELSE NULL END) AS M08
,SUM(CASE WHEN MONTH::NUMERIC = 9 THEN QTY::NUMERIC ELSE NULL END) AS M09
,SUM(CASE WHEN MONTH::NUMERIC =10 THEN QTY::NUMERIC ELSE NULL END) AS M10
,SUM(CASE WHEN MONTH::NUMERIC =11 THEN QTY::NUMERIC ELSE NULL END) AS M11
,SUM(CASE WHEN MONTH::NUMERIC =12 THEN QTY::NUMERIC ELSE NULL END) AS M12
FROM SALES_LONG_DELIVERY_PREDICT
GROUP BY PARENT_OBJID
) AS T3
ON T1.OBJID = T3.PARENT_OBJID
WHERE 1=1
<if test="ld_part_name !=null and ld_part_name != '' ">
AND T1.LD_PART_NAME LIKE '%'|| #{ld_part_name} ||'%'
</if>
<if test="Location !=null and Location != '' ">
AND T1.LOCATION = #{Location}
</if>
<if test="spec !=null and spec != '' ">
AND T1.SPEC LIKE '%'|| #{spec} ||'%'
</if>
<if test="maker !=null and maker != '' ">
AND T1.MAKER LIKE '%'|| #{maker} ||'%'
</if>
<if test="material_code !=null and material_code != '' ">
AND T1.MATERIAL_CODE LIKE '%'|| #{material_code} ||'%'
</if>
<if test="admin_supply !=null and admin_supply != '' ">
AND T1.SUPPLY_OBJID = #{admin_supply}
</if>
ORDER BY LD_PART_NAME, SUPPLY_NAME
</select>
<select id="salesLongDeliveryListSum" parameterType="map" resultType="map">
SELECT
SUM(T.PRICE_SUM) AS TOTAL_PRICE_SUM
FROM
(SELECT
T1.OBJID
,T1.LD_PART_NAME
,T1.SPEC
,T1.FORM_NO
,T1.MAKER
,T1.MATERIAL_CODE
,T1.SUPPLY_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG S WHERE S.OBJID = T1.SUPPLY_OBJID::NUMERIC) AS SUPPLY_NAME
,T1.REGDATE
,T1.WRITER
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T1.WRITER) AS WRITER_NAME
,T1.LOCATION
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = T1.LOCATION) AS LOCATION_NAME
,T1.PRICE
,(T1.PRICE::NUMERIC * (SELECT SUM(COALESCE(INPUT_QTY, '0')::NUMERIC) FROM SALES_LONG_DELIVERY_INPUT T2 WHERE T1.OBJID = T2.PARENT_OBJID)) AS PRICE_SUM
,(SELECT SUM(COALESCE(INPUT_QTY, '0')::NUMERIC) FROM SALES_LONG_DELIVERY_INPUT T2 WHERE T1.OBJID = T2.PARENT_OBJID) AS INPUT_QTY
,(SELECT COALESCE(COUNT(1), 0) FROM SALES_LONG_DELIVERY_INPUT T2 WHERE T1.OBJID = T2.PARENT_OBJID) AS INPUT_CNT
,T3.*
FROM SALES_LONG_DELIVERY T1
LEFT OUTER JOIN (SELECT PARENT_OBJID
<!-- RIGHT JOIN (SELECT PARENT_OBJID -->
,SUM(QTY::NUMERIC) AS M_TOTAL
,SUM(CASE WHEN MONTH::NUMERIC = 1 THEN QTY::NUMERIC ELSE NULL END) AS M01
,SUM(CASE WHEN MONTH::NUMERIC = 2 THEN QTY::NUMERIC ELSE NULL END) AS M02
,SUM(CASE WHEN MONTH::NUMERIC = 3 THEN QTY::NUMERIC ELSE NULL END) AS M03
,SUM(CASE WHEN MONTH::NUMERIC = 4 THEN QTY::NUMERIC ELSE NULL END) AS M04
,SUM(CASE WHEN MONTH::NUMERIC = 5 THEN QTY::NUMERIC ELSE NULL END) AS M05
,SUM(CASE WHEN MONTH::NUMERIC = 6 THEN QTY::NUMERIC ELSE NULL END) AS M06
,SUM(CASE WHEN MONTH::NUMERIC = 7 THEN QTY::NUMERIC ELSE NULL END) AS M07
,SUM(CASE WHEN MONTH::NUMERIC = 8 THEN QTY::NUMERIC ELSE NULL END) AS M08
,SUM(CASE WHEN MONTH::NUMERIC = 9 THEN QTY::NUMERIC ELSE NULL END) AS M09
,SUM(CASE WHEN MONTH::NUMERIC =10 THEN QTY::NUMERIC ELSE NULL END) AS M10
,SUM(CASE WHEN MONTH::NUMERIC =11 THEN QTY::NUMERIC ELSE NULL END) AS M11
,SUM(CASE WHEN MONTH::NUMERIC =12 THEN QTY::NUMERIC ELSE NULL END) AS M12
FROM SALES_LONG_DELIVERY_PREDICT
GROUP BY PARENT_OBJID
) AS T3
ON T1.OBJID = T3.PARENT_OBJID
WHERE 1=1
<if test="ld_part_name !=null and ld_part_name != '' ">
AND T1.LD_PART_NAME LIKE '%'|| #{ld_part_name} ||'%'
</if>
<if test="Location !=null and Location != '' ">
AND T1.LOCATION = #{Location}
</if>
<if test="spec !=null and spec != '' ">
AND T1.SPEC LIKE '%'|| #{spec} ||'%'
</if>
<if test="maker !=null and maker != '' ">
AND T1.MAKER LIKE '%'|| #{maker} ||'%'
</if>
<if test="material_code !=null and material_code != '' ">
AND T1.MATERIAL_CODE LIKE '%'|| #{material_code} ||'%'
</if>
<if test="admin_supply !=null and admin_supply != '' ">
AND T1.SUPPLY_OBJID = #{admin_supply}
</if> ) T
</select>
<select id="salesLongDeliveryInfo" parameterType="map" resultType="map">
SELECT T1.OBJID
,T1.LD_PART_NAME
,T1.SPEC
,T1.FORM_NO
,T1.MAKER
,T1.MATERIAL_CODE
,T1.SUPPLY_OBJID
,(SELECT SUPPLY_NAME FROM admin_supply_mng s WHERE s.objid = T1.SUPPLY_OBJID::numeric) AS SUPPLY_NAME
,T1.REGDATE
,T1.WRITER
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T1.WRITER) AS WRITER_NAME
,T1.LOCATION
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = T1.LOCATION) AS LOCATION_NAME
,PRICE
FROM SALES_LONG_DELIVERY T1
WHERE 1=1
AND T1.OBJID = #{objId}
</select>
<select id="salesLongDeliveryInputList" parameterType="map" resultType="map">
SELECT OBJID
,PARENT_OBJID
,CONTRACT_OBJID
,INPUT_QTY
,INPUT_DATE
FROM SALES_LONG_DELIVERY_INPUT
WHERE 1=1
AND PARENT_OBJID = #{objId}
</select>
<select id="salesLongDeliveryPredictList" parameterType="map" resultType="map">
SELECT OBJID
,PARENT_OBJID
,CONTRACT_OBJID
,MONTH
,USE_PLACE
,QTY
,NOTE
FROM SALES_LONG_DELIVERY_PREDICT
WHERE 1=1
AND PARENT_OBJID = #{objId}
<if test="month !=null and month != '' ">
AND MONTH = #{month}
</if>
</select>
<delete id="deleteSalesLongDelivery" parameterType="map">
DELETE FROM SALES_LONG_DELIVERY WHERE OBJID = #{OBJID}
</delete>
<update id="mergeSalesLongDelivery" parameterType="map">
INSERT INTO SALES_LONG_DELIVERY (
OBJID
,LD_PART_NAME
,SPEC
,FORM_NO
,MAKER
,MATERIAL_CODE
,SUPPLY_OBJID
,REGDATE
,WRITER
,LOCATION
,PRICE
) VALUES (
#{OBJID }
,#{LD_PART_NAME }
,#{SPEC }
,#{FORM_NO }
,#{MAKER }
,#{MATERIAL_CODE}
,#{SUPPLY_OBJID }
,NOW()
,#{writer }
,#{LOCATION }
,#{PRICE }
) ON CONFLICT (OBJID) DO
UPDATE SET
LD_PART_NAME = #{LD_PART_NAME }
,SPEC = #{SPEC }
,FORM_NO = #{FORM_NO }
,MAKER = #{MAKER }
,MATERIAL_CODE = #{MATERIAL_CODE}
,SUPPLY_OBJID = #{SUPPLY_OBJID }
,REGDATE = NOW()
,WRITER = #{writer }
,LOCATION = #{LOCATION }
,PRICE = #{PRICE }
</update>
<delete id="deleteSalesLongDeliveryInput" parameterType="map">
DELETE FROM SALES_LONG_DELIVERY_INPUT WHERE PARENT_OBJID = #{PARENT_OBJID}
</delete>
<delete id="deleteSalesLongDeliveryPredict" parameterType="map">
DELETE FROM SALES_LONG_DELIVERY_PREDICT WHERE PARENT_OBJID = #{PARENT_OBJID}
</delete>
<update id="mergeSalesLongDeliveryInput" parameterType="map">
INSERT INTO SALES_LONG_DELIVERY_INPUT (
OBJID
,PARENT_OBJID
,CONTRACT_OBJID
,INPUT_QTY
,INPUT_DATE
) VALUES (
#{OBJID }
,#{PARENT_OBJID }
,#{CONTRACT_OBJID}
,#{INPUT_QTY }
,#{INPUT_DATE }
) ON CONFLICT (OBJID) DO
UPDATE SET
PARENT_OBJID = #{PARENT_OBJID }
,CONTRACT_OBJID= #{CONTRACT_OBJID}
,INPUT_QTY = #{INPUT_QTY }
,INPUT_DATE = #{INPUT_DATE }
</update>
<update id="mergeSalesLongDeliveryPredict" parameterType="map">
INSERT INTO SALES_LONG_DELIVERY_PREDICT (
OBJID
,PARENT_OBJID
,CONTRACT_OBJID
,MONTH
,USE_PLACE
,QTY
,NOTE
) VALUES (
#{OBJID }
,#{PARENT_OBJID}
,#{CONTRACT_OBJID}
,#{MONTH }
,#{USE_PLACE }
,#{QTY }
,#{NOTE }
) ON CONFLICT (OBJID) DO
UPDATE SET
PARENT_OBJID= #{PARENT_OBJID}
,CONTRACT_OBJID= #{CONTRACT_OBJID}
,MONTH = #{MONTH }
,USE_PLACE = #{USE_PLACE }
,QTY = #{QTY }
,NOTE = #{NOTE }
</update>
</mapper>