5483 lines
166 KiB
XML
5483 lines
166 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,
|
|
DOC_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 WHERE DOC_TYPE IN ('PURCHASE_REQUEST', 'PURCHASE_REG') OR DOC_TYPE IS NULL),
|
|
#{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 },
|
|
COALESCE(NULLIF(#{DOC_TYPE}, ''), 'PURCHASE_REQUEST')
|
|
) 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.PART_NO,
|
|
PM.PART_NAME,
|
|
PM.DUE_DATE,
|
|
COALESCE(
|
|
PM.OBJID,
|
|
(SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
|
|
) AS PROJECT_MGMT_OBJID,
|
|
-- M-BOM 조회용: SALES_REQUEST_MASTER에 저장된 MBOM_HEADER_OBJID 사용
|
|
SRM.MBOM_HEADER_OBJID,
|
|
COALESCE(
|
|
PM.BOM_REPORT_OBJID,
|
|
(SELECT BOM_REPORT_OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
|
|
) AS BOM_REPORT_OBJID,
|
|
PM.SETUP,
|
|
CASE
|
|
WHEN SM.OBJID IS NOT NULL THEN SM.SUPPLY_NAME
|
|
WHEN CM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = CM.CUSTOMER_OBJID)
|
|
ELSE SM.SUPPLY_NAME
|
|
END AS CUSTOMER_NAME,
|
|
COALESCE(SM.OBJID::VARCHAR, CM.CUSTOMER_OBJID) 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, -- 구매유형
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = COALESCE(NULLIF(SRM.PURCHASE_TYPE, ''), POM.TYPE)) AS PURCHASE_TYPE_NAME, -- 구매유형명
|
|
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 (드롭다운 선택용)
|
|
SRM.DOC_TYPE -- 문서유형 (PURCHASE_REQUEST, PURCHASE_REG, PROPOSAL 등)
|
|
-- 품번/품명: 첫 번째 품목 + 외 N건 형태
|
|
<!-- (SELECT
|
|
CASE
|
|
WHEN (SELECT COUNT(*) FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) > 1 THEN
|
|
COALESCE((SELECT PM2.PART_NO FROM PART_MNG PM2 WHERE PM2.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)), '') || ' 외 ' || ((SELECT COUNT(*) FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) - 1)::TEXT || '건'
|
|
ELSE
|
|
COALESCE((SELECT PM2.PART_NO FROM PART_MNG PM2 WHERE PM2.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)), '')
|
|
END
|
|
) AS PART_NO,
|
|
(SELECT
|
|
CASE
|
|
WHEN (SELECT COUNT(*) FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) > 1 THEN
|
|
COALESCE((SELECT PM2.PART_NAME FROM PART_MNG PM2 WHERE PM2.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)), '') || ' 외 ' || ((SELECT COUNT(*) FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) - 1)::TEXT || '건'
|
|
ELSE
|
|
COALESCE((SELECT PM2.PART_NAME FROM PART_MNG PM2 WHERE PM2.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)), '')
|
|
END
|
|
) AS PART_NAME -->
|
|
|
|
FROM
|
|
SALES_REQUEST_MASTER SRM
|
|
LEFT JOIN PROJECT_MGMT PM ON (SRM.PROJECT_NO = PM.OBJID::VARCHAR OR SRM.PROJECT_NO = PM.PROJECT_NO)
|
|
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},
|
|
COALESCE(NULLIF(TRIM(#{QTY}::TEXT), '')::NUMERIC, 0),
|
|
COALESCE(NULLIF(TRIM(#{ORG_QTY}::TEXT), '')::NUMERIC, 0),
|
|
#{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 = COALESCE(NULLIF(TRIM(#{QTY}::TEXT), '')::NUMERIC, 0),
|
|
ORG_QTY = COALESCE(NULLIF(TRIM(#{ORG_QTY}::TEXT), '')::NUMERIC, 0),
|
|
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,
|
|
|
|
-- 문서유형 (PURCHASE_REQUEST: 구매요청서, PROPOSAL: 품의서)
|
|
SRM.DOC_TYPE,
|
|
|
|
-- 구매요청서 작성 여부
|
|
-- M-BOM 기반이면 MBOM_HEADER_OBJID가 있으므로 'Y'
|
|
-- 수동 작성이면 SALES_REQUEST_PART에 데이터가 있으면 'Y'
|
|
CASE
|
|
WHEN SRM.MBOM_HEADER_OBJID IS NOT NULL AND SRM.MBOM_HEADER_OBJID::VARCHAR != '' THEN 'Y'
|
|
WHEN (SELECT COUNT(*) FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID AND (DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL)) > 0 THEN 'Y'
|
|
ELSE 'N'
|
|
END AS HAS_PURCHASE_REQUEST,
|
|
|
|
-- 견적요청서 존재 여부 (QUOTATION_REQUEST_MASTER에 데이터가 있으면 'Y')
|
|
COALESCE((SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END
|
|
FROM QUOTATION_REQUEST_MASTER
|
|
WHERE SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR), 'N') AS HAS_QUOTATION_REQUEST,
|
|
|
|
-- 견적요청서 개수
|
|
COALESCE((SELECT COUNT(*)
|
|
FROM QUOTATION_REQUEST_MASTER
|
|
WHERE SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR), 0) AS QUOTATION_REQUEST_COUNT,
|
|
|
|
-- M-BOM 관련 컬럼
|
|
SRM.MBOM_HEADER_OBJID,
|
|
|
|
-- 추가된 컬럼들
|
|
SRM.PURCHASE_TYPE,
|
|
CODE_NAME(SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
|
|
|
-- 주문유형: 프로젝트 정보(CATEGORY_CD) 우선, 없으면 SALES_REQUEST_MASTER 값
|
|
COALESCE(
|
|
(SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
SRM.ORDER_TYPE
|
|
) AS ORDER_TYPE,
|
|
CODE_NAME(COALESCE(
|
|
(SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
SRM.ORDER_TYPE
|
|
)) AS ORDER_TYPE_NAME,
|
|
|
|
-- 제품구분: 프로젝트 정보 우선, 없으면 SALES_REQUEST_MASTER 값
|
|
COALESCE(
|
|
(SELECT CC.CODE_NAME
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
|
LEFT JOIN COMM_CODE CC ON CC.CODE_ID = CM.PRODUCT
|
|
WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE 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,
|
|
|
|
-- 고객사: 프로젝트 정보 우선, 없으면 SALES_REQUEST_MASTER 값 (일반거래처 지원)
|
|
COALESCE(
|
|
(SELECT
|
|
CASE
|
|
WHEN CM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = CM.CUSTOMER_OBJID)
|
|
ELSE SM.SUPPLY_NAME
|
|
END
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
|
LEFT JOIN SUPPLY_MNG SM ON SM.OBJID::VARCHAR = CM.CUSTOMER_OBJID::VARCHAR
|
|
WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
(SELECT
|
|
CASE
|
|
WHEN SRM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = SRM.CUSTOMER_OBJID)
|
|
ELSE (SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID)
|
|
END
|
|
)
|
|
) AS CUSTOMER_NAME,
|
|
|
|
-- 유/무상: 프로젝트 정보 우선, 없으면 SALES_REQUEST_MASTER 값
|
|
COALESCE(
|
|
(SELECT CASE
|
|
WHEN CM.PAID_TYPE = 'paid' THEN '유상'
|
|
WHEN CM.PAID_TYPE = 'free' THEN '무상'
|
|
ELSE CM.PAID_TYPE
|
|
END
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
|
WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
(CASE WHEN SRM.PAID_TYPE = 'paid' THEN '유상' WHEN SRM.PAID_TYPE = 'free' THEN '무상' ELSE SRM.PAID_TYPE END)
|
|
) AS PAID_TYPE_NAME,
|
|
|
|
-- 품번/품명 ("외 N건" 형태로 표시)
|
|
-- M-BOM이 있으면 MBOM_DETAIL에서, 없으면 SALES_REQUEST_PART에서 조회
|
|
CASE
|
|
WHEN SRM.MBOM_HEADER_OBJID IS NOT NULL AND SRM.MBOM_HEADER_OBJID != '' THEN
|
|
(SELECT
|
|
CASE
|
|
WHEN COUNT(*) > 1 THEN
|
|
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
|
|
WHEN COUNT(*) = 1 THEN
|
|
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID ORDER BY REGDATE LIMIT 1))
|
|
ELSE NULL
|
|
END
|
|
FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID)
|
|
ELSE
|
|
(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) || '건'
|
|
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))
|
|
ELSE NULL
|
|
END
|
|
FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID)
|
|
END AS PART_NO,
|
|
CASE
|
|
WHEN SRM.MBOM_HEADER_OBJID IS NOT NULL AND SRM.MBOM_HEADER_OBJID != '' THEN
|
|
(SELECT
|
|
CASE
|
|
WHEN COUNT(*) > 1 THEN
|
|
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
|
|
WHEN COUNT(*) = 1 THEN
|
|
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID ORDER BY REGDATE LIMIT 1))
|
|
ELSE NULL
|
|
END
|
|
FROM MBOM_DETAIL WHERE MBOM_HEADER_OBJID = SRM.MBOM_HEADER_OBJID)
|
|
ELSE
|
|
(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) || '건'
|
|
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))
|
|
ELSE NULL
|
|
END
|
|
FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID)
|
|
END 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
|
|
-- PURCHASE_REG(구매요청서작성) 페이지용 상태
|
|
WHEN SRM.DOC_TYPE = 'PURCHASE_REG' THEN
|
|
CASE
|
|
-- 품의서 생성 여부 확인 (PROPOSAL 타입의 SALES_REQUEST_MASTER가 연결되어 있는지)
|
|
WHEN EXISTS (SELECT 1 FROM SALES_REQUEST_MASTER P WHERE P.DOC_TYPE = 'PROPOSAL' AND P.PROJECT_NO = SRM.OBJID::VARCHAR) THEN '품의서생성'
|
|
WHEN SRM.STATUS = 'confirmed' THEN '확정'
|
|
ELSE '작성중'
|
|
END
|
|
-- 기존 PURCHASE_REQUEST용 상태
|
|
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)) < (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 SRM.STATUS = 'confirmed' 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
|
|
-- 구매요청서만 조회 (품의서 제외)
|
|
-- DOC_TYPE_FILTER가 있으면 해당 값으로 필터링, 없으면 기존 조건 적용
|
|
<choose>
|
|
<when test="DOC_TYPE_FILTER != null and !''.equals(DOC_TYPE_FILTER)">
|
|
AND SRM.DOC_TYPE = #{DOC_TYPE_FILTER}
|
|
</when>
|
|
<otherwise>
|
|
AND (SRM.DOC_TYPE = 'PURCHASE_REQUEST' OR SRM.DOC_TYPE IS NULL)
|
|
</otherwise>
|
|
</choose>
|
|
<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 (
|
|
-- SALES_REQUEST_PART에서 검색
|
|
SRM.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 PM.PART_NO LIKE UPPER('%${SEARCH_PART_NO}%')
|
|
)
|
|
-- MBOM_DETAIL에서 검색 (M-BOM이 있는 경우)
|
|
OR SRM.MBOM_HEADER_OBJID IN (
|
|
SELECT MD.MBOM_HEADER_OBJID
|
|
FROM MBOM_DETAIL MD
|
|
LEFT OUTER JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE PM.PART_NO LIKE UPPER('%${SEARCH_PART_NO}%')
|
|
)
|
|
)
|
|
</if>
|
|
<if test="SEARCH_PART_NAME != null and !''.equals(SEARCH_PART_NAME)">
|
|
AND (
|
|
-- SALES_REQUEST_PART에서 검색
|
|
SRM.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 PM.PART_NAME LIKE UPPER('%${SEARCH_PART_NAME}%')
|
|
)
|
|
-- MBOM_DETAIL에서 검색 (M-BOM이 있는 경우)
|
|
OR SRM.MBOM_HEADER_OBJID IN (
|
|
SELECT MD.MBOM_HEADER_OBJID
|
|
FROM MBOM_DETAIL MD
|
|
LEFT OUTER JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE PM.PART_NAME LIKE UPPER('%${SEARCH_PART_NAME}%')
|
|
)
|
|
)
|
|
</if>
|
|
|
|
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
|
|
<![CDATA[ AND 0 < POSITION(STATUS || ',' IN #{SEARCH_STATUS}||',') ]]>
|
|
</if>
|
|
|
|
<if test="regdate_start != null and !''.equals(regdate_start)">
|
|
AND SRM.REGDATE::DATE <![CDATA[ >= ]]> #{regdate_start}::DATE
|
|
</if>
|
|
<if test="regdate_end != null and !''.equals(regdate_end)">
|
|
AND SRM.REGDATE::DATE <![CDATA[ <= ]]> #{regdate_end}::DATE
|
|
</if>
|
|
|
|
<!-- 공급업체 검색 -->
|
|
<if test="customer_cd != null and !''.equals(customer_cd)">
|
|
AND (
|
|
-- 프로젝트에서 고객사 조회
|
|
SRM.PROJECT_NO IN (
|
|
SELECT PM.OBJID::VARCHAR
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
|
WHERE CM.CUSTOMER_OBJID::VARCHAR = #{customer_cd}
|
|
)
|
|
-- 직접 저장된 고객사
|
|
OR SRM.CUSTOMER_OBJID = #{customer_cd}
|
|
)
|
|
</if>
|
|
|
|
<!-- 작성자 검색 -->
|
|
<if test="request_user != null and !''.equals(request_user)">
|
|
AND (SRM.REQUEST_USER_ID = #{request_user} OR SRM.WRITER = #{request_user})
|
|
</if>
|
|
|
|
<!-- 제품구분 검색 -->
|
|
<if test="part_type != null and !''.equals(part_type)">
|
|
AND (
|
|
-- 프로젝트에서 제품구분 조회
|
|
SRM.PROJECT_NO IN (
|
|
SELECT PM.OBJID::VARCHAR
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
|
WHERE CM.PRODUCT = #{part_type}
|
|
)
|
|
-- 직접 저장된 제품구분
|
|
OR SRM.PRODUCT_NAME = #{part_type}
|
|
)
|
|
</if>
|
|
|
|
<!-- 프로젝트번호 검색 (단일 선택) -->
|
|
<if test="project_no != null and !''.equals(project_no)">
|
|
AND SRM.PROJECT_NO = #{project_no}
|
|
</if>
|
|
|
|
<!-- 구매유형 검색 (멀티선택) -->
|
|
<if test="purchase_types != null and !''.equals(purchase_types)">
|
|
AND SRM.PURCHASE_TYPE IN
|
|
<foreach item="item" collection="purchase_types.split(',')" open="(" separator="," close=")">
|
|
#{item}
|
|
</foreach>
|
|
</if>
|
|
|
|
<!-- 작성자 검색 (writer 파라미터) -->
|
|
<if test="writer != null and !''.equals(writer)">
|
|
AND (SRM.REQUEST_USER_ID = #{writer} OR SRM.WRITER = #{writer})
|
|
</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
|
|
,CASE WHEN PM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG AS C WHERE 'C_' || C.OBJID::VARCHAR = PM.CUSTOMER_OBJID) ELSE (SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = PM.CUSTOMER_OBJID::VARCHAR) END 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>
|
|
|
|
<!-- 전체 품목 조회 (M-BOM이 없을 때 사용) -->
|
|
<select id="getAllPartMngList" parameterType="map" resultType="map">
|
|
SELECT
|
|
PM.OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
PM.SPEC,
|
|
PM.MAKER,
|
|
PM.MATERIAL,
|
|
PM.UNIT,
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.UNIT) AS UNIT_TITLE
|
|
FROM PART_MNG PM
|
|
WHERE 1=1
|
|
AND PM.IS_LAST = '1'
|
|
ORDER BY PM.PART_NO
|
|
LIMIT 500
|
|
</select>
|
|
|
|
<select id="SalesBomPartListByProjectUnit" parameterType="map" resultType="map">
|
|
<!-- M-BOM 데이터 조회: getMbomList와 동일한 조인 방식 사용 (BPQ.PART_NO = PM.PART_NO) -->
|
|
SELECT
|
|
BPQ.BOM_REPORT_OBJID
|
|
,BPQ.PART_NO AS PART_OBJID
|
|
,COALESCE(PM.PART_NO, BPQ.PART_NO, '') AS PART_NO
|
|
,COALESCE(PM.PART_NAME, '') AS PART_NAME
|
|
,COALESCE(PM.PART_NAME, '') AS PART_FULL_NAME
|
|
,COALESCE(PM.SPEC, '') AS SPEC
|
|
,BPQ.QTY AS ORDER_QTY
|
|
,COALESCE(PM.MAKER, '') AS MAKER
|
|
,'' AS REMARK
|
|
,'' AS UNIT
|
|
,NULL AS SUPPLY_OBJID
|
|
,NULL AS WRITER
|
|
FROM
|
|
PROJECT_MGMT AS PJT
|
|
INNER JOIN BOM_PART_QTY AS BPQ
|
|
ON PJT.BOM_REPORT_OBJID::VARCHAR = BPQ.BOM_REPORT_OBJID::VARCHAR
|
|
LEFT JOIN PART_MNG AS PM
|
|
ON BPQ.PART_NO = PM.PART_NO
|
|
WHERE 1=1
|
|
AND PJT.OBJID::VARCHAR = #{PROJECT_OBJID}
|
|
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
|
|
AND PJT.BOM_REPORT_OBJID IS NOT NULL
|
|
AND PJT.BOM_REPORT_OBJID != ''
|
|
ORDER BY BPQ.SEQ
|
|
</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 < 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 < 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>
|
|
|
|
<!-- 구매리스트 관련 쿼리 -->
|
|
<!-- M-BOM에서 가져온 PART_OBJID는 BPQ.PART_NO 값이므로 PART_MGMT.PART_NO와 조인 -->
|
|
<select id="getSalesRequestPartList" parameterType="string" resultType="map">
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.PART_OBJID,
|
|
COALESCE(PM.PART_NO, '') AS PART_NO,
|
|
COALESCE(PM.PART_NAME, '') AS PART_NAME,
|
|
SRP.QTY,
|
|
SRP.PARTNER_OBJID,
|
|
SRP.PARTNER_PRICE
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MGMT PM ON SRP.PART_OBJID = PM.PART_NO
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
|
ORDER BY SRP.REGDATE
|
|
</select>
|
|
|
|
<update id="mergePurchaseListInfo" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_PART (
|
|
OBJID,
|
|
SALES_REQUEST_MASTER_OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
QTY,
|
|
ITEM_QTY,
|
|
FILE_3D,
|
|
FILE_2D,
|
|
FILE_PDF,
|
|
MATERIAL,
|
|
HEAT_TREATMENT_HARDNESS,
|
|
HEAT_TREATMENT_METHOD,
|
|
SURFACE_TREATMENT,
|
|
SUPPLIER,
|
|
CATEGORY_NAME,
|
|
SUPPLY_TYPE,
|
|
RAW_MATERIAL,
|
|
SIZE,
|
|
RAW_MATERIAL_PART_NO,
|
|
RAW_MATERIAL_REQUIRED_QTY,
|
|
RAW_MATERIAL_ORDER_QTY,
|
|
ITEM_QTY2,
|
|
PRODUCTION_QTY,
|
|
PROCESSING_COMPANY,
|
|
PROCESSING_DELIVERY_DATE,
|
|
GRINDING_DELIVERY_DATE,
|
|
USE_YN,
|
|
NET_QTY,
|
|
ORDER_QTY,
|
|
SUPPLIER2,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
PROPOSAL_DATE,
|
|
WRITER,
|
|
REGDATE
|
|
) VALUES (
|
|
#{OBJID},
|
|
#{SALES_REQUEST_MASTER_OBJID},
|
|
#{PART_NO},
|
|
#{PART_NAME},
|
|
#{QTY},
|
|
#{ITEM_QTY},
|
|
#{FILE_3D},
|
|
#{FILE_2D},
|
|
#{FILE_PDF},
|
|
#{MATERIAL},
|
|
#{HEAT_TREATMENT_HARDNESS},
|
|
#{HEAT_TREATMENT_METHOD},
|
|
#{SURFACE_TREATMENT},
|
|
#{SUPPLIER},
|
|
#{CATEGORY_NAME},
|
|
#{SUPPLY_TYPE},
|
|
#{RAW_MATERIAL},
|
|
#{SIZE},
|
|
#{RAW_MATERIAL_PART_NO},
|
|
#{RAW_MATERIAL_REQUIRED_QTY},
|
|
#{RAW_MATERIAL_ORDER_QTY},
|
|
#{ITEM_QTY2},
|
|
#{PRODUCTION_QTY},
|
|
#{PROCESSING_COMPANY},
|
|
CASE WHEN #{PROCESSING_DELIVERY_DATE} = '' THEN NULL ELSE #{PROCESSING_DELIVERY_DATE}::date END,
|
|
CASE WHEN #{GRINDING_DELIVERY_DATE} = '' THEN NULL ELSE #{GRINDING_DELIVERY_DATE}::date END,
|
|
#{USE_YN},
|
|
#{NET_QTY},
|
|
#{ORDER_QTY},
|
|
#{SUPPLIER2},
|
|
#{UNIT_PRICE},
|
|
#{TOTAL_PRICE},
|
|
CASE WHEN #{PROPOSAL_DATE} = '' THEN NOW() ELSE #{PROPOSAL_DATE}::date END,
|
|
#{WRITER},
|
|
NOW()
|
|
) ON CONFLICT (OBJID) DO
|
|
UPDATE SET
|
|
ITEM_QTY = #{ITEM_QTY},
|
|
FILE_3D = #{FILE_3D},
|
|
FILE_2D = #{FILE_2D},
|
|
FILE_PDF = #{FILE_PDF},
|
|
MATERIAL = #{MATERIAL},
|
|
HEAT_TREATMENT_HARDNESS = #{HEAT_TREATMENT_HARDNESS},
|
|
HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD},
|
|
SURFACE_TREATMENT = #{SURFACE_TREATMENT},
|
|
SUPPLIER = #{SUPPLIER},
|
|
CATEGORY_NAME = #{CATEGORY_NAME},
|
|
SUPPLY_TYPE = #{SUPPLY_TYPE},
|
|
RAW_MATERIAL = #{RAW_MATERIAL},
|
|
SIZE = #{SIZE},
|
|
RAW_MATERIAL_PART_NO = #{RAW_MATERIAL_PART_NO},
|
|
RAW_MATERIAL_REQUIRED_QTY = #{RAW_MATERIAL_REQUIRED_QTY},
|
|
RAW_MATERIAL_ORDER_QTY = #{RAW_MATERIAL_ORDER_QTY},
|
|
ITEM_QTY2 = #{ITEM_QTY2},
|
|
PRODUCTION_QTY = #{PRODUCTION_QTY},
|
|
PROCESSING_COMPANY = #{PROCESSING_COMPANY},
|
|
PROCESSING_DELIVERY_DATE = CASE WHEN #{PROCESSING_DELIVERY_DATE} = '' THEN NULL ELSE #{PROCESSING_DELIVERY_DATE}::date END,
|
|
GRINDING_DELIVERY_DATE = CASE WHEN #{GRINDING_DELIVERY_DATE} = '' THEN NULL ELSE #{GRINDING_DELIVERY_DATE}::date END,
|
|
USE_YN = #{USE_YN},
|
|
NET_QTY = #{NET_QTY},
|
|
ORDER_QTY = #{ORDER_QTY},
|
|
SUPPLIER2 = #{SUPPLIER2},
|
|
UNIT_PRICE = #{UNIT_PRICE},
|
|
TOTAL_PRICE = #{TOTAL_PRICE}
|
|
</update>
|
|
|
|
<!-- 구매리스트 상세 조회 (기존 저장된 데이터) - 이 쿼리는 사용하지 않음, M-BOM 기반으로만 동작 -->
|
|
<select id="getPurchaseListDetail" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
<!-- SALES_REQUEST_PART에서 저장된 데이터 조회, PART_MNG에서 품목정보 가져옴 -->
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.SALES_REQUEST_MASTER_OBJID,
|
|
SRP.PART_OBJID,
|
|
COALESCE(PM.PART_NO, '') AS PART_NO,
|
|
COALESCE(PM.PART_NAME, '') AS PART_NAME,
|
|
SRP.QTY,
|
|
0 AS ITEM_QTY,
|
|
-- 파일 개수
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
|
COALESCE(PM.MATERIAL, '') AS MATERIAL,
|
|
COALESCE(PM.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
|
|
COALESCE(PM.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
|
|
COALESCE(PM.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
|
|
COALESCE(PM.MAKER, '') AS VENDOR,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.PART_TYPE) AS PART_TYPE_TITLE,
|
|
'' AS SUPPLY_TYPE,
|
|
'' AS RAW_MATERIAL,
|
|
'' AS SIZE,
|
|
'' AS RAW_MATERIAL_NO,
|
|
0 AS REQUIRED_QTY,
|
|
0 AS ORDER_QTY,
|
|
0 AS ITEM_QTY2,
|
|
0 AS PRODUCTION_QTY,
|
|
COALESCE(SRP.PROCESSING_VENDOR, '') AS PROCESSING_VENDOR,
|
|
NULL AS PROCESSING_DEADLINE,
|
|
NULL AS GRINDING_DEADLINE,
|
|
-- 구매 관련 컬럼 (SALES_REQUEST_PART에서 조회)
|
|
COALESCE(SRP.USE_YN, 'Y') AS USE_YN,
|
|
COALESCE(SRP.NET_QTY, 0) AS NET_QTY,
|
|
COALESCE(SRP.PO_QTY, 0) AS PO_QTY,
|
|
COALESCE(SRP.VENDOR_PM, SRP.PARTNER_OBJID) AS VENDOR_PM,
|
|
COALESCE(SRP.UNIT_PRICE, NULLIF(SRP.PARTNER_PRICE, '')::numeric, 0) AS UNIT_PRICE,
|
|
COALESCE(SRP.TOTAL_PRICE, 0) AS TOTAL_PRICE,
|
|
0 AS PROCESSING_UNIT_PRICE,
|
|
0 AS PROCESSING_TOTAL_PRICE,
|
|
0 AS GRAND_TOTAL_PRICE,
|
|
SRP.PROPOSAL_DATE,
|
|
NULL AS PROCESSING_PROPOSAL_DATE,
|
|
'SRP' AS DATA_SOURCE -- 데이터 소스 구분용
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
|
ORDER BY
|
|
SRP.REGDATE
|
|
</select>
|
|
|
|
<!-- M-BOM에서 구매리스트 데이터 가져오기 (품번별 그룹핑 버전) -->
|
|
<!-- 동일 품번은 수량 합산, 단가/업체는 대표값 사용 -->
|
|
<select id="getMBomForPurchaseList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
WITH RECURSIVE VIEW_BOM(
|
|
MBOM_HEADER_OBJID,
|
|
OBJID,
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
PART_OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
QTY,
|
|
ITEM_QTY,
|
|
QTY_TEMP,
|
|
REGDATE,
|
|
SEQ,
|
|
STATUS,
|
|
LEV,
|
|
PATH,
|
|
PATH2,
|
|
CYCLE,
|
|
UNIT,
|
|
SUPPLY_TYPE,
|
|
MAKE_OR_BUY,
|
|
RAW_MATERIAL_PART_NO,
|
|
RAW_MATERIAL_SPEC,
|
|
RAW_MATERIAL,
|
|
RAW_MATERIAL_SIZE,
|
|
PROCESSING_VENDOR,
|
|
PROCESSING_DEADLINE,
|
|
GRINDING_DEADLINE,
|
|
REQUIRED_QTY,
|
|
ORDER_QTY,
|
|
PRODUCTION_QTY,
|
|
STOCK_QTY,
|
|
SHORTAGE_QTY,
|
|
VENDOR,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
CURRENCY,
|
|
LEAD_TIME,
|
|
MIN_ORDER_QTY,
|
|
WRITER,
|
|
EDITER,
|
|
EDIT_DATE,
|
|
REMARK,
|
|
USE_YN,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
PROPOSAL_DATE,
|
|
PROCESSING_PROPOSAL_DATE,
|
|
PROCESSING_UNIT_PRICE,
|
|
PROCESSING_TOTAL_PRICE,
|
|
GRAND_TOTAL_PRICE
|
|
) AS (
|
|
SELECT
|
|
A.MBOM_HEADER_OBJID,
|
|
A.OBJID,
|
|
A.PARENT_OBJID,
|
|
A.CHILD_OBJID,
|
|
A.PART_OBJID,
|
|
A.PART_NO,
|
|
A.PART_NAME,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.REGDATE,
|
|
A.SEQ,
|
|
A.STATUS,
|
|
1,
|
|
ARRAY [A.CHILD_OBJID::TEXT],
|
|
ARRAY [A.SEQ::TEXT],
|
|
FALSE,
|
|
A.UNIT,
|
|
A.SUPPLY_TYPE,
|
|
A.MAKE_OR_BUY,
|
|
A.RAW_MATERIAL_PART_NO,
|
|
A.RAW_MATERIAL_SPEC,
|
|
A.RAW_MATERIAL,
|
|
A.RAW_MATERIAL_SIZE,
|
|
A.PROCESSING_VENDOR,
|
|
A.PROCESSING_DEADLINE,
|
|
A.GRINDING_DEADLINE,
|
|
A.REQUIRED_QTY,
|
|
A.ORDER_QTY,
|
|
A.PRODUCTION_QTY,
|
|
A.STOCK_QTY,
|
|
A.SHORTAGE_QTY,
|
|
A.VENDOR,
|
|
A.UNIT_PRICE,
|
|
A.TOTAL_PRICE,
|
|
A.CURRENCY,
|
|
A.LEAD_TIME,
|
|
A.MIN_ORDER_QTY,
|
|
A.WRITER,
|
|
A.EDITER,
|
|
A.EDIT_DATE,
|
|
A.REMARK,
|
|
COALESCE(A.USE_YN, 'Y'),
|
|
COALESCE(A.NET_QTY, 0),
|
|
COALESCE(A.PO_QTY, 0),
|
|
A.PROPOSAL_DATE,
|
|
A.PROCESSING_PROPOSAL_DATE,
|
|
COALESCE(A.PROCESSING_UNIT_PRICE, 0),
|
|
COALESCE(A.PROCESSING_TOTAL_PRICE, 0),
|
|
COALESCE(A.GRAND_TOTAL_PRICE, 0)
|
|
FROM
|
|
MBOM_DETAIL A
|
|
INNER JOIN MBOM_HEADER MH ON MH.OBJID = A.MBOM_HEADER_OBJID
|
|
WHERE 1=1
|
|
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
|
AND (
|
|
MH.PROJECT_OBJID::VARCHAR = #{PROJECT_MGMT_OBJID}
|
|
OR MH.OBJID::VARCHAR = #{PROJECT_MGMT_OBJID}
|
|
)
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
B.MBOM_HEADER_OBJID,
|
|
B.OBJID,
|
|
B.PARENT_OBJID,
|
|
B.CHILD_OBJID,
|
|
B.PART_OBJID,
|
|
B.PART_NO,
|
|
B.PART_NAME,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.REGDATE,
|
|
B.SEQ,
|
|
B.STATUS,
|
|
LEV + 1,
|
|
PATH||B.CHILD_OBJID::TEXT,
|
|
PATH2||B.SEQ::TEXT,
|
|
B.PARENT_OBJID = ANY(PATH),
|
|
B.UNIT,
|
|
B.SUPPLY_TYPE,
|
|
B.MAKE_OR_BUY,
|
|
B.RAW_MATERIAL_PART_NO,
|
|
B.RAW_MATERIAL_SPEC,
|
|
B.RAW_MATERIAL,
|
|
B.RAW_MATERIAL_SIZE,
|
|
B.PROCESSING_VENDOR,
|
|
B.PROCESSING_DEADLINE,
|
|
B.GRINDING_DEADLINE,
|
|
B.REQUIRED_QTY,
|
|
B.ORDER_QTY,
|
|
B.PRODUCTION_QTY,
|
|
B.STOCK_QTY,
|
|
B.SHORTAGE_QTY,
|
|
B.VENDOR,
|
|
B.UNIT_PRICE,
|
|
B.TOTAL_PRICE,
|
|
B.CURRENCY,
|
|
B.LEAD_TIME,
|
|
B.MIN_ORDER_QTY,
|
|
B.WRITER,
|
|
B.EDITER,
|
|
B.EDIT_DATE,
|
|
B.REMARK,
|
|
COALESCE(B.USE_YN, 'Y'),
|
|
COALESCE(B.NET_QTY, 0),
|
|
COALESCE(B.PO_QTY, 0),
|
|
B.PROPOSAL_DATE,
|
|
B.PROCESSING_PROPOSAL_DATE,
|
|
COALESCE(B.PROCESSING_UNIT_PRICE, 0),
|
|
COALESCE(B.PROCESSING_TOTAL_PRICE, 0),
|
|
COALESCE(B.GRAND_TOTAL_PRICE, 0)
|
|
FROM
|
|
MBOM_DETAIL B
|
|
JOIN
|
|
VIEW_BOM
|
|
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
|
|
AND VIEW_BOM.MBOM_HEADER_OBJID = B.MBOM_HEADER_OBJID
|
|
),
|
|
/* 품번 + 자급/사급 + 소재재질 + 규격이 같은 경우만 그룹핑 */
|
|
/* MBOM_DETAIL 테이블의 RAW_MATERIAL, RAW_MATERIAL_SIZE 값만 사용 */
|
|
GROUPED_BOM AS (
|
|
SELECT
|
|
V.PART_NO,
|
|
V.PART_OBJID,
|
|
/* 그룹핑 조건 컬럼들 (MBOM_DETAIL 값만 사용) */
|
|
COALESCE(V.SUPPLY_TYPE, '') AS SUPPLY_TYPE,
|
|
COALESCE(V.RAW_MATERIAL, '') AS RAW_MATERIAL,
|
|
COALESCE(V.RAW_MATERIAL_SIZE, '') AS RAW_MATERIAL_SIZE,
|
|
/* 원본 OBJID들 (콤마로 연결) */
|
|
STRING_AGG(V.OBJID::VARCHAR, ',' ORDER BY V.OBJID) AS ORIGINAL_OBJIDS,
|
|
/* 대표 OBJID (가장 작은 값) */
|
|
MIN(V.OBJID) AS OBJID,
|
|
/* 수량 합산 (문자열을 NUMERIC으로 캐스팅) */
|
|
SUM(COALESCE(NULLIF(V.REQUIRED_QTY::TEXT, '')::NUMERIC, 0)) AS REQUIRED_QTY,
|
|
SUM(COALESCE(NULLIF(V.PRODUCTION_QTY::TEXT, '')::NUMERIC, 0)) AS PRODUCTION_QTY,
|
|
SUM(COALESCE(V.NET_QTY, 0)) AS NET_QTY,
|
|
SUM(COALESCE(V.PO_QTY, 0)) AS PO_QTY,
|
|
SUM(COALESCE(NULLIF(V.ORDER_QTY::TEXT, '')::NUMERIC, 0)) AS ORDER_QTY,
|
|
SUM(COALESCE(NULLIF(V.STOCK_QTY::TEXT, '')::NUMERIC, 0)) AS STOCK_QTY,
|
|
SUM(COALESCE(NULLIF(V.SHORTAGE_QTY::TEXT, '')::NUMERIC, 0)) AS SHORTAGE_QTY,
|
|
/* 첫번째 값 사용 (대표값) */
|
|
MIN(V.MBOM_HEADER_OBJID) AS MBOM_HEADER_OBJID,
|
|
MIN(V.PARENT_OBJID) AS PARENT_OBJID,
|
|
MIN(V.CHILD_OBJID) AS CHILD_OBJID,
|
|
MIN(V.PART_NAME) AS PART_NAME,
|
|
SUM(COALESCE(NULLIF(V.QTY::TEXT, '')::NUMERIC, 0)) AS QTY,
|
|
MIN(V.SEQ) AS SEQ,
|
|
MIN(V.STATUS) AS STATUS,
|
|
MIN(V.LEV) AS LEV,
|
|
MIN(V.UNIT) AS UNIT,
|
|
MIN(V.MAKE_OR_BUY) AS MAKE_OR_BUY,
|
|
MIN(V.RAW_MATERIAL_PART_NO) AS RAW_MATERIAL_PART_NO,
|
|
MIN(V.RAW_MATERIAL_SPEC) AS RAW_MATERIAL_SPEC,
|
|
MIN(V.PROCESSING_VENDOR) AS PROCESSING_VENDOR,
|
|
MIN(V.PROCESSING_DEADLINE) AS PROCESSING_DEADLINE,
|
|
MIN(V.GRINDING_DEADLINE) AS GRINDING_DEADLINE,
|
|
MIN(V.VENDOR) AS VENDOR,
|
|
MIN(V.UNIT_PRICE) AS UNIT_PRICE,
|
|
MIN(V.TOTAL_PRICE) AS TOTAL_PRICE,
|
|
MIN(V.CURRENCY) AS CURRENCY,
|
|
MIN(V.LEAD_TIME) AS LEAD_TIME,
|
|
MIN(V.MIN_ORDER_QTY) AS MIN_ORDER_QTY,
|
|
MIN(V.WRITER) AS WRITER,
|
|
MIN(V.REGDATE) AS REGDATE,
|
|
MIN(V.EDITER) AS EDITER,
|
|
MIN(V.EDIT_DATE) AS EDIT_DATE,
|
|
MIN(V.REMARK) AS REMARK,
|
|
MIN(V.USE_YN) AS USE_YN,
|
|
MIN(V.PROPOSAL_DATE) AS PROPOSAL_DATE,
|
|
MIN(V.PROCESSING_PROPOSAL_DATE) AS PROCESSING_PROPOSAL_DATE,
|
|
MIN(V.PROCESSING_UNIT_PRICE) AS PROCESSING_UNIT_PRICE,
|
|
MIN(V.PROCESSING_TOTAL_PRICE) AS PROCESSING_TOTAL_PRICE,
|
|
MIN(V.GRAND_TOTAL_PRICE) AS GRAND_TOTAL_PRICE,
|
|
/* 그룹에 포함된 행 수 */
|
|
COUNT(*) AS GROUPED_COUNT
|
|
FROM VIEW_BOM V
|
|
WHERE COALESCE(V.PRODUCTION_QTY, 0) > 0
|
|
GROUP BY V.PART_NO, V.PART_OBJID,
|
|
COALESCE(V.SUPPLY_TYPE, ''),
|
|
COALESCE(V.RAW_MATERIAL, ''),
|
|
COALESCE(V.RAW_MATERIAL_SIZE, '')
|
|
)
|
|
SELECT
|
|
G.MBOM_HEADER_OBJID AS BOM_REPORT_OBJID,
|
|
G.OBJID,
|
|
G.ORIGINAL_OBJIDS,
|
|
G.GROUPED_COUNT,
|
|
G.PARENT_OBJID,
|
|
G.CHILD_OBJID,
|
|
G.PART_OBJID,
|
|
G.PART_OBJID AS LAST_PART_OBJID,
|
|
G.PART_OBJID AS BOM_LAST_PART_OBJID,
|
|
G.PART_NO,
|
|
G.PART_NAME,
|
|
G.QTY,
|
|
G.QTY AS ITEM_QTY,
|
|
G.QTY AS QTY_TEMP,
|
|
G.LEV AS LEVEL,
|
|
0 AS SUB_PART_CNT,
|
|
G.SEQ,
|
|
G.STATUS,
|
|
G.UNIT,
|
|
G.SUPPLY_TYPE,
|
|
G.MAKE_OR_BUY,
|
|
G.RAW_MATERIAL_PART_NO AS RAW_MATERIAL_NO,
|
|
G.RAW_MATERIAL_SPEC,
|
|
G.RAW_MATERIAL,
|
|
G.RAW_MATERIAL_SIZE AS SIZE,
|
|
G.PROCESSING_VENDOR,
|
|
G.PROCESSING_DEADLINE,
|
|
G.GRINDING_DEADLINE,
|
|
G.REQUIRED_QTY,
|
|
G.ORDER_QTY,
|
|
G.PRODUCTION_QTY,
|
|
G.STOCK_QTY,
|
|
G.SHORTAGE_QTY,
|
|
G.VENDOR AS VENDOR_PM,
|
|
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = G.VENDOR) AS VENDOR_NAME,
|
|
G.UNIT_PRICE,
|
|
G.TOTAL_PRICE,
|
|
G.CURRENCY,
|
|
G.LEAD_TIME,
|
|
G.MIN_ORDER_QTY,
|
|
G.WRITER,
|
|
TO_CHAR(G.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE,
|
|
G.EDITER,
|
|
CASE WHEN G.EDIT_DATE IS NOT NULL THEN TO_CHAR(G.EDIT_DATE, 'YYYY-MM-DD HH24:MI:SS') ELSE NULL END AS EDIT_DATE,
|
|
G.REMARK,
|
|
NULL AS PARENT_PART_NO,
|
|
NULL AS CONTRACT_OBJID,
|
|
G.OBJID AS ROOT_OBJID,
|
|
G.OBJID AS SUB_ROOT_OBJID,
|
|
1 AS LEAF,
|
|
P.SPEC,
|
|
COALESCE(P.MATERIAL, G.RAW_MATERIAL) AS MATERIAL,
|
|
P.WEIGHT,
|
|
P.PART_TYPE,
|
|
P.REVISION,
|
|
COALESCE(P.MAKER, G.VENDOR) AS VENDOR,
|
|
P.THICKNESS,
|
|
P.WIDTH,
|
|
P.HEIGHT,
|
|
P.OUT_DIAMETER,
|
|
P.IN_DIAMETER,
|
|
P.LENGTH,
|
|
P.SOURCING_CODE,
|
|
COALESCE(P.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
|
|
COALESCE(P.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
|
|
COALESCE(P.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
|
G.LEV,
|
|
G.USE_YN,
|
|
G.NET_QTY,
|
|
G.PO_QTY,
|
|
G.PROPOSAL_DATE,
|
|
G.PROCESSING_PROPOSAL_DATE,
|
|
G.PROCESSING_UNIT_PRICE,
|
|
G.PROCESSING_TOTAL_PRICE,
|
|
G.GRAND_TOTAL_PRICE,
|
|
'MBOM' AS DATA_SOURCE
|
|
FROM GROUPED_BOM G
|
|
LEFT JOIN PART_MNG P ON P.OBJID::VARCHAR = G.PART_OBJID::VARCHAR
|
|
ORDER BY G.PART_NO
|
|
</select>
|
|
|
|
<!-- M-BOM에서 구매리스트 데이터 가져오기 (백업용 - 개별 행 버전) -->
|
|
<select id="getMBomForPurchaseList_old" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
WITH RECURSIVE VIEW_BOM(
|
|
MBOM_HEADER_OBJID,
|
|
OBJID,
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
PART_OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
QTY,
|
|
ITEM_QTY,
|
|
QTY_TEMP,
|
|
REGDATE,
|
|
SEQ,
|
|
STATUS,
|
|
LEV,
|
|
PATH,
|
|
PATH2,
|
|
CYCLE,
|
|
UNIT,
|
|
SUPPLY_TYPE,
|
|
MAKE_OR_BUY,
|
|
RAW_MATERIAL_PART_NO,
|
|
RAW_MATERIAL_SPEC,
|
|
RAW_MATERIAL,
|
|
RAW_MATERIAL_SIZE,
|
|
PROCESSING_VENDOR,
|
|
PROCESSING_DEADLINE,
|
|
GRINDING_DEADLINE,
|
|
REQUIRED_QTY,
|
|
ORDER_QTY,
|
|
PRODUCTION_QTY,
|
|
STOCK_QTY,
|
|
SHORTAGE_QTY,
|
|
VENDOR,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
CURRENCY,
|
|
LEAD_TIME,
|
|
MIN_ORDER_QTY,
|
|
WRITER,
|
|
EDITER,
|
|
EDIT_DATE,
|
|
REMARK,
|
|
USE_YN,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
PROPOSAL_DATE,
|
|
PROCESSING_PROPOSAL_DATE,
|
|
PROCESSING_UNIT_PRICE,
|
|
PROCESSING_TOTAL_PRICE,
|
|
GRAND_TOTAL_PRICE
|
|
) AS (
|
|
SELECT
|
|
A.MBOM_HEADER_OBJID,
|
|
A.OBJID,
|
|
A.PARENT_OBJID,
|
|
A.CHILD_OBJID,
|
|
A.PART_OBJID,
|
|
A.PART_NO,
|
|
A.PART_NAME,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.REGDATE,
|
|
A.SEQ,
|
|
A.STATUS,
|
|
1,
|
|
ARRAY [A.CHILD_OBJID::TEXT],
|
|
ARRAY [A.SEQ::TEXT],
|
|
FALSE,
|
|
A.UNIT,
|
|
A.SUPPLY_TYPE,
|
|
A.MAKE_OR_BUY,
|
|
A.RAW_MATERIAL_PART_NO,
|
|
A.RAW_MATERIAL_SPEC,
|
|
A.RAW_MATERIAL,
|
|
A.RAW_MATERIAL_SIZE,
|
|
A.PROCESSING_VENDOR,
|
|
A.PROCESSING_DEADLINE,
|
|
A.GRINDING_DEADLINE,
|
|
A.REQUIRED_QTY,
|
|
A.ORDER_QTY,
|
|
A.PRODUCTION_QTY,
|
|
A.STOCK_QTY,
|
|
A.SHORTAGE_QTY,
|
|
A.VENDOR,
|
|
A.UNIT_PRICE,
|
|
A.TOTAL_PRICE,
|
|
A.CURRENCY,
|
|
A.LEAD_TIME,
|
|
A.MIN_ORDER_QTY,
|
|
A.WRITER,
|
|
A.EDITER,
|
|
A.EDIT_DATE,
|
|
A.REMARK,
|
|
COALESCE(A.USE_YN, 'Y'),
|
|
COALESCE(A.NET_QTY, 0),
|
|
COALESCE(A.PO_QTY, 0),
|
|
A.PROPOSAL_DATE,
|
|
A.PROCESSING_PROPOSAL_DATE,
|
|
COALESCE(A.PROCESSING_UNIT_PRICE, 0),
|
|
COALESCE(A.PROCESSING_TOTAL_PRICE, 0),
|
|
COALESCE(A.GRAND_TOTAL_PRICE, 0)
|
|
FROM
|
|
MBOM_DETAIL A
|
|
INNER JOIN MBOM_HEADER MH ON MH.OBJID = A.MBOM_HEADER_OBJID
|
|
WHERE 1=1
|
|
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
|
AND (
|
|
MH.PROJECT_OBJID::VARCHAR = #{PROJECT_MGMT_OBJID}
|
|
OR MH.OBJID::VARCHAR = #{PROJECT_MGMT_OBJID}
|
|
)
|
|
<!-- STATUS 조건 제거하여 모든 데이터 조회 -->
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
B.MBOM_HEADER_OBJID,
|
|
B.OBJID,
|
|
B.PARENT_OBJID,
|
|
B.CHILD_OBJID,
|
|
B.PART_OBJID,
|
|
B.PART_NO,
|
|
B.PART_NAME,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.REGDATE,
|
|
B.SEQ,
|
|
B.STATUS,
|
|
LEV + 1,
|
|
PATH||B.CHILD_OBJID::TEXT,
|
|
PATH2||B.SEQ::TEXT,
|
|
B.PARENT_OBJID = ANY(PATH),
|
|
B.UNIT,
|
|
B.SUPPLY_TYPE,
|
|
B.MAKE_OR_BUY,
|
|
B.RAW_MATERIAL_PART_NO,
|
|
B.RAW_MATERIAL_SPEC,
|
|
B.RAW_MATERIAL,
|
|
B.RAW_MATERIAL_SIZE,
|
|
B.PROCESSING_VENDOR,
|
|
B.PROCESSING_DEADLINE,
|
|
B.GRINDING_DEADLINE,
|
|
B.REQUIRED_QTY,
|
|
B.ORDER_QTY,
|
|
B.PRODUCTION_QTY,
|
|
B.STOCK_QTY,
|
|
B.SHORTAGE_QTY,
|
|
B.VENDOR,
|
|
B.UNIT_PRICE,
|
|
B.TOTAL_PRICE,
|
|
B.CURRENCY,
|
|
B.LEAD_TIME,
|
|
B.MIN_ORDER_QTY,
|
|
B.WRITER,
|
|
B.EDITER,
|
|
B.EDIT_DATE,
|
|
B.REMARK,
|
|
COALESCE(B.USE_YN, 'Y'),
|
|
COALESCE(B.NET_QTY, 0),
|
|
COALESCE(B.PO_QTY, 0),
|
|
B.PROPOSAL_DATE,
|
|
B.PROCESSING_PROPOSAL_DATE,
|
|
COALESCE(B.PROCESSING_UNIT_PRICE, 0),
|
|
COALESCE(B.PROCESSING_TOTAL_PRICE, 0),
|
|
COALESCE(B.GRAND_TOTAL_PRICE, 0)
|
|
FROM
|
|
MBOM_DETAIL B
|
|
JOIN
|
|
VIEW_BOM
|
|
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
|
|
AND VIEW_BOM.MBOM_HEADER_OBJID = B.MBOM_HEADER_OBJID
|
|
<!-- STATUS 조건 제거하여 모든 데이터 조회 -->
|
|
)
|
|
SELECT
|
|
V.MBOM_HEADER_OBJID AS BOM_REPORT_OBJID,
|
|
V.OBJID,
|
|
V.PARENT_OBJID,
|
|
V.CHILD_OBJID,
|
|
V.PART_OBJID,
|
|
V.PART_OBJID AS LAST_PART_OBJID,
|
|
V.PART_OBJID AS BOM_LAST_PART_OBJID,
|
|
V.PART_NO,
|
|
V.PART_NAME,
|
|
V.QTY,
|
|
V.ITEM_QTY,
|
|
V.QTY_TEMP,
|
|
V.LEV AS LEVEL,
|
|
(SELECT COUNT(*) FROM MBOM_DETAIL WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT,
|
|
V.SEQ,
|
|
V.STATUS,
|
|
-- M-BOM 전용 필드
|
|
V.UNIT,
|
|
V.SUPPLY_TYPE,
|
|
V.MAKE_OR_BUY,
|
|
V.RAW_MATERIAL_PART_NO AS RAW_MATERIAL_NO,
|
|
V.RAW_MATERIAL_SPEC,
|
|
V.RAW_MATERIAL,
|
|
V.RAW_MATERIAL_SIZE AS SIZE,
|
|
V.PROCESSING_VENDOR,
|
|
V.PROCESSING_DEADLINE,
|
|
V.GRINDING_DEADLINE,
|
|
V.REQUIRED_QTY,
|
|
V.ORDER_QTY,
|
|
V.PRODUCTION_QTY,
|
|
V.STOCK_QTY,
|
|
V.SHORTAGE_QTY,
|
|
V.VENDOR AS VENDOR_PM,
|
|
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = V.VENDOR) AS VENDOR_NAME,
|
|
V.UNIT_PRICE,
|
|
V.TOTAL_PRICE,
|
|
V.CURRENCY,
|
|
V.LEAD_TIME,
|
|
V.MIN_ORDER_QTY,
|
|
V.WRITER,
|
|
TO_CHAR(V.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE,
|
|
V.EDITER,
|
|
CASE WHEN V.EDIT_DATE IS NOT NULL THEN TO_CHAR(V.EDIT_DATE, 'YYYY-MM-DD HH24:MI:SS') ELSE NULL END AS EDIT_DATE,
|
|
V.REMARK,
|
|
-- E-BOM 호환 필드
|
|
NULL AS PARENT_PART_NO,
|
|
NULL AS CONTRACT_OBJID,
|
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS ROOT_OBJID,
|
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS SUB_ROOT_OBJID,
|
|
1 AS LEAF,
|
|
-- PART_MNG 테이블에서 추가 정보 (LEFT JOIN으로 PART_MNG에 없는 품번도 표시)
|
|
P.SPEC,
|
|
COALESCE(P.MATERIAL, V.RAW_MATERIAL) AS MATERIAL,
|
|
P.WEIGHT,
|
|
P.PART_TYPE,
|
|
P.REVISION,
|
|
COALESCE(P.MAKER, V.VENDOR) AS VENDOR,
|
|
P.THICKNESS,
|
|
P.WIDTH,
|
|
P.HEIGHT,
|
|
P.OUT_DIAMETER,
|
|
P.IN_DIAMETER,
|
|
P.LENGTH,
|
|
P.SOURCING_CODE,
|
|
COALESCE(P.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
|
|
COALESCE(P.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
|
|
COALESCE(P.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
|
V.LEV,
|
|
-- 구매 컬럼들 (VIEW_BOM에서 가져온 MBOM_DETAIL 값)
|
|
V.USE_YN,
|
|
V.NET_QTY,
|
|
V.PO_QTY,
|
|
V.PROPOSAL_DATE,
|
|
V.PROCESSING_PROPOSAL_DATE,
|
|
V.PROCESSING_UNIT_PRICE,
|
|
V.PROCESSING_TOTAL_PRICE,
|
|
V.GRAND_TOTAL_PRICE,
|
|
'MBOM' AS DATA_SOURCE -- 데이터 소스 구분용
|
|
FROM VIEW_BOM V
|
|
LEFT JOIN PART_MNG P ON P.OBJID::VARCHAR = V.PART_OBJID::VARCHAR
|
|
WHERE 1=1
|
|
AND COALESCE(V.PRODUCTION_QTY, 0) > 0 -- 제작수량이 0인 항목 제외
|
|
ORDER BY V.PATH2
|
|
</select>
|
|
|
|
<!-- PROJECT_OBJID로 MBOM_HEADER 조회 (PROJECT_MGMT.SOURCE_MBOM_OBJID 우선 사용) -->
|
|
<select id="getMbomHeaderByProjectId" parameterType="map" resultType="map">
|
|
SELECT
|
|
COALESCE(PM.SOURCE_MBOM_OBJID::VARCHAR, MH.OBJID::VARCHAR) AS OBJID,
|
|
PM.OBJID AS PROJECT_OBJID,
|
|
PM.PROJECT_NO
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN MBOM_HEADER MH ON MH.PROJECT_OBJID = PM.OBJID
|
|
WHERE PM.OBJID::VARCHAR = #{projectObjId}
|
|
ORDER BY MH.REGDATE DESC
|
|
LIMIT 1
|
|
</select>
|
|
|
|
<!-- 구매리스트 저장 - MBOM_DETAIL 업데이트 -->
|
|
<update id="updateMbomDetailForPurchase" parameterType="map">
|
|
UPDATE MBOM_DETAIL SET
|
|
USE_YN = #{USE_YN},
|
|
NET_QTY = COALESCE(NULLIF(TRIM(#{NET_QTY}::TEXT), '')::NUMERIC, 0),
|
|
PO_QTY = COALESCE(NULLIF(TRIM(#{PO_QTY}::TEXT), '')::NUMERIC, 0),
|
|
VENDOR = #{VENDOR_PM},
|
|
PROCESSING_VENDOR = #{PROCESSING_VENDOR},
|
|
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
PROCESSING_UNIT_PRICE = COALESCE(NULLIF(TRIM(#{PROCESSING_UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
PROCESSING_TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{PROCESSING_TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
GRAND_TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{GRAND_TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
EDITER = #{EDITER},
|
|
EDIT_DATE = NOW()
|
|
WHERE OBJID::VARCHAR = #{OBJID}
|
|
</update>
|
|
|
|
<!-- 구매리스트 저장 - SALES_REQUEST_PART 업데이트 -->
|
|
<update id="updateSalesRequestPartForPurchase" parameterType="map">
|
|
UPDATE SALES_REQUEST_PART SET
|
|
USE_YN = #{USE_YN},
|
|
NET_QTY = COALESCE(NULLIF(TRIM(#{NET_QTY}::TEXT), '')::NUMERIC, 0),
|
|
PO_QTY = COALESCE(NULLIF(TRIM(#{PO_QTY}::TEXT), '')::NUMERIC, 0),
|
|
VENDOR_PM = #{VENDOR_PM},
|
|
PROCESSING_VENDOR = #{PROCESSING_VENDOR},
|
|
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
PROCESSING_UNIT_PRICE = COALESCE(NULLIF(TRIM(#{PROCESSING_UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
PROCESSING_TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{PROCESSING_TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
GRAND_TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{GRAND_TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
|
WRITER = #{EDITER}
|
|
WHERE OBJID::VARCHAR = #{OBJID}
|
|
</update>
|
|
|
|
<!-- 프로젝트로 구매요청서 조회 (수동 작성 포함) -->
|
|
<select id="getSalesRequestMasterByProjectNo" parameterType="map" resultType="map">
|
|
SELECT
|
|
OBJID,
|
|
REQUEST_MNG_NO,
|
|
PROJECT_NO,
|
|
MBOM_HEADER_OBJID,
|
|
STATUS
|
|
FROM
|
|
SALES_REQUEST_MASTER
|
|
WHERE
|
|
PROJECT_NO = #{PROJECT_NO}
|
|
ORDER BY REGDATE DESC
|
|
</select>
|
|
|
|
<!-- 다음 요청번호 생성 (R + YYYYMMDD + - + 3자리 순번) - 구매요청서용 -->
|
|
<select id="getNextRequestMngNo" resultType="string">
|
|
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
|
|
WHERE DOC_TYPE IN ('PURCHASE_REQUEST', 'PURCHASE_REG') OR DOC_TYPE IS NULL
|
|
</select>
|
|
|
|
<!-- 다음 품의서 번호 생성 (P + YYYYMMDD + - + 3자리 순번) - 품의서용 -->
|
|
<select id="getNextProposalNo" resultType="string">
|
|
SELECT 'P'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,11,3))::INTEGER, 0)+1)::TEXT,3,'0')
|
|
FROM SALES_REQUEST_MASTER
|
|
WHERE DOC_TYPE IN ('PROPOSAL', 'PURCHASE_REG_PROPOSAL')
|
|
AND REQUEST_MNG_NO LIKE 'P'||TO_CHAR(NOW(),'YYYYMMDD')||'%'
|
|
</select>
|
|
|
|
<!-- M-BOM에서 구매리스트 생성 - SALES_REQUEST_MASTER만 생성 (SALES_REQUEST_PART는 생성 안 함) -->
|
|
<insert id="insertSalesRequestMasterFromMBom" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_MASTER (
|
|
OBJID,
|
|
REQUEST_MNG_NO,
|
|
PROJECT_NO,
|
|
MBOM_HEADER_OBJID,
|
|
REQUEST_USER_ID,
|
|
STATUS,
|
|
WRITER,
|
|
REGDATE,
|
|
DOC_TYPE
|
|
) VALUES (
|
|
#{OBJID},
|
|
#{REQUEST_MNG_NO},
|
|
#{PROJECT_NO},
|
|
#{MBOM_HEADER_OBJID},
|
|
#{REQUEST_USER_ID},
|
|
#{STATUS},
|
|
#{WRITER},
|
|
NOW(),
|
|
'PURCHASE_REQUEST'
|
|
)
|
|
</insert>
|
|
|
|
|
|
<!-- ==================== 품의서 관리 ==================== -->
|
|
|
|
<!-- 품의서 대상 품목 조회 - M-BOM 기반 (MBOM_DETAIL에서 조회) - 소재단가 기준 -->
|
|
<select id="getProposalTargetPartsFromMBom" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
MD.OBJID,
|
|
MD.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
MD.QTY,
|
|
MD.UNIT_PRICE,
|
|
MD.TOTAL_PRICE,
|
|
MD.VENDOR AS VENDOR_PM,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = MD.VENDOR) AS VENDOR_NAME,
|
|
MD.NET_QTY,
|
|
MD.PO_QTY,
|
|
MD.PRODUCTION_QTY,
|
|
'MBOM' AS DATA_SOURCE,
|
|
'MATERIAL' AS PROPOSAL_TYPE
|
|
FROM
|
|
MBOM_DETAIL MD
|
|
LEFT JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
MD.MBOM_HEADER_OBJID = #{MBOM_HEADER_OBJID}
|
|
-- 소재단가가 입력되어 있고
|
|
AND MD.UNIT_PRICE IS NOT NULL
|
|
AND MD.UNIT_PRICE > 0
|
|
-- 공급업체가 입력되어 있고
|
|
AND MD.VENDOR IS NOT NULL
|
|
AND MD.VENDOR != ''
|
|
-- 소재 품의서가 생성되지 않은 품목만
|
|
AND MD.PROPOSAL_DATE IS NULL
|
|
ORDER BY MD.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 대상 품목 조회 - M-BOM 기반 (MBOM_DETAIL에서 조회) - 가공단가 기준 -->
|
|
<select id="getProposalTargetPartsFromMBomProcessing" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
MD.OBJID,
|
|
MD.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
MD.QTY,
|
|
MD.PROCESSING_UNIT_PRICE AS UNIT_PRICE,
|
|
MD.PROCESSING_TOTAL_PRICE AS TOTAL_PRICE,
|
|
MD.PROCESSING_VENDOR AS VENDOR_PM,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = MD.PROCESSING_VENDOR) AS VENDOR_NAME,
|
|
MD.NET_QTY,
|
|
MD.PO_QTY,
|
|
MD.PRODUCTION_QTY,
|
|
'MBOM' AS DATA_SOURCE,
|
|
'PROCESSING' AS PROPOSAL_TYPE
|
|
FROM
|
|
MBOM_DETAIL MD
|
|
LEFT JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
MD.MBOM_HEADER_OBJID = #{MBOM_HEADER_OBJID}
|
|
-- 가공단가가 입력되어 있고
|
|
AND MD.PROCESSING_UNIT_PRICE IS NOT NULL
|
|
AND MD.PROCESSING_UNIT_PRICE > 0
|
|
-- 가공업체가 입력되어 있고
|
|
AND MD.PROCESSING_VENDOR IS NOT NULL
|
|
AND MD.PROCESSING_VENDOR != ''
|
|
-- 가공 품의서가 생성되지 않은 품목만
|
|
AND MD.PROCESSING_PROPOSAL_DATE IS NULL
|
|
ORDER BY MD.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 대상 제외 품목 조회 - M-BOM 기반 (소재단가O, 공급업체X) -->
|
|
<select id="getProposalExcludedPartsFromMBom" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
MD.OBJID,
|
|
MD.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
MD.QTY,
|
|
MD.UNIT_PRICE,
|
|
MD.TOTAL_PRICE,
|
|
'MBOM' AS DATA_SOURCE,
|
|
'MATERIAL' AS PROPOSAL_TYPE
|
|
FROM
|
|
MBOM_DETAIL MD
|
|
LEFT JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
MD.MBOM_HEADER_OBJID = #{MBOM_HEADER_OBJID}
|
|
-- 소재단가가 입력되어 있고
|
|
AND MD.UNIT_PRICE IS NOT NULL
|
|
AND MD.UNIT_PRICE > 0
|
|
-- 공급업체가 미입력
|
|
AND (MD.VENDOR IS NULL OR MD.VENDOR = '')
|
|
-- 소재 품의서가 생성되지 않은 품목만
|
|
AND MD.PROPOSAL_DATE IS NULL
|
|
ORDER BY MD.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 대상 제외 품목 조회 - M-BOM 기반 (가공단가O, 가공업체X) -->
|
|
<select id="getProposalExcludedPartsFromMBomProcessing" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
MD.OBJID,
|
|
MD.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
MD.QTY,
|
|
MD.PROCESSING_UNIT_PRICE AS UNIT_PRICE,
|
|
MD.PROCESSING_TOTAL_PRICE AS TOTAL_PRICE,
|
|
'MBOM' AS DATA_SOURCE,
|
|
'PROCESSING' AS PROPOSAL_TYPE
|
|
FROM
|
|
MBOM_DETAIL MD
|
|
LEFT JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
MD.MBOM_HEADER_OBJID = #{MBOM_HEADER_OBJID}
|
|
-- 가공단가가 입력되어 있고
|
|
AND MD.PROCESSING_UNIT_PRICE IS NOT NULL
|
|
AND MD.PROCESSING_UNIT_PRICE > 0
|
|
-- 가공업체가 미입력
|
|
AND (MD.PROCESSING_VENDOR IS NULL OR MD.PROCESSING_VENDOR = '')
|
|
-- 가공 품의서가 생성되지 않은 품목만
|
|
AND MD.PROCESSING_PROPOSAL_DATE IS NULL
|
|
ORDER BY MD.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 대상 품목 조회 - 수동 작성 (SALES_REQUEST_PART에서 조회) - 소재단가 기준 -->
|
|
<select id="getProposalTargetPartsFromManual" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
SRP.QTY,
|
|
SRP.UNIT_PRICE,
|
|
SRP.TOTAL_PRICE,
|
|
SRP.VENDOR_PM,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
|
|
SRP.NET_QTY,
|
|
SRP.PO_QTY,
|
|
SRP.PRODUCTION_QTY,
|
|
'MANUAL' AS DATA_SOURCE,
|
|
'MATERIAL' AS PROPOSAL_TYPE
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
|
-- 소재단가가 입력되어 있고
|
|
AND SRP.UNIT_PRICE IS NOT NULL
|
|
AND SRP.UNIT_PRICE > 0
|
|
-- 공급업체가 입력되어 있고
|
|
AND SRP.VENDOR_PM IS NOT NULL
|
|
AND SRP.VENDOR_PM != ''
|
|
-- 소재 품의서가 생성되지 않은 품목만
|
|
AND SRP.PROPOSAL_DATE IS NULL
|
|
ORDER BY SRP.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 대상 품목 조회 - 수동 작성 (SALES_REQUEST_PART에서 조회) - 가공단가 기준 -->
|
|
<select id="getProposalTargetPartsFromManualProcessing" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
SRP.QTY,
|
|
SRP.PROCESSING_UNIT_PRICE AS UNIT_PRICE,
|
|
SRP.PROCESSING_TOTAL_PRICE AS TOTAL_PRICE,
|
|
SRP.PROCESSING_VENDOR AS VENDOR_PM,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.PROCESSING_VENDOR) AS VENDOR_NAME,
|
|
SRP.NET_QTY,
|
|
SRP.PO_QTY,
|
|
SRP.PRODUCTION_QTY,
|
|
'MANUAL' AS DATA_SOURCE,
|
|
'PROCESSING' AS PROPOSAL_TYPE
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
|
-- 가공단가가 입력되어 있고
|
|
AND SRP.PROCESSING_UNIT_PRICE IS NOT NULL
|
|
AND SRP.PROCESSING_UNIT_PRICE > 0
|
|
-- 가공업체가 입력되어 있고
|
|
AND SRP.PROCESSING_VENDOR IS NOT NULL
|
|
AND SRP.PROCESSING_VENDOR != ''
|
|
-- 가공 품의서가 생성되지 않은 품목만
|
|
AND SRP.PROCESSING_PROPOSAL_DATE IS NULL
|
|
ORDER BY SRP.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 대상 제외 품목 조회 - 수동 작성 (소재단가O, 공급업체X) -->
|
|
<select id="getProposalExcludedPartsFromManual" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
SRP.QTY,
|
|
SRP.UNIT_PRICE,
|
|
SRP.TOTAL_PRICE,
|
|
'MANUAL' AS DATA_SOURCE,
|
|
'MATERIAL' AS PROPOSAL_TYPE
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
|
-- 소재단가가 입력되어 있고
|
|
AND SRP.UNIT_PRICE IS NOT NULL
|
|
AND SRP.UNIT_PRICE > 0
|
|
-- 공급업체가 미입력
|
|
AND (SRP.VENDOR_PM IS NULL OR SRP.VENDOR_PM = '')
|
|
-- 소재 품의서가 생성되지 않은 품목만
|
|
AND SRP.PROPOSAL_DATE IS NULL
|
|
ORDER BY SRP.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 대상 제외 품목 조회 - 수동 작성 (가공단가O, 가공업체X) -->
|
|
<select id="getProposalExcludedPartsFromManualProcessing" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
SRP.QTY,
|
|
SRP.PROCESSING_UNIT_PRICE AS UNIT_PRICE,
|
|
SRP.PROCESSING_TOTAL_PRICE AS TOTAL_PRICE,
|
|
'MANUAL' AS DATA_SOURCE,
|
|
'PROCESSING' AS PROPOSAL_TYPE
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
|
-- 가공단가가 입력되어 있고
|
|
AND SRP.PROCESSING_UNIT_PRICE IS NOT NULL
|
|
AND SRP.PROCESSING_UNIT_PRICE > 0
|
|
-- 가공업체가 미입력
|
|
AND (SRP.PROCESSING_VENDOR IS NULL OR SRP.PROCESSING_VENDOR = '')
|
|
-- 가공 품의서가 생성되지 않은 품목만
|
|
AND SRP.PROCESSING_PROPOSAL_DATE IS NULL
|
|
ORDER BY SRP.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 생성 (SALES_REQUEST_MASTER에 INSERT) -->
|
|
<insert id="insertProposal" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_MASTER (
|
|
OBJID,
|
|
REQUEST_MNG_NO,
|
|
PROJECT_NO,
|
|
MBOM_HEADER_OBJID,
|
|
PURCHASE_TYPE,
|
|
ORDER_TYPE,
|
|
PRODUCT_NAME,
|
|
AREA_CD,
|
|
CUSTOMER_OBJID,
|
|
PAID_TYPE,
|
|
REQUEST_USER_ID,
|
|
STATUS,
|
|
WRITER,
|
|
REGDATE,
|
|
DOC_TYPE
|
|
) VALUES (
|
|
#{OBJID},
|
|
#{REQUEST_MNG_NO},
|
|
#{PROJECT_NO},
|
|
#{MBOM_HEADER_OBJID},
|
|
#{PURCHASE_TYPE},
|
|
#{ORDER_TYPE},
|
|
#{PRODUCT_NAME},
|
|
#{AREA_CD},
|
|
#{CUSTOMER_OBJID},
|
|
#{PAID_TYPE},
|
|
#{REQUEST_USER_ID},
|
|
'create',
|
|
#{WRITER},
|
|
NOW(),
|
|
#{DOC_TYPE}
|
|
)
|
|
</insert>
|
|
|
|
<!-- 품의서용 SALES_REQUEST_PART 생성 (M-BOM 기반 품목 복사) - 소재 -->
|
|
<insert id="insertProposalPartFromMBom" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_PART (
|
|
OBJID,
|
|
SALES_REQUEST_MASTER_OBJID,
|
|
PART_OBJID,
|
|
QTY,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
PROPOSAL_DATE,
|
|
WRITER,
|
|
REGDATE
|
|
)
|
|
SELECT
|
|
#{NEW_OBJID},
|
|
#{PROPOSAL_MASTER_OBJID},
|
|
PART_OBJID,
|
|
QTY,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
VENDOR AS VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
NOW() AS PROPOSAL_DATE,
|
|
#{WRITER},
|
|
NOW()
|
|
FROM MBOM_DETAIL
|
|
WHERE OBJID = #{SOURCE_OBJID}
|
|
</insert>
|
|
|
|
<!-- 품의서용 SALES_REQUEST_PART 생성 (M-BOM 기반 품목 복사) - 가공 -->
|
|
<insert id="insertProposalPartFromMBomProcessing" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_PART (
|
|
OBJID,
|
|
SALES_REQUEST_MASTER_OBJID,
|
|
PART_OBJID,
|
|
QTY,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
PROPOSAL_DATE,
|
|
WRITER,
|
|
REGDATE
|
|
)
|
|
SELECT
|
|
#{NEW_OBJID},
|
|
#{PROPOSAL_MASTER_OBJID},
|
|
PART_OBJID,
|
|
PRODUCTION_QTY AS QTY,
|
|
PROCESSING_UNIT_PRICE AS UNIT_PRICE,
|
|
PROCESSING_TOTAL_PRICE AS TOTAL_PRICE,
|
|
PROCESSING_VENDOR AS VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
NOW() AS PROPOSAL_DATE,
|
|
#{WRITER},
|
|
NOW()
|
|
FROM MBOM_DETAIL
|
|
WHERE OBJID = #{SOURCE_OBJID}
|
|
</insert>
|
|
|
|
<!-- 품의서용 SALES_REQUEST_PART 생성 (수동 작성 품목 복사) - 소재 -->
|
|
<insert id="insertProposalPartFromManual" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_PART (
|
|
OBJID,
|
|
SALES_REQUEST_MASTER_OBJID,
|
|
PART_OBJID,
|
|
QTY,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
PROPOSAL_DATE,
|
|
WRITER,
|
|
REGDATE
|
|
)
|
|
SELECT
|
|
#{NEW_OBJID},
|
|
#{PROPOSAL_MASTER_OBJID},
|
|
PART_OBJID,
|
|
QTY,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
NOW() AS PROPOSAL_DATE,
|
|
#{WRITER},
|
|
NOW()
|
|
FROM SALES_REQUEST_PART
|
|
WHERE OBJID = #{SOURCE_OBJID}
|
|
</insert>
|
|
|
|
<!-- 품의서용 SALES_REQUEST_PART 생성 (수동 작성 품목 복사) - 가공 -->
|
|
<insert id="insertProposalPartFromManualProcessing" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_PART (
|
|
OBJID,
|
|
SALES_REQUEST_MASTER_OBJID,
|
|
PART_OBJID,
|
|
QTY,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
PROPOSAL_DATE,
|
|
WRITER,
|
|
REGDATE
|
|
)
|
|
SELECT
|
|
#{NEW_OBJID},
|
|
#{PROPOSAL_MASTER_OBJID},
|
|
PART_OBJID,
|
|
PRODUCTION_QTY AS QTY,
|
|
PROCESSING_UNIT_PRICE AS UNIT_PRICE,
|
|
PROCESSING_TOTAL_PRICE AS TOTAL_PRICE,
|
|
PROCESSING_VENDOR AS VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
NOW() AS PROPOSAL_DATE,
|
|
#{WRITER},
|
|
NOW()
|
|
FROM SALES_REQUEST_PART
|
|
WHERE OBJID = #{SOURCE_OBJID}
|
|
</insert>
|
|
|
|
<!-- 품의서 생성 후 PROPOSAL_DATE 업데이트 (수동 작성 - SALES_REQUEST_PART) - 소재 -->
|
|
<update id="updateProposalDateForManualParts" parameterType="map">
|
|
UPDATE SALES_REQUEST_PART
|
|
SET PROPOSAL_DATE = NOW()
|
|
WHERE OBJID IN
|
|
<foreach collection="PART_OBJIDS" item="objid" open="(" separator="," close=")">
|
|
#{objid}
|
|
</foreach>
|
|
</update>
|
|
|
|
<!-- 품의서 생성 후 PROCESSING_PROPOSAL_DATE 업데이트 (수동 작성 - SALES_REQUEST_PART) - 가공 -->
|
|
<update id="updateProcessingProposalDateForManualParts" parameterType="map">
|
|
UPDATE SALES_REQUEST_PART
|
|
SET PROCESSING_PROPOSAL_DATE = NOW()
|
|
WHERE OBJID IN
|
|
<foreach collection="PART_OBJIDS" item="objid" open="(" separator="," close=")">
|
|
#{objid}
|
|
</foreach>
|
|
</update>
|
|
|
|
<!-- 품의서 생성 후 PROPOSAL_DATE 업데이트 (M-BOM - MBOM_DETAIL) - 소재 -->
|
|
<!-- 동일 품번(PART_OBJID)의 모든 MBOM_DETAIL 행 업데이트 (품번 합쳐진 경우 대응) -->
|
|
<update id="updateProposalDateForMBomParts" parameterType="map">
|
|
UPDATE MBOM_DETAIL
|
|
SET PROPOSAL_DATE = NOW()
|
|
WHERE OBJID IN (
|
|
SELECT MD2.OBJID
|
|
FROM MBOM_DETAIL MD2
|
|
WHERE MD2.PART_OBJID IN (
|
|
SELECT MD3.PART_OBJID FROM MBOM_DETAIL MD3 WHERE MD3.OBJID IN
|
|
<foreach collection="PART_OBJIDS" item="objid" open="(" separator="," close=")">
|
|
#{objid}
|
|
</foreach>
|
|
)
|
|
AND MD2.MBOM_HEADER_OBJID IN (
|
|
SELECT MD3.MBOM_HEADER_OBJID FROM MBOM_DETAIL MD3 WHERE MD3.OBJID IN
|
|
<foreach collection="PART_OBJIDS" item="objid" open="(" separator="," close=")">
|
|
#{objid}
|
|
</foreach>
|
|
)
|
|
)
|
|
</update>
|
|
|
|
<!-- 품의서 생성 후 PROCESSING_PROPOSAL_DATE 업데이트 (M-BOM - MBOM_DETAIL) - 가공 -->
|
|
<!-- 동일 품번(PART_OBJID)의 모든 MBOM_DETAIL 행 업데이트 (품번 합쳐진 경우 대응) -->
|
|
<update id="updateProcessingProposalDateForMBomParts" parameterType="map">
|
|
UPDATE MBOM_DETAIL
|
|
SET PROCESSING_PROPOSAL_DATE = NOW()
|
|
WHERE OBJID IN (
|
|
SELECT MD2.OBJID
|
|
FROM MBOM_DETAIL MD2
|
|
WHERE MD2.PART_OBJID IN (
|
|
SELECT MD3.PART_OBJID FROM MBOM_DETAIL MD3 WHERE MD3.OBJID IN
|
|
<foreach collection="PART_OBJIDS" item="objid" open="(" separator="," close=")">
|
|
#{objid}
|
|
</foreach>
|
|
)
|
|
AND MD2.MBOM_HEADER_OBJID IN (
|
|
SELECT MD3.MBOM_HEADER_OBJID FROM MBOM_DETAIL MD3 WHERE MD3.OBJID IN
|
|
<foreach collection="PART_OBJIDS" item="objid" open="(" separator="," close=")">
|
|
#{objid}
|
|
</foreach>
|
|
)
|
|
)
|
|
</update>
|
|
|
|
<!-- 품의서 목록 조회 -->
|
|
<select id="getProposalMngGridList" parameterType="map" resultType="map">
|
|
SELECT
|
|
SRM.OBJID,
|
|
SRM.REQUEST_MNG_NO AS PROPOSAL_NO,
|
|
-- 발주서 No
|
|
(SELECT STRING_AGG(PURCHASE_ORDER_NO, ', ') FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS PURCHASE_ORDER_NO,
|
|
SRM.PROJECT_NO,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
|
|
SRM.PURCHASE_TYPE,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
|
-- 주문유형: 프로젝트 정보(CATEGORY_CD) 우선, 없으면 SALES_REQUEST_MASTER 값
|
|
COALESCE(
|
|
(SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
SRM.ORDER_TYPE
|
|
) AS ORDER_TYPE,
|
|
CODE_NAME(COALESCE(
|
|
(SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
SRM.ORDER_TYPE
|
|
)) AS ORDER_TYPE_NAME,
|
|
SRM.PRODUCT_NAME,
|
|
CODE_NAME(SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
|
|
-- 품번/품명 ("외 N건" 형태로 표시) - 품의서는 항상 SALES_REQUEST_PART에 데이터가 있음
|
|
(
|
|
SELECT
|
|
CASE
|
|
WHEN COUNT(*) > 1 THEN
|
|
COALESCE((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)::TEXT || '건'
|
|
ELSE
|
|
COALESCE((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
|
|
COALESCE((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)::TEXT || '건'
|
|
ELSE
|
|
COALESCE((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,
|
|
-- 공급업체 (첫번째 공급업체 + 외 N건)
|
|
(
|
|
SELECT
|
|
CASE
|
|
WHEN COUNT(DISTINCT POM.PARTNER_OBJID) > 1 THEN
|
|
COALESCE(
|
|
CASE
|
|
WHEN (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1) LIKE 'C_%'
|
|
THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
|
|
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
|
|
END
|
|
, '') || ' 외 ' || (COUNT(DISTINCT POM.PARTNER_OBJID) - 1)::TEXT || '건'
|
|
ELSE
|
|
COALESCE(
|
|
CASE
|
|
WHEN (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1) LIKE 'C_%'
|
|
THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
|
|
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
|
|
END
|
|
, '')
|
|
END
|
|
FROM PURCHASE_ORDER_MASTER POM
|
|
WHERE POM.SALES_REQUEST_OBJID = SRM.OBJID
|
|
) AS SUPPLIER_NAME,
|
|
-- 총액
|
|
(SELECT SUM(COALESCE(TOTAL_PRICE::numeric, 0)) FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS TOTAL_AMOUNT,
|
|
-- 메일발송 여부
|
|
-- (SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID AND MAIL_SENT = 'Y') AS MAIL_SENT,
|
|
-- 발주일 (일단 주석처리)
|
|
-- (SELECT TO_CHAR(MAX(ORDER_DATE), 'YYYY-MM-DD') FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS ORDER_DATE,
|
|
-- 상태: 아마란스 결재 > 내부 결재 > SRM.STATUS 순서로 우선
|
|
CASE
|
|
WHEN AMR.STATUS = 'complete' THEN 'approvalComplete'
|
|
WHEN AMR.STATUS = 'inProcess' THEN 'inProcess'
|
|
WHEN AMR.STATUS = 'reject' THEN 'reject'
|
|
WHEN A.ROUTE_STATUS = 'complete' THEN 'approvalComplete'
|
|
WHEN A.ROUTE_STATUS = 'inProcess' THEN 'inProcess'
|
|
WHEN A.ROUTE_STATUS = 'reject' THEN 'reject'
|
|
ELSE SRM.STATUS
|
|
END AS STATUS,
|
|
CASE
|
|
WHEN AMR.STATUS = 'complete' THEN '결재완료'
|
|
WHEN AMR.STATUS = 'inProcess' THEN '결재 상신중'
|
|
WHEN AMR.STATUS = 'reject' THEN '반려'
|
|
WHEN A.APPR_STATUS IS NOT NULL THEN A.APPR_STATUS
|
|
WHEN SRM.STATUS = 'create' THEN '등록중'
|
|
ELSE ''
|
|
END AS STATUS_TITLE,
|
|
COALESCE(AMR.STATUS, '') AS AMARANTH_STATUS,
|
|
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.APPROVAL_OBJID,
|
|
A.ROUTE_OBJID
|
|
FROM
|
|
SALES_REQUEST_MASTER SRM
|
|
LEFT OUTER JOIN AMARANTH_APPROVAL AMR
|
|
ON SRM.OBJID::VARCHAR = AMR.TARGET_OBJID
|
|
AND AMR.TARGET_TYPE = 'PROPOSAL'
|
|
LEFT OUTER JOIN (
|
|
SELECT
|
|
B.OBJID AS ROUTE_OBJID,
|
|
B.STATUS AS ROUTE_STATUS,
|
|
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 ('PROPOSAL', 'SALES_REQUEST')
|
|
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
|
|
WHERE 1=1
|
|
AND SRM.STATUS IN ('create', 'approvalRequest', 'approvalComplete', 'reject')
|
|
<!-- PROPOSAL은 모두 조회, PURCHASE_REG_PROPOSAL은 결재완료만 조회 -->
|
|
AND (
|
|
SRM.DOC_TYPE = 'PROPOSAL'
|
|
OR (SRM.DOC_TYPE = 'PURCHASE_REG_PROPOSAL' AND A.ROUTE_STATUS = 'complete')
|
|
)
|
|
<if test="SEARCH_PROPOSAL_NO != null and !''.equals(SEARCH_PROPOSAL_NO)">
|
|
AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%'
|
|
</if>
|
|
|
|
<if test="SEARCH_PROJECT_NO != null and !''.equals(SEARCH_PROJECT_NO)">
|
|
AND (SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) LIKE '%${SEARCH_PROJECT_NO}%'
|
|
</if>
|
|
|
|
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
|
|
AND (
|
|
CASE
|
|
WHEN A.ROUTE_STATUS = 'complete' THEN 'approvalComplete'
|
|
WHEN A.ROUTE_STATUS = 'inProcess' THEN 'inProcess'
|
|
WHEN A.ROUTE_STATUS = 'reject' THEN 'reject'
|
|
ELSE SRM.STATUS
|
|
END
|
|
) = #{SEARCH_STATUS}
|
|
</if>
|
|
|
|
<if test="regdate_start != null and !''.equals(regdate_start)">
|
|
AND SRM.REGDATE::DATE <![CDATA[ >= ]]> #{regdate_start}::DATE
|
|
</if>
|
|
<if test="regdate_end != null and !''.equals(regdate_end)">
|
|
AND SRM.REGDATE::DATE <![CDATA[ <= ]]> #{regdate_end}::DATE
|
|
</if>
|
|
|
|
<!-- 구매유형 검색 (멀티선택) -->
|
|
<if test="purchase_types != null and !''.equals(purchase_types)">
|
|
AND SRM.PURCHASE_TYPE IN
|
|
<foreach item="item" collection="purchase_types.split(',')" open="(" separator="," close=")">
|
|
#{item}
|
|
</foreach>
|
|
</if>
|
|
|
|
<!-- 작성자 검색 -->
|
|
<if test="writer != null and !''.equals(writer)">
|
|
AND SRM.WRITER = #{writer}
|
|
</if>
|
|
|
|
<!-- 제품구분 검색 -->
|
|
<if test="part_type != null and !''.equals(part_type)">
|
|
AND SRM.PRODUCT_NAME = #{part_type}
|
|
</if>
|
|
|
|
ORDER BY SRM.REGDATE DESC
|
|
</select>
|
|
|
|
<!-- 구매요청_품의서 목록 조회 (PURCHASE_REG_PROPOSAL) -->
|
|
<select id="getPurchaseRegProposalMngGridList" parameterType="map" resultType="map">
|
|
SELECT
|
|
SRM.OBJID,
|
|
SRM.REQUEST_MNG_NO AS PROPOSAL_NO,
|
|
SRM.PROJECT_NO,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
|
|
SRM.PURCHASE_TYPE,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
|
COALESCE(
|
|
(SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
SRM.ORDER_TYPE
|
|
) AS ORDER_TYPE,
|
|
CODE_NAME(COALESCE(
|
|
(SELECT PM.CATEGORY_CD FROM PROJECT_MGMT PM WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
SRM.ORDER_TYPE
|
|
)) AS ORDER_TYPE_NAME,
|
|
SRM.PRODUCT_NAME,
|
|
CODE_NAME(SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
|
|
(
|
|
SELECT
|
|
CASE
|
|
WHEN COUNT(*) > 1 THEN
|
|
COALESCE((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)::TEXT || '건'
|
|
ELSE
|
|
COALESCE((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
|
|
COALESCE((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)::TEXT || '건'
|
|
ELSE
|
|
COALESCE((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,
|
|
CASE
|
|
WHEN A.ROUTE_STATUS = 'complete' THEN 'approvalComplete'
|
|
WHEN A.ROUTE_STATUS = 'inProcess' THEN 'inProcess'
|
|
WHEN A.ROUTE_STATUS = 'reject' THEN 'reject'
|
|
ELSE SRM.STATUS
|
|
END AS STATUS,
|
|
CASE
|
|
WHEN A.APPR_STATUS IS NOT NULL THEN A.APPR_STATUS
|
|
WHEN SRM.STATUS = 'create' THEN '작성중'
|
|
ELSE ''
|
|
END AS STATUS_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,
|
|
A.APPROVAL_OBJID,
|
|
A.ROUTE_OBJID
|
|
FROM
|
|
SALES_REQUEST_MASTER SRM
|
|
LEFT OUTER JOIN (
|
|
SELECT
|
|
B.OBJID AS ROUTE_OBJID,
|
|
B.STATUS AS ROUTE_STATUS,
|
|
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 ('PROPOSAL', 'SALES_REQUEST')
|
|
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
|
|
WHERE 1=1
|
|
AND SRM.STATUS IN ('create', 'approvalRequest', 'approvalComplete', 'reject')
|
|
AND SRM.DOC_TYPE = 'PURCHASE_REG_PROPOSAL'
|
|
<if test="SEARCH_PROPOSAL_NO != null and !''.equals(SEARCH_PROPOSAL_NO)">
|
|
AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%'
|
|
</if>
|
|
<if test="SEARCH_PROJECT_NO != null and !''.equals(SEARCH_PROJECT_NO)">
|
|
AND (SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) LIKE '%${SEARCH_PROJECT_NO}%'
|
|
</if>
|
|
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
|
|
AND (
|
|
CASE
|
|
WHEN A.ROUTE_STATUS = 'complete' THEN 'approvalComplete'
|
|
WHEN A.ROUTE_STATUS = 'inProcess' THEN 'inProcess'
|
|
WHEN A.ROUTE_STATUS = 'reject' THEN 'reject'
|
|
ELSE SRM.STATUS
|
|
END
|
|
) = #{SEARCH_STATUS}
|
|
</if>
|
|
<if test="regdate_start != null and !''.equals(regdate_start)">
|
|
AND SRM.REGDATE::DATE <![CDATA[ >= ]]> #{regdate_start}::DATE
|
|
</if>
|
|
<if test="regdate_end != null and !''.equals(regdate_end)">
|
|
AND SRM.REGDATE::DATE <![CDATA[ <= ]]> #{regdate_end}::DATE
|
|
</if>
|
|
|
|
<!-- 구매유형 검색 (멀티선택) -->
|
|
<if test="purchase_types != null and !''.equals(purchase_types)">
|
|
AND SRM.PURCHASE_TYPE IN
|
|
<foreach item="item" collection="purchase_types.split(',')" open="(" separator="," close=")">
|
|
#{item}
|
|
</foreach>
|
|
</if>
|
|
|
|
<!-- 작성자 검색 -->
|
|
<if test="writer != null and !''.equals(writer)">
|
|
AND SRM.WRITER = #{writer}
|
|
</if>
|
|
|
|
<!-- 제품구분 검색 -->
|
|
<if test="part_type != null and !''.equals(part_type)">
|
|
AND SRM.PRODUCT_NAME = #{part_type}
|
|
</if>
|
|
|
|
ORDER BY SRM.REGDATE DESC
|
|
</select>
|
|
|
|
<!-- 품의서 상세 조회 -->
|
|
<select id="getProposalInfo" parameterType="map" resultType="map">
|
|
SELECT
|
|
SRM.OBJID,
|
|
SRM.REQUEST_MNG_NO AS PROPOSAL_NO,
|
|
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,
|
|
|
|
-- 프로젝트의 제품구분, 고객사, 유/무상 정보 (PROJECT_MGMT에서 조회)
|
|
COALESCE(
|
|
(SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT WHERE OBJID = SRM.PROJECT_NO),
|
|
SRM.PRODUCT_NAME
|
|
) AS PROJECT_PRODUCT,
|
|
COALESCE(
|
|
(SELECT CM.CUSTOMER_OBJID
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
|
WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
SRM.CUSTOMER_OBJID
|
|
) AS PROJECT_CUSTOMER_OBJID,
|
|
COALESCE(
|
|
(SELECT CASE WHEN CM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG CL WHERE 'C_' || CL.OBJID::VARCHAR = CM.CUSTOMER_OBJID) ELSE SM.SUPPLY_NAME END
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
|
LEFT JOIN SUPPLY_MNG SM ON CM.CUSTOMER_OBJID NOT LIKE 'C_%' AND SM.OBJID::VARCHAR = CM.CUSTOMER_OBJID::VARCHAR
|
|
WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
(SELECT CASE WHEN SRM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG CL WHERE 'C_' || CL.OBJID::VARCHAR = SRM.CUSTOMER_OBJID) ELSE (SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID) END)
|
|
) AS PROJECT_CUSTOMER_NAME,
|
|
COALESCE(
|
|
(SELECT CM.PAID_TYPE
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
|
WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
|
|
SRM.PAID_TYPE
|
|
) AS PROJECT_PAID_TYPE,
|
|
COALESCE(
|
|
(SELECT CASE
|
|
WHEN PAID_TYPE = 'paid' THEN '유상'
|
|
WHEN PAID_TYPE = 'free' THEN '무상'
|
|
ELSE PAID_TYPE
|
|
END
|
|
FROM PROJECT_MGMT
|
|
WHERE OBJID = SRM.PROJECT_NO),
|
|
(CASE WHEN SRM.PAID_TYPE = 'paid' THEN '유상' WHEN SRM.PAID_TYPE = 'free' THEN '무상' ELSE SRM.PAID_TYPE END)
|
|
) AS PROJECT_PAID_TYPE_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_TITLE,
|
|
SRM.AREA_CD,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.AREA_CD) AS AREA_CD_NAME,
|
|
SRM.CUSTOMER_OBJID,
|
|
CASE
|
|
WHEN SRM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = SRM.CUSTOMER_OBJID)
|
|
ELSE (SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID)
|
|
END 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,
|
|
SRM.STATUS,
|
|
CASE SRM.STATUS
|
|
WHEN 'create' THEN '미결재'
|
|
WHEN 'approvalRequest' THEN '결재중'
|
|
WHEN 'approvalComplete' THEN '결재완료'
|
|
WHEN 'reject' THEN '반려'
|
|
ELSE ''
|
|
END AS STATUS_TITLE,
|
|
SRM.WRITER,
|
|
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_DEPT,
|
|
SRM.REGDATE,
|
|
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
|
|
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD HH24:MI') AS REGDATE_TIME,
|
|
SRM.REMARK,
|
|
SRM.DOC_TYPE,
|
|
-- 품의서 추가 컬럼
|
|
SRM.RECIPIENT_REF,
|
|
SRM.EXECUTOR,
|
|
SRM.EXECUTION_DATE,
|
|
TO_CHAR(SRM.EXECUTION_DATE, 'YYYY-MM-DD') AS EXECUTION_DATE_TITLE,
|
|
SRM.TITLE
|
|
FROM
|
|
SALES_REQUEST_MASTER SRM
|
|
WHERE
|
|
SRM.OBJID = #{PROPOSAL_OBJID}
|
|
</select>
|
|
|
|
<!-- 품의서 품목 리스트 조회 -->
|
|
<select id="getProposalPartList" parameterType="map" resultType="map">
|
|
SELECT
|
|
ROW_NUMBER() OVER(ORDER BY SRP.REGDATE) AS RNUM,
|
|
SRP.OBJID,
|
|
SRP.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
PM.SPEC,
|
|
PM.MATERIAL,
|
|
SRP.UNIT,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRP.UNIT),
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.UNIT)
|
|
) AS UNIT_TITLE,
|
|
SRP.QTY,
|
|
SRP.UNIT_PRICE,
|
|
SRP.TOTAL_PRICE,
|
|
SRP.VENDOR_PM,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
|
|
SRP.REMARK,
|
|
SRP.DELIVERY_REQUEST_DATE,
|
|
SRP.DELIVERY_REQUEST_DATE AS DELIVERY_REQUEST_DATE_TITLE
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{PROPOSAL_OBJID}
|
|
ORDER BY SRP.REGDATE
|
|
</select>
|
|
|
|
<!-- 품의서 마스터 정보 수정 (수신및참조, 시행자, 시행일자, 제목) -->
|
|
<update id="updateProposalMaster" parameterType="map">
|
|
UPDATE SALES_REQUEST_MASTER SET
|
|
RECIPIENT_REF = #{RECIPIENT_REF},
|
|
EXECUTOR = #{EXECUTOR},
|
|
EXECUTION_DATE = CASE WHEN #{EXECUTION_DATE} IS NOT NULL AND #{EXECUTION_DATE} != '' THEN #{EXECUTION_DATE}::DATE ELSE NULL END,
|
|
TITLE = #{TITLE}
|
|
WHERE OBJID = #{PROPOSAL_OBJID}
|
|
</update>
|
|
|
|
<!-- 품의서 품목 정보 수정 (납기일, 단위, 목적) -->
|
|
<update id="updateProposalPart" parameterType="map">
|
|
UPDATE SALES_REQUEST_PART SET
|
|
DELIVERY_REQUEST_DATE = CASE WHEN #{DELIVERY_REQUEST_DATE} IS NOT NULL AND #{DELIVERY_REQUEST_DATE} != '' THEN #{DELIVERY_REQUEST_DATE} ELSE NULL END,
|
|
UNIT = #{UNIT},
|
|
REMARK = #{REMARK}
|
|
WHERE OBJID = #{PART_OBJID}
|
|
</update>
|
|
|
|
<!-- 구매리스트 품목 단일 조회 (MBOM_DETAIL에서 조회) -->
|
|
<select id="getSalesRequestPartInfo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
MD.OBJID,
|
|
MD.MBOM_HEADER_OBJID,
|
|
MD.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
MD.RAW_MATERIAL,
|
|
MD.RAW_MATERIAL_PART_NO AS RAW_MATERIAL_NO,
|
|
MD.RAW_MATERIAL_SIZE AS SIZE,
|
|
MD.PO_QTY,
|
|
MD.PRODUCTION_QTY,
|
|
MD.UNIT_PRICE,
|
|
MD.PROCESSING_UNIT_PRICE,
|
|
MD.VENDOR AS VENDOR_PM,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = MD.VENDOR) AS VENDOR_NAME,
|
|
MD.PROCESSING_VENDOR,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = MD.PROCESSING_VENDOR) AS PROCESSING_VENDOR_NAME
|
|
FROM MBOM_DETAIL MD
|
|
LEFT JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE MD.OBJID = #{OBJID}
|
|
</select>
|
|
|
|
<!-- =====================================================
|
|
견적요청서 관리 쿼리
|
|
===================================================== -->
|
|
|
|
<!-- 견적요청서 목록 조회 (페이징) -->
|
|
<select id="getQuotationRequestListCount" parameterType="map" resultType="int">
|
|
SELECT COUNT(*)
|
|
FROM QUOTATION_REQUEST_MASTER QRM
|
|
LEFT JOIN SALES_REQUEST_MASTER SRM ON QRM.SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR
|
|
LEFT JOIN PROJECT_MGMT PM ON PM.OBJID = SRM.PROJECT_NO
|
|
LEFT JOIN CONTRACT_MGMT CTM ON CTM.OBJID = PM.CONTRACT_OBJID
|
|
WHERE 1=1
|
|
<if test="SALES_REQUEST_MASTER_OBJID != null and SALES_REQUEST_MASTER_OBJID != ''">
|
|
AND QRM.SALES_REQUEST_MASTER_OBJID::VARCHAR = #{SALES_REQUEST_MASTER_OBJID}
|
|
</if>
|
|
<if test="Year != null and Year != ''">
|
|
AND TO_CHAR(QRM.REG_DATE, 'YYYY') = #{Year}
|
|
</if>
|
|
<if test="QUOTATION_REQUEST_NO != null and QUOTATION_REQUEST_NO != ''">
|
|
AND QRM.QUOTATION_REQUEST_NO LIKE '%' || #{QUOTATION_REQUEST_NO} || '%'
|
|
</if>
|
|
<!-- 프로젝트번호 검색 (OBJID로 비교) -->
|
|
<if test="PROJECT_NO != null and PROJECT_NO != ''">
|
|
AND SRM.PROJECT_NO = #{PROJECT_NO}
|
|
</if>
|
|
<!-- 공급업체 검색 -->
|
|
<if test="VENDOR_OBJID != null and VENDOR_OBJID != ''">
|
|
AND QRM.VENDOR_OBJID::VARCHAR = #{VENDOR_OBJID}
|
|
</if>
|
|
<if test="STATUS != null and STATUS != ''">
|
|
AND QRM.STATUS = #{STATUS}
|
|
</if>
|
|
<!-- 작성자 검색 -->
|
|
<if test="writer != null and writer != ''">
|
|
AND QRM.WRITER = #{writer}
|
|
</if>
|
|
<!-- 제품구분 검색 -->
|
|
<if test="part_type != null and part_type != ''">
|
|
AND (SRM.PRODUCT_NAME = #{part_type} OR CTM.PRODUCT = #{part_type})
|
|
</if>
|
|
</select>
|
|
|
|
<select id="getQuotationRequestList" parameterType="map" resultType="map">
|
|
SELECT
|
|
QRM.OBJID,
|
|
QRM.QUOTATION_REQUEST_NO,
|
|
QRM.SALES_REQUEST_MASTER_OBJID,
|
|
QRM.PROJECT_MGMT_OBJID,
|
|
QRM.VENDOR_OBJID,
|
|
QRM.VENDOR_TYPE,
|
|
QRM.STATUS,
|
|
CASE
|
|
WHEN QRM.STATUS = 'create' THEN '작성중'
|
|
WHEN QRM.STATUS = 'sent' THEN '발송완료'
|
|
WHEN QRM.STATUS = 'received' THEN '견적수신'
|
|
WHEN QRM.STATUS = 'completed' THEN '완료'
|
|
ELSE QRM.STATUS
|
|
END AS STATUS_NAME,
|
|
QRM.MAIL_SEND_DATE,
|
|
TO_CHAR(QRM.MAIL_SEND_DATE, 'YYYY-MM-DD') AS MAIL_SEND_DATE_TITLE,
|
|
QRM.MAIL_SEND_YN,
|
|
QRM.DUE_DATE,
|
|
TO_CHAR(QRM.DUE_DATE, 'YYYY-MM-DD') AS DUE_DATE_TITLE,
|
|
QRM.REMARK,
|
|
QRM.WRITER,
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = QRM.WRITER) AS WRITER_NAME,
|
|
QRM.REG_DATE,
|
|
TO_CHAR(QRM.REG_DATE, 'YYYY-MM-DD') AS REG_DATE_TITLE,
|
|
-- 구매요청서 정보
|
|
SRM.REQUEST_MNG_NO,
|
|
SRM.PURCHASE_TYPE,
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
|
-- 주문유형
|
|
COALESCE(PM.CATEGORY_CD, SRM.ORDER_TYPE) AS ORDER_TYPE,
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = COALESCE(PM.CATEGORY_CD, SRM.ORDER_TYPE)) AS ORDER_TYPE_NAME,
|
|
-- 제품구분
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CTM.PRODUCT),
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = SRM.PRODUCT_NAME)
|
|
) AS PRODUCT_NAME_TITLE,
|
|
-- 프로젝트번호
|
|
PM.PROJECT_NO AS PROJECT_NUMBER,
|
|
-- 업체 정보
|
|
CM.CLIENT_NM AS VENDOR_NAME,
|
|
-- 품번/품명 (견적요청서 상세 - 첫 번째 품목)
|
|
(SELECT QRD.PART_NO FROM QUOTATION_REQUEST_DETAIL QRD
|
|
WHERE QRD.QUOTATION_REQUEST_MASTER_OBJID = QRM.OBJID
|
|
ORDER BY QRD.OBJID LIMIT 1) AS PART_NO,
|
|
(SELECT QRD.PART_NAME FROM QUOTATION_REQUEST_DETAIL QRD
|
|
WHERE QRD.QUOTATION_REQUEST_MASTER_OBJID = QRM.OBJID
|
|
ORDER BY QRD.OBJID LIMIT 1) AS PART_NAME,
|
|
-- 견적요청서 상세 품목 개수
|
|
(SELECT COUNT(*) FROM QUOTATION_REQUEST_DETAIL QRD
|
|
WHERE QRD.QUOTATION_REQUEST_MASTER_OBJID = QRM.OBJID) AS DETAIL_COUNT,
|
|
-- 수신견적서 첨부파일 개수
|
|
(SELECT COUNT(*) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = QRM.OBJID::VARCHAR AND DOC_TYPE = 'QUOTATION_RECEIVED' AND STATUS = 'Active') AS ATTACH_FILE_CNT
|
|
FROM QUOTATION_REQUEST_MASTER QRM
|
|
LEFT JOIN SALES_REQUEST_MASTER SRM ON QRM.SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR
|
|
LEFT JOIN PROJECT_MGMT PM ON PM.OBJID = SRM.PROJECT_NO
|
|
LEFT JOIN CONTRACT_MGMT CTM ON CTM.OBJID = PM.CONTRACT_OBJID
|
|
LEFT JOIN CLIENT_MNG CM ON QRM.VENDOR_OBJID::VARCHAR = CM.OBJID::VARCHAR
|
|
WHERE 1=1
|
|
<if test="SALES_REQUEST_MASTER_OBJID != null and SALES_REQUEST_MASTER_OBJID != ''">
|
|
AND QRM.SALES_REQUEST_MASTER_OBJID::VARCHAR = #{SALES_REQUEST_MASTER_OBJID}
|
|
</if>
|
|
<if test="Year != null and Year != ''">
|
|
AND TO_CHAR(QRM.REG_DATE, 'YYYY') = #{Year}
|
|
</if>
|
|
<if test="QUOTATION_REQUEST_NO != null and QUOTATION_REQUEST_NO != ''">
|
|
AND QRM.QUOTATION_REQUEST_NO LIKE '%' || #{QUOTATION_REQUEST_NO} || '%'
|
|
</if>
|
|
<!-- 프로젝트번호 검색 (OBJID로 비교) -->
|
|
<if test="PROJECT_NO != null and PROJECT_NO != ''">
|
|
AND SRM.PROJECT_NO = #{PROJECT_NO}
|
|
</if>
|
|
<!-- 공급업체 검색 -->
|
|
<if test="VENDOR_OBJID != null and VENDOR_OBJID != ''">
|
|
AND QRM.VENDOR_OBJID::VARCHAR = #{VENDOR_OBJID}
|
|
</if>
|
|
<if test="STATUS != null and STATUS != ''">
|
|
AND QRM.STATUS = #{STATUS}
|
|
</if>
|
|
<!-- 작성자 검색 -->
|
|
<if test="writer != null and writer != ''">
|
|
AND QRM.WRITER = #{writer}
|
|
</if>
|
|
<!-- 제품구분 검색 -->
|
|
<if test="product_cd != null and product_cd != ''">
|
|
AND PM.PRODUCT = #{product_cd}
|
|
</if>
|
|
ORDER BY QRM.REG_DATE DESC
|
|
<if test="startRow != null and countPerPage != null">
|
|
OFFSET #{startRow} LIMIT #{countPerPage}
|
|
</if>
|
|
</select>
|
|
|
|
<!-- 견적요청서 마스터 정보 조회 -->
|
|
<select id="getQuotationRequestMasterInfo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
QRM.OBJID,
|
|
QRM.QUOTATION_REQUEST_NO,
|
|
QRM.SALES_REQUEST_MASTER_OBJID,
|
|
QRM.PROJECT_MGMT_OBJID,
|
|
QRM.VENDOR_OBJID,
|
|
QRM.VENDOR_TYPE,
|
|
QRM.STATUS,
|
|
QRM.MAIL_SEND_DATE,
|
|
TO_CHAR(QRM.MAIL_SEND_DATE, 'YYYY-MM-DD') AS MAIL_SEND_DATE_TITLE,
|
|
QRM.MAIL_SEND_YN,
|
|
QRM.DUE_DATE,
|
|
TO_CHAR(QRM.DUE_DATE, 'YYYY-MM-DD') AS DUE_DATE_TITLE,
|
|
QRM.REMARK,
|
|
QRM.WRITER,
|
|
QRM.REG_DATE,
|
|
TO_CHAR(QRM.REG_DATE, 'YYYY-MM-DD') AS REG_DATE_TITLE,
|
|
-- 구매요청서 정보
|
|
SRM.REQUEST_MNG_NO,
|
|
SRM.PURCHASE_TYPE,
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
|
-- 주문유형
|
|
COALESCE(PM.CATEGORY_CD, SRM.ORDER_TYPE) AS ORDER_TYPE,
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = COALESCE(PM.CATEGORY_CD, SRM.ORDER_TYPE)) AS ORDER_TYPE_NAME,
|
|
-- 제품구분
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CTM.PRODUCT),
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = SRM.PRODUCT_NAME)
|
|
) AS PRODUCT_NAME_TITLE,
|
|
-- 프로젝트번호
|
|
PM.PROJECT_NO,
|
|
-- 업체 정보
|
|
CM.CLIENT_NM AS VENDOR_NAME,
|
|
CM.EMAIL AS VENDOR_EMAIL
|
|
FROM QUOTATION_REQUEST_MASTER QRM
|
|
LEFT JOIN SALES_REQUEST_MASTER SRM ON QRM.SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR
|
|
LEFT JOIN PROJECT_MGMT PM ON PM.OBJID = SRM.PROJECT_NO
|
|
LEFT JOIN CONTRACT_MGMT CTM ON CTM.OBJID = PM.CONTRACT_OBJID
|
|
LEFT JOIN CLIENT_MNG CM ON QRM.VENDOR_OBJID::VARCHAR = CM.OBJID::VARCHAR
|
|
WHERE QRM.OBJID = #{QUOTATION_REQUEST_MASTER_OBJID}::NUMERIC
|
|
</select>
|
|
|
|
<!-- 견적요청서 상세 목록 조회 -->
|
|
<select id="getQuotationRequestDetailList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
QRD.OBJID,
|
|
QRD.QUOTATION_REQUEST_MASTER_OBJID,
|
|
QRD.SALES_REQUEST_PART_OBJID,
|
|
QRD.PART_OBJID,
|
|
QRD.PART_NO,
|
|
QRD.PART_NAME,
|
|
QRD.RAW_MATERIAL,
|
|
QRD.SIZE,
|
|
QRD.QTY,
|
|
QRD.UNIT_PRICE,
|
|
QRD.REMARK,
|
|
QRD.REG_DATE,
|
|
-- 마스터 정보
|
|
QRM.VENDOR_TYPE,
|
|
QRM.VENDOR_OBJID,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = QRM.VENDOR_OBJID::VARCHAR) AS VENDOR_NAME
|
|
FROM QUOTATION_REQUEST_DETAIL QRD
|
|
LEFT JOIN QUOTATION_REQUEST_MASTER QRM ON QRD.QUOTATION_REQUEST_MASTER_OBJID = QRM.OBJID
|
|
WHERE QRD.QUOTATION_REQUEST_MASTER_OBJID = #{QUOTATION_REQUEST_MASTER_OBJID}::NUMERIC
|
|
ORDER BY QRD.OBJID
|
|
</select>
|
|
|
|
<!-- 견적요청서 번호 생성 -->
|
|
<select id="getNextQuotationRequestNo" parameterType="map" resultType="string">
|
|
SELECT 'Q' || TO_CHAR(NOW(), 'YYYYMMDD') || '-' || LPAD(NEXTVAL('SEQ_QUOTATION_REQUEST_NO')::VARCHAR, 3, '0')
|
|
</select>
|
|
|
|
<!-- 견적요청서 마스터 생성 -->
|
|
<insert id="insertQuotationRequestMaster" parameterType="map">
|
|
INSERT INTO QUOTATION_REQUEST_MASTER (
|
|
OBJID,
|
|
QUOTATION_REQUEST_NO,
|
|
SALES_REQUEST_MASTER_OBJID,
|
|
PROJECT_MGMT_OBJID,
|
|
VENDOR_OBJID,
|
|
VENDOR_TYPE,
|
|
STATUS,
|
|
DUE_DATE,
|
|
REMARK,
|
|
WRITER,
|
|
REG_DATE
|
|
) VALUES (
|
|
#{OBJID}::NUMERIC,
|
|
#{QUOTATION_REQUEST_NO},
|
|
#{SALES_REQUEST_MASTER_OBJID}::NUMERIC,
|
|
#{PROJECT_MGMT_OBJID}::NUMERIC,
|
|
#{VENDOR_OBJID}::NUMERIC,
|
|
#{VENDOR_TYPE},
|
|
'create',
|
|
<if test="DUE_DATE != null and DUE_DATE != ''">#{DUE_DATE}::DATE</if>
|
|
<if test="DUE_DATE == null or DUE_DATE == ''">NULL</if>,
|
|
#{REMARK},
|
|
#{WRITER},
|
|
NOW()
|
|
)
|
|
</insert>
|
|
|
|
<!-- 견적요청서 상세 생성 -->
|
|
<insert id="insertQuotationRequestDetail" parameterType="map">
|
|
INSERT INTO QUOTATION_REQUEST_DETAIL (
|
|
OBJID,
|
|
QUOTATION_REQUEST_MASTER_OBJID,
|
|
SALES_REQUEST_PART_OBJID,
|
|
PART_OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
RAW_MATERIAL,
|
|
SIZE,
|
|
QTY,
|
|
UNIT_PRICE,
|
|
REMARK,
|
|
REG_DATE
|
|
) VALUES (
|
|
#{OBJID}::NUMERIC,
|
|
#{QUOTATION_REQUEST_MASTER_OBJID}::NUMERIC,
|
|
#{SALES_REQUEST_PART_OBJID}::NUMERIC,
|
|
#{PART_OBJID}::NUMERIC,
|
|
#{PART_NO},
|
|
#{PART_NAME},
|
|
#{RAW_MATERIAL},
|
|
#{SIZE},
|
|
COALESCE(#{QTY}::NUMERIC, 0),
|
|
COALESCE(#{UNIT_PRICE}::NUMERIC, 0),
|
|
#{REMARK},
|
|
NOW()
|
|
)
|
|
</insert>
|
|
|
|
<!-- 견적요청서 상세 단가 업데이트 -->
|
|
<update id="updateQuotationRequestDetailPrice" parameterType="map">
|
|
UPDATE QUOTATION_REQUEST_DETAIL SET
|
|
UNIT_PRICE = #{UNIT_PRICE}::NUMERIC,
|
|
TOTAL_PRICE = #{QTY}::NUMERIC * #{UNIT_PRICE}::NUMERIC,
|
|
EDIT_DATE = NOW()
|
|
WHERE OBJID = #{OBJID}::NUMERIC
|
|
</update>
|
|
|
|
<!-- 견적요청서 마스터 상태 업데이트 -->
|
|
<update id="updateQuotationRequestMasterStatus" parameterType="map">
|
|
UPDATE QUOTATION_REQUEST_MASTER SET
|
|
STATUS = #{STATUS},
|
|
EDIT_DATE = NOW()
|
|
<if test="MAIL_SEND_YN != null and MAIL_SEND_YN != ''">
|
|
, MAIL_SEND_YN = #{MAIL_SEND_YN}
|
|
, MAIL_SEND_DATE = NOW()
|
|
</if>
|
|
WHERE OBJID = #{QUOTATION_REQUEST_MASTER_OBJID}::NUMERIC
|
|
</update>
|
|
|
|
<!-- MBOM_DETAIL 단가 업데이트 (견적 수신 후) -->
|
|
<!-- 동일 품번(PART_OBJID)의 모든 MBOM_DETAIL 행 업데이트 (품번 합쳐진 경우 대응) -->
|
|
<update id="updatePurchaseListPriceFromQuotation" parameterType="map">
|
|
UPDATE MBOM_DETAIL SET
|
|
<if test="VENDOR_TYPE == 'SUPPLY'">
|
|
UNIT_PRICE = #{UNIT_PRICE}::NUMERIC
|
|
</if>
|
|
<if test="VENDOR_TYPE == 'PROCESSING'">
|
|
PROCESSING_UNIT_PRICE = #{UNIT_PRICE}::NUMERIC
|
|
</if>
|
|
, EDIT_DATE = NOW()
|
|
WHERE OBJID IN (
|
|
SELECT MD2.OBJID
|
|
FROM MBOM_DETAIL MD2
|
|
WHERE MD2.PART_OBJID = (SELECT PART_OBJID FROM MBOM_DETAIL WHERE OBJID = #{SALES_REQUEST_PART_OBJID})
|
|
AND MD2.MBOM_HEADER_OBJID = (SELECT MBOM_HEADER_OBJID FROM MBOM_DETAIL WHERE OBJID = #{SALES_REQUEST_PART_OBJID})
|
|
)
|
|
</update>
|
|
|
|
<!-- MBOM_DETAIL 단가 초기화 (재수주 시 기존 단가 삭제) -->
|
|
<!-- 소재단가(UNIT_PRICE), 가공단가(PROCESSING_UNIT_PRICE)를 0으로 초기화 -->
|
|
<update id="resetMbomDetailPrice" parameterType="map">
|
|
UPDATE MBOM_DETAIL SET
|
|
UNIT_PRICE = 0,
|
|
PROCESSING_UNIT_PRICE = 0,
|
|
TOTAL_PRICE = 0,
|
|
PROCESSING_TOTAL_PRICE = 0,
|
|
GRAND_TOTAL_PRICE = 0,
|
|
EDIT_DATE = NOW()
|
|
WHERE MBOM_HEADER_OBJID = #{MBOM_HEADER_OBJID}
|
|
</update>
|
|
|
|
<!-- 구매리스트에서 견적요청서 생성 대상 조회 - M-BOM 기반 (MBOM_DETAIL에서 조회) -->
|
|
<!-- 공급업체/가공업체별로 견적요청서 생성 가능 여부 플래그 포함 -->
|
|
<select id="getPurchaseListForQuotationFromMBom" parameterType="map" resultType="map">
|
|
SELECT
|
|
MD.OBJID,
|
|
#{SALES_REQUEST_MASTER_OBJID} AS SALES_REQUEST_MASTER_OBJID,
|
|
MD.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
MD.RAW_MATERIAL,
|
|
MD.RAW_MATERIAL_SIZE AS SIZE,
|
|
MD.PO_QTY,
|
|
MD.PRODUCTION_QTY,
|
|
MD.UNIT_PRICE,
|
|
MD.PROCESSING_UNIT_PRICE,
|
|
MD.VENDOR AS VENDOR_PM,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = MD.VENDOR) AS VENDOR_NAME,
|
|
MD.PROCESSING_VENDOR,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = MD.PROCESSING_VENDOR) AS PROCESSING_VENDOR_NAME,
|
|
MD.RAW_MATERIAL_PART_NO AS RAW_MATERIAL_NO,
|
|
'MBOM' AS DATA_SOURCE,
|
|
-- 공급업체 견적요청서 생성 가능 여부
|
|
CASE WHEN MD.VENDOR IS NOT NULL AND MD.VENDOR != '' AND NOT EXISTS (
|
|
SELECT 1 FROM QUOTATION_REQUEST_DETAIL QRD
|
|
INNER JOIN QUOTATION_REQUEST_MASTER QRM ON QRD.QUOTATION_REQUEST_MASTER_OBJID = QRM.OBJID
|
|
WHERE QRD.SALES_REQUEST_PART_OBJID::VARCHAR = MD.OBJID::VARCHAR
|
|
AND QRM.VENDOR_TYPE = 'SUPPLY'
|
|
AND QRM.VENDOR_OBJID::VARCHAR = MD.VENDOR
|
|
) THEN 'Y' ELSE 'N' END AS CAN_CREATE_SUPPLY,
|
|
-- 가공업체 견적요청서 생성 가능 여부
|
|
CASE WHEN MD.PROCESSING_VENDOR IS NOT NULL AND MD.PROCESSING_VENDOR != '' AND NOT EXISTS (
|
|
SELECT 1 FROM QUOTATION_REQUEST_DETAIL QRD
|
|
INNER JOIN QUOTATION_REQUEST_MASTER QRM ON QRD.QUOTATION_REQUEST_MASTER_OBJID = QRM.OBJID
|
|
WHERE QRD.SALES_REQUEST_PART_OBJID::VARCHAR = MD.OBJID::VARCHAR
|
|
AND QRM.VENDOR_TYPE = 'PROCESSING'
|
|
AND QRM.VENDOR_OBJID::VARCHAR = MD.PROCESSING_VENDOR
|
|
) THEN 'Y' ELSE 'N' END AS CAN_CREATE_PROCESSING
|
|
FROM MBOM_DETAIL MD
|
|
LEFT JOIN PART_MNG PM ON MD.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE MD.MBOM_HEADER_OBJID = #{MBOM_HEADER_OBJID}
|
|
AND (
|
|
(MD.VENDOR IS NOT NULL AND MD.VENDOR != '')
|
|
OR (MD.PROCESSING_VENDOR IS NOT NULL AND MD.PROCESSING_VENDOR != '')
|
|
)
|
|
-- 공급업체 또는 가공업체 중 하나라도 견적요청서 생성 가능해야 함
|
|
AND (
|
|
-- 공급업체 견적요청서 생성 가능
|
|
(MD.VENDOR IS NOT NULL AND MD.VENDOR != '' AND NOT EXISTS (
|
|
SELECT 1 FROM QUOTATION_REQUEST_DETAIL QRD
|
|
INNER JOIN QUOTATION_REQUEST_MASTER QRM ON QRD.QUOTATION_REQUEST_MASTER_OBJID = QRM.OBJID
|
|
WHERE QRD.SALES_REQUEST_PART_OBJID::VARCHAR = MD.OBJID::VARCHAR
|
|
AND QRM.VENDOR_TYPE = 'SUPPLY'
|
|
AND QRM.VENDOR_OBJID::VARCHAR = MD.VENDOR
|
|
))
|
|
OR
|
|
-- 가공업체 견적요청서 생성 가능
|
|
(MD.PROCESSING_VENDOR IS NOT NULL AND MD.PROCESSING_VENDOR != '' AND NOT EXISTS (
|
|
SELECT 1 FROM QUOTATION_REQUEST_DETAIL QRD
|
|
INNER JOIN QUOTATION_REQUEST_MASTER QRM ON QRD.QUOTATION_REQUEST_MASTER_OBJID = QRM.OBJID
|
|
WHERE QRD.SALES_REQUEST_PART_OBJID::VARCHAR = MD.OBJID::VARCHAR
|
|
AND QRM.VENDOR_TYPE = 'PROCESSING'
|
|
AND QRM.VENDOR_OBJID::VARCHAR = MD.PROCESSING_VENDOR
|
|
))
|
|
)
|
|
ORDER BY MD.REGDATE
|
|
</select>
|
|
|
|
<!-- 구매리스트에서 견적요청서 생성 대상 조회 - 수동 작성 (SALES_REQUEST_PART에서 조회) -->
|
|
<select id="getPurchaseListForQuotationFromManual" parameterType="map" resultType="map">
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.SALES_REQUEST_MASTER_OBJID,
|
|
SRP.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
SRP.RAW_MATERIAL,
|
|
SRP.SIZE,
|
|
SRP.PO_QTY,
|
|
SRP.PRODUCTION_QTY,
|
|
SRP.UNIT_PRICE,
|
|
SRP.PROCESSING_UNIT_PRICE,
|
|
SRP.VENDOR_PM,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
|
|
SRP.PROCESSING_VENDOR,
|
|
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.PROCESSING_VENDOR) AS PROCESSING_VENDOR_NAME,
|
|
SRP.RAW_MATERIAL_NO,
|
|
'MANUAL' AS DATA_SOURCE
|
|
FROM SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}::NUMERIC
|
|
AND (
|
|
(SRP.VENDOR_PM IS NOT NULL AND SRP.VENDOR_PM != '')
|
|
OR (SRP.PROCESSING_VENDOR IS NOT NULL AND SRP.PROCESSING_VENDOR != '')
|
|
)
|
|
ORDER BY SRP.OBJID
|
|
</select>
|
|
|
|
<!-- 견적요청서 삭제 (마스터) -->
|
|
<delete id="deleteQuotationRequestMaster" parameterType="map">
|
|
DELETE FROM QUOTATION_REQUEST_MASTER WHERE OBJID = #{QUOTATION_REQUEST_MASTER_OBJID}::NUMERIC
|
|
</delete>
|
|
|
|
<!-- 견적요청서 삭제 (상세) -->
|
|
<delete id="deleteQuotationRequestDetail" parameterType="map">
|
|
DELETE FROM QUOTATION_REQUEST_DETAIL WHERE QUOTATION_REQUEST_MASTER_OBJID = #{QUOTATION_REQUEST_MASTER_OBJID}::NUMERIC
|
|
</delete>
|
|
|
|
<!-- 견적요청서 메일 발송 상태 업데이트 -->
|
|
<update id="updateQuotationRequestMailSent" parameterType="map">
|
|
UPDATE QUOTATION_REQUEST_MASTER
|
|
SET MAIL_SEND_YN = 'Y',
|
|
MAIL_SEND_DATE = NOW()
|
|
WHERE OBJID = #{QUOTATION_REQUEST_MASTER_OBJID}::NUMERIC
|
|
</update>
|
|
|
|
<!-- ==================== 구매요청서 품의서 생성 (PURCHASE_REG 전용) ==================== -->
|
|
|
|
<!-- 구매요청서 품의서 대상 품목 조회 (단가+공급업체 입력, 품의서 미생성) -->
|
|
<select id="getProposalTargetPartsFromPurchaseReg" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
SRP.QTY,
|
|
COALESCE(SRP.UNIT_PRICE, NULLIF(SRP.PARTNER_PRICE, '')::NUMERIC, 0) AS UNIT_PRICE,
|
|
SRP.TOTAL_PRICE,
|
|
COALESCE(SRP.VENDOR_PM, SRP.PARTNER_OBJID) AS VENDOR_PM,
|
|
CASE
|
|
WHEN COALESCE(SRP.VENDOR_PM, SRP.PARTNER_OBJID) LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = COALESCE(SRP.VENDOR_PM, SRP.PARTNER_OBJID))
|
|
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = COALESCE(SRP.VENDOR_PM, SRP.PARTNER_OBJID))
|
|
END AS VENDOR_NAME,
|
|
SRP.NET_QTY,
|
|
SRP.PO_QTY
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
|
-- 단가가 입력되어 있고 (UNIT_PRICE 또는 PARTNER_PRICE)
|
|
AND (
|
|
(SRP.UNIT_PRICE IS NOT NULL AND SRP.UNIT_PRICE > 0)
|
|
OR (SRP.PARTNER_PRICE IS NOT NULL AND SRP.PARTNER_PRICE != '' AND SRP.PARTNER_PRICE::NUMERIC > 0)
|
|
)
|
|
-- 공급업체가 입력되어 있고 (VENDOR_PM 또는 PARTNER_OBJID)
|
|
AND (
|
|
(SRP.VENDOR_PM IS NOT NULL AND SRP.VENDOR_PM != '')
|
|
OR (SRP.PARTNER_OBJID IS NOT NULL AND SRP.PARTNER_OBJID != '')
|
|
)
|
|
-- 품의서가 생성되지 않은 품목만
|
|
AND SRP.PROPOSAL_DATE IS NULL
|
|
ORDER BY SRP.REGDATE
|
|
</select>
|
|
|
|
<!-- 구매요청서 품의서 제외 품목 조회 (단가O, 공급업체X) -->
|
|
<select id="getProposalExcludedPartsFromPurchaseReg" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
SRP.OBJID,
|
|
SRP.PART_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
SRP.QTY,
|
|
COALESCE(SRP.UNIT_PRICE, NULLIF(SRP.PARTNER_PRICE, '')::NUMERIC, 0) AS UNIT_PRICE
|
|
FROM
|
|
SALES_REQUEST_PART SRP
|
|
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
|
WHERE
|
|
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
|
-- 단가가 입력되어 있지만 (UNIT_PRICE 또는 PARTNER_PRICE)
|
|
AND (
|
|
(SRP.UNIT_PRICE IS NOT NULL AND SRP.UNIT_PRICE > 0)
|
|
OR (SRP.PARTNER_PRICE IS NOT NULL AND SRP.PARTNER_PRICE != '' AND SRP.PARTNER_PRICE::NUMERIC > 0)
|
|
)
|
|
-- 공급업체가 없는 품목 (VENDOR_PM, PARTNER_OBJID 둘 다 없음)
|
|
AND (SRP.VENDOR_PM IS NULL OR SRP.VENDOR_PM = '')
|
|
AND (SRP.PARTNER_OBJID IS NULL OR SRP.PARTNER_OBJID = '')
|
|
-- 품의서가 생성되지 않은 품목만
|
|
AND SRP.PROPOSAL_DATE IS NULL
|
|
ORDER BY SRP.REGDATE
|
|
</select>
|
|
|
|
<!-- 구매요청서 품의서 생성 (SALES_REQUEST_MASTER에 INSERT) -->
|
|
<insert id="insertProposalFromPurchaseReg" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_MASTER (
|
|
OBJID,
|
|
REQUEST_MNG_NO,
|
|
PROJECT_NO,
|
|
PURCHASE_TYPE,
|
|
ORDER_TYPE,
|
|
PRODUCT_NAME,
|
|
AREA_CD,
|
|
CUSTOMER_OBJID,
|
|
PAID_TYPE,
|
|
REQUEST_USER_ID,
|
|
DELIVERY_REQUEST_DATE,
|
|
STATUS,
|
|
WRITER,
|
|
REGDATE,
|
|
DOC_TYPE
|
|
) VALUES (
|
|
#{OBJID},
|
|
#{REQUEST_MNG_NO},
|
|
#{PROJECT_NO},
|
|
#{PURCHASE_TYPE},
|
|
#{ORDER_TYPE},
|
|
#{PRODUCT_NAME},
|
|
#{AREA_CD},
|
|
#{CUSTOMER_OBJID},
|
|
#{PAID_TYPE},
|
|
#{REQUEST_USER_ID},
|
|
#{DELIVERY_REQUEST_DATE},
|
|
'create',
|
|
#{WRITER},
|
|
NOW(),
|
|
'PURCHASE_REG_PROPOSAL'
|
|
)
|
|
</insert>
|
|
|
|
<!-- 구매요청서 품의서용 SALES_REQUEST_PART 생성 (품목 복사) -->
|
|
<insert id="insertProposalPartFromPurchaseReg" parameterType="map">
|
|
INSERT INTO SALES_REQUEST_PART (
|
|
OBJID,
|
|
SALES_REQUEST_MASTER_OBJID,
|
|
PART_OBJID,
|
|
QTY,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
VENDOR_PM,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
USE_YN,
|
|
PROPOSAL_DATE,
|
|
WRITER,
|
|
REGDATE
|
|
)
|
|
SELECT
|
|
#{NEW_OBJID},
|
|
#{PROPOSAL_MASTER_OBJID},
|
|
PART_OBJID,
|
|
QTY,
|
|
CASE
|
|
WHEN UNIT_PRICE IS NOT NULL AND UNIT_PRICE > 0 THEN UNIT_PRICE
|
|
WHEN PARTNER_PRICE IS NOT NULL AND PARTNER_PRICE != '' THEN PARTNER_PRICE::NUMERIC
|
|
ELSE 0
|
|
END AS UNIT_PRICE,
|
|
CASE
|
|
WHEN TOTAL_PRICE IS NOT NULL AND TOTAL_PRICE > 0 THEN TOTAL_PRICE
|
|
ELSE COALESCE(QTY::NUMERIC, 0) *
|
|
CASE
|
|
WHEN UNIT_PRICE IS NOT NULL AND UNIT_PRICE > 0 THEN UNIT_PRICE
|
|
WHEN PARTNER_PRICE IS NOT NULL AND PARTNER_PRICE != '' THEN PARTNER_PRICE::NUMERIC
|
|
ELSE 0
|
|
END
|
|
END AS TOTAL_PRICE,
|
|
COALESCE(NULLIF(VENDOR_PM, ''), PARTNER_OBJID) AS VENDOR_PM,
|
|
NET_QTY,
|
|
COALESCE(QTY::NUMERIC, 0) AS PO_QTY, -- 발주수량에 QTY 값 저장
|
|
USE_YN,
|
|
NOW() AS PROPOSAL_DATE,
|
|
#{WRITER},
|
|
NOW()
|
|
FROM SALES_REQUEST_PART
|
|
WHERE OBJID = #{SOURCE_OBJID}
|
|
</insert>
|
|
|
|
<!-- 구매요청서 품의서 생성 후 원본 PROPOSAL_DATE 업데이트 -->
|
|
<update id="updateProposalDateForPurchaseRegParts" parameterType="map">
|
|
UPDATE SALES_REQUEST_PART
|
|
SET PROPOSAL_DATE = NOW()
|
|
WHERE OBJID IN
|
|
<foreach collection="PART_OBJIDS" item="objid" open="(" separator="," close=")">
|
|
#{objid}
|
|
</foreach>
|
|
</update>
|
|
|
|
</mapper> |