오늘치 커밋

This commit is contained in:
leeheejin
2025-12-02 18:09:47 +09:00
parent 59f883b711
commit eeba0c6f9e
19 changed files with 2119 additions and 438 deletions

View File

@@ -8042,6 +8042,61 @@ FROM (
DELETE FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID = #{objid}
</delete>
<!-- 일반거래처 담당자 목록 조회 (SUPPLY_OBJID를 공용으로 사용) -->
<select id="getClientChargerList" parameterType="map" resultType="map">
SELECT
ROW_NUMBER() OVER(ORDER BY REGDATE DESC) RNUM,
OBJID,
CHARGER_TYPE,
SUPPLY_OBJID,
CHARGER_NAME,
PHONE,
TEL,
FAX,
EMAIL,
WRITER,
REGDATE,
TO_CHAR(REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE
FROM
SUPPLY_CHARGER_MNG
WHERE SUPPLY_OBJID::VARCHAR = #{client_objid}::VARCHAR
</select>
<!-- 일반거래처 담당자 저장 (SUPPLY_OBJID를 공용으로 사용) -->
<insert id="mergeClientCharger" parameterType="map">
INSERT INTO SUPPLY_CHARGER_MNG
(
OBJID,
CHARGER_TYPE,
SUPPLY_OBJID,
CHARGER_NAME,
PHONE,
TEL,
FAX,
EMAIL,
WRITER,
REGDATE
)
VALUES
(
#{OBJID}::INTEGER,
#{CHARGER_TYPE},
#{CLIENT_OBJID},
#{CHARGER_NAME},
#{PHONE},
#{TEL},
#{FAX},
#{EMAIL},
#{WRITER},
NOW()
)
</insert>
<!-- 일반거래처 담당자 삭제 (SUPPLY_OBJID를 공용으로 사용) -->
<delete id="initClientCharger" parameterType="map">
DELETE FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = #{objid}::VARCHAR
</delete>
<update id="deletesupplyMngInfo" parameterType="map">
DELETE FROM ADMIN_SUPPLY_MNG WHERE OBJID = #{objId}::NUMERIC
</update>
@@ -8864,8 +8919,8 @@ SELECT
SELECT *
FROM CLIENT_MNG
WHERE 1=1
<if test="OBJID != null and OBJID != ''">
AND OBJID != #{OBJID}::numeric
<if test="objid != null and objid != ''">
AND OBJID != #{objid}::numeric
</if>
<if test="CLIENT_CD != null and CLIENT_CD != ''">
AND TRIM(UPPER(CLIENT_CD)) = TRIM(UPPER(#{CLIENT_CD}))
@@ -8932,8 +8987,8 @@ SELECT
#{BIZCON_FG}, #{BIZCON_NM}, #{SHIP_TP}, #{SHIP_NM},
#{PLAN_DAY_TYPE}, #{PLAN_DAY}, #{PURPOSE_TYPE}, #{FOR_YN},
#{CHECK_DATA}, #{CHECK_STATE},
CASE WHEN #{CHECK_ORDER} = '' THEN NULL ELSE #{CHECK_ORDER}::numeric END,
#{FIXED_ORDER},
CASE WHEN #{CHECK_ORDER} = '' OR #{CHECK_ORDER} !~ '^[0-9]+$' THEN NULL ELSE #{CHECK_ORDER}::numeric END,
CASE WHEN #{FIXED_ORDER} = '' OR #{FIXED_ORDER} !~ '^[0-9]+$' THEN NULL ELSE #{FIXED_ORDER}::numeric END,
#{INSERT_ID}, #{INSERT_IP},
CASE WHEN #{INSERT_DT} = '' THEN NOW() ELSE COALESCE(#{INSERT_DT}::timestamp, NOW()) END,
#{MODIFY_ID}, #{MODIFY_IP},
@@ -9048,8 +9103,8 @@ SELECT
FOR_YN = #{FOR_YN},
CHECK_DATA = #{CHECK_DATA},
CHECK_STATE = #{CHECK_STATE},
CHECK_ORDER = CASE WHEN #{CHECK_ORDER} = '' THEN NULL ELSE #{CHECK_ORDER}::numeric END,
FIXED_ORDER = #{FIXED_ORDER},
CHECK_ORDER = CASE WHEN #{CHECK_ORDER} = '' OR #{CHECK_ORDER} !~ '^[0-9]+$' THEN NULL ELSE #{CHECK_ORDER}::numeric END,
FIXED_ORDER = CASE WHEN #{FIXED_ORDER} = '' OR #{FIXED_ORDER} !~ '^[0-9]+$' THEN NULL ELSE #{FIXED_ORDER}::numeric END,
MODIFY_ID = #{MODIFY_ID},
MODIFY_IP = #{MODIFY_IP},
MODIFY_DT = NOW()
@@ -9325,5 +9380,58 @@ SELECT
) RESULT
</select> -->
<!-- 소재 관리 쿼리 -->
<!-- 소재 목록 조회 (전체) -->
<select id="getMaterialList" parameterType="map" resultType="map">
SELECT
OBJID,
MATERIAL_CODE,
MATERIAL_NAME,
STATUS
FROM MATERIAL_MNG
WHERE STATUS = 'ACTIVE'
ORDER BY MATERIAL_CODE
</select>
<!-- 특정 소재의 사이즈 목록 조회 -->
<select id="getMaterialSizes" parameterType="map" resultType="map">
SELECT
OBJID,
MATERIAL_CODE,
SIZE_SPEC,
MATERIAL_PART_NO
FROM MATERIAL_MNG
WHERE MATERIAL_CODE = #{materialCode}
AND STATUS = 'ACTIVE'
ORDER BY SIZE_SPEC
</select>
<!-- 소재 코드 + 사이즈로 소재품번 조회 -->
<select id="getMaterialPartNo" parameterType="map" resultType="map">
SELECT
OBJID,
MATERIAL_CODE,
MATERIAL_NAME,
SIZE_SPEC,
MATERIAL_PART_NO
FROM MATERIAL_MNG
WHERE MATERIAL_CODE = #{materialCode}
AND SIZE_SPEC = #{sizeSpec}
AND STATUS = 'ACTIVE'
LIMIT 1
</select>
<!-- 공급업체 담당자 목록 조회 (발주서 메일 발송용) -->
<select id="getSupplyManagerList" parameterType="map" resultType="map">
SELECT
SCM.OBJID,
SCM.CHARGER_NAME AS NAME,
SCM.EMAIL,
SCM.PHONE,
SCM.TEL
FROM SUPPLY_CHARGER_MNG SCM
WHERE SCM.SUPPLY_OBJID = #{SUPPLY_OBJID}
ORDER BY SCM.REGDATE DESC
</select>
</mapper>

View File

@@ -1526,29 +1526,57 @@
</select> -->
<select id="getsupplyselect" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,SUPPLY_NAME AS NAME
,SUPPLY_CODE AS CODE_ID
,SUPPLY_NAME AS CODE_NAME
,SUPPLY_CODE AS CODE_CD
,REG_NO
,CHARGE_USER_NAME
,SUPPLY_TEL_NO
,SUPPLY_FAX_NO
,PAYMENT_METHOD
,STATUS AS STATUS
,'' AS ID
,'' AS EXT_VAL
FROM SUPPLY_MNG
WHERE 1=1
AND SUPPLY_CODE != '0000269'
<if test="SUPPLY_OBJID != null and !''.equals(SUPPLY_OBJID)">
AND OBJID::VARCHAR = #{SUPPLY_OBJID}::VARCHAR
</if>
<if test="CHARGER_TYPE != null and !''.equals(CHARGER_TYPE)">
AND CHARGER_TYPE = #{CHARGER_TYPE}
</if>
SELECT * FROM (
<!-- 기존 SUPPLY_MNG 데이터 -->
SELECT
OBJID::VARCHAR AS CODE
,SUPPLY_NAME AS NAME
,SUPPLY_CODE AS CODE_ID
,SUPPLY_NAME AS CODE_NAME
,SUPPLY_CODE AS CODE_CD
,REG_NO
,CHARGE_USER_NAME
,SUPPLY_TEL_NO
,SUPPLY_FAX_NO
,PAYMENT_METHOD
,STATUS AS STATUS
,'' AS ID
,'' AS EXT_VAL
,'SUPPLY' AS DATA_SOURCE
FROM SUPPLY_MNG
WHERE 1=1
AND SUPPLY_CODE != '0000269'
<if test="SUPPLY_OBJID != null and !''.equals(SUPPLY_OBJID)">
AND OBJID::VARCHAR = #{SUPPLY_OBJID}::VARCHAR
</if>
<if test="CHARGER_TYPE != null and !''.equals(CHARGER_TYPE)">
AND CHARGER_TYPE = #{CHARGER_TYPE}
</if>
UNION ALL
<!-- CLIENT_MNG (일반거래처) 데이터 -->
SELECT
'C_' || OBJID::VARCHAR AS CODE
,CLIENT_NM AS NAME
,CLIENT_CD AS CODE_ID
,CLIENT_NM AS CODE_NAME
,CLIENT_CD AS CODE_CD
,BUS_REG_NO AS REG_NO
,CEO_NM AS CHARGE_USER_NAME
,TEL_NO AS SUPPLY_TEL_NO
,FAX_NO AS SUPPLY_FAX_NO
,PAYMENT_TERM AS PAYMENT_METHOD
,USE_YN AS STATUS
,'' AS ID
,'' AS EXT_VAL
,'CLIENT' AS DATA_SOURCE
FROM CLIENT_MNG
WHERE 1=1
<if test="SUPPLY_OBJID != null and !''.equals(SUPPLY_OBJID)">
AND ('C_' || OBJID::VARCHAR) = #{SUPPLY_OBJID}::VARCHAR
</if>
) AS COMBINED
ORDER BY NAME
</select>
<select id="getsupplyselect2" parameterType="map" resultType="map">
@@ -2533,7 +2561,7 @@ SELECT option_objid::VARCHAR AS CODE
<select id="getRevNoselect" parameterType="map" resultType="map">
SELECT
T.OBJID::varchar AS CODE
,COALESCE(T.REVISION, T.REV, '1.0') AS NAME
,COALESCE(T.REVISION, '1.0') AS NAME
,T1.PRODUCT_CODE AS CODE_CD
,'' AS STATUS
,T.spec_name AS ID
@@ -2541,7 +2569,7 @@ SELECT option_objid::VARCHAR AS CODE
FROM PART_BOM_REPORT T,PRODUCT_MGMT T1
WHERE T.PRODUCT_MGMT_OBJID = T1.OBJID
AND T1.OBJID = #{code}::numeric
ORDER BY COALESCE(T.REVISION, T.REV, '1.0')
ORDER BY COALESCE(T.REVISION, '1.0')
</select>
@@ -3206,31 +3234,63 @@ ORDER BY COALESCE(T.REVISION, T.REV, '1.0')
AND MASTER_OBJID::varchar = #{masterObjid}
</select>
<!-- 고객사 정보 조회 -->
<!-- 고객사 정보 조회 (공급업체 + 일반거래처 통합) -->
<select id="getSupplyInfo" parameterType="map" resultType="map">
SELECT
OBJID,
SUPPLY_CODE,
SUPPLY_NAME,
REG_NO,
SUPPLY_ADDRESS,
SUPPLY_BUSNAME,
SUPPLY_STOCKNAME,
SUPPLY_TEL_NO,
SUPPLY_FAX_NO,
CHARGE_USER_NAME,
PAYMENT_METHOD,
MANAGER1_NAME,
MANAGER1_EMAIL,
MANAGER2_NAME,
MANAGER2_EMAIL,
MANAGER3_NAME,
MANAGER3_EMAIL,
MANAGER4_NAME,
MANAGER4_EMAIL,
MANAGER5_NAME,
MANAGER5_EMAIL
FROM SUPPLY_MNG
WHERE OBJID = #{objId}::numeric
<choose>
<!-- 일반거래처인 경우 (C_로 시작) -->
<when test="objId != null and objId.startsWith('C_')">
SELECT
C.OBJID,
C.CLIENT_CD AS SUPPLY_CODE,
C.CLIENT_NM AS SUPPLY_NAME,
C.BUS_REG_NO AS REG_NO,
C.ADDR1 AS SUPPLY_ADDRESS,
C.BUS_TYPE AS SUPPLY_BUSNAME,
C.BUS_ITEM AS SUPPLY_STOCKNAME,
C.TEL_NO AS SUPPLY_TEL_NO,
C.FAX_NO AS SUPPLY_FAX_NO,
C.CEO_NM AS CHARGE_USER_NAME,
C.PAYMENT_TERM AS PAYMENT_METHOD,
(SELECT CHARGER_NAME FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 0) AS MANAGER1_NAME,
(SELECT EMAIL FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 0) AS MANAGER1_EMAIL,
(SELECT CHARGER_NAME FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 1) AS MANAGER2_NAME,
(SELECT EMAIL FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 1) AS MANAGER2_EMAIL,
(SELECT CHARGER_NAME FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 2) AS MANAGER3_NAME,
(SELECT EMAIL FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 2) AS MANAGER3_EMAIL,
(SELECT CHARGER_NAME FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 3) AS MANAGER4_NAME,
(SELECT EMAIL FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 3) AS MANAGER4_EMAIL,
(SELECT CHARGER_NAME FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 4) AS MANAGER5_NAME,
(SELECT EMAIL FROM SUPPLY_CHARGER_MNG WHERE SUPPLY_OBJID::VARCHAR = C.OBJID::VARCHAR ORDER BY REGDATE LIMIT 1 OFFSET 4) AS MANAGER5_EMAIL
FROM CLIENT_MNG C
WHERE C.OBJID::VARCHAR = REPLACE(#{objId}, 'C_', '')
</when>
<!-- 공급업체인 경우 -->
<otherwise>
SELECT
OBJID,
SUPPLY_CODE,
SUPPLY_NAME,
REG_NO,
SUPPLY_ADDRESS,
SUPPLY_BUSNAME,
SUPPLY_STOCKNAME,
SUPPLY_TEL_NO,
SUPPLY_FAX_NO,
CHARGE_USER_NAME,
PAYMENT_METHOD,
MANAGER1_NAME,
MANAGER1_EMAIL,
MANAGER2_NAME,
MANAGER2_EMAIL,
MANAGER3_NAME,
MANAGER3_EMAIL,
MANAGER4_NAME,
MANAGER4_EMAIL,
MANAGER5_NAME,
MANAGER5_EMAIL
FROM SUPPLY_MNG
WHERE OBJID = #{objId}::numeric
</otherwise>
</choose>
</select>
</mapper>

View File

@@ -32,7 +32,10 @@
POM.PARTNER_OBJID,
(SELECT SUPPLY_CODE FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_CODE,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
(
SELECT
SUM(ORDER_QTY::numeric)
@@ -274,7 +277,10 @@
POM.PARTNER_OBJID,
(SELECT SUPPLY_CODE FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_CODE,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
(
SELECT
SUM(ORDER_QTY::numeric)
@@ -578,8 +584,8 @@
(
#{OBJID},
#{PO_CLIENT_ID},
<!-- (SELECT 'PO-'||TO_CHAR(NOW(),'YYMM')||'-'||LPAD((COALESCE(MAX(SUBSTR(PURCHASE_ORDER_NO,9,11)),'0')::INTEGER+1)::TEXT,3,'0') FROM PURCHASE_ORDER_MASTER), -->
(SELECT 'PO-'||TO_CHAR(NOW(),'YYMM')||'-'||(COALESCE(MAX(case when SPLIT_PART( PURCHASE_ORDER_NO, '-', 3) = '' or PURCHASE_ORDER_NO is null then '0' else SPLIT_PART( PURCHASE_ORDER_NO, '-', 3) end ::numeric ))::INTEGER+1)::TEXT FROM PURCHASE_ORDER_MASTER),
<!-- 기존: PO-YYMM-순번, 신규: RPSYY-MMDD-순번 (예: RPS25-0926-01) -->
(SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
#{CATEGORY_CD},
#{PRODUCT_GROUP},
#{PRODUCT},
@@ -757,8 +763,8 @@
(
#{OBJID},
#{PO_CLIENT_ID},
(SELECT 'PO-'||TO_CHAR(NOW(),'YYMM')||'-'||(COALESCE(MAX(case when SPLIT_PART( PURCHASE_ORDER_NO, '-', 3) = '' or PURCHASE_ORDER_NO is null then '0' else SPLIT_PART( PURCHASE_ORDER_NO, '-', 3) end ::numeric ))::INTEGER+1)::TEXT FROM PURCHASE_ORDER_MASTER),
<!-- (SELECT 'PO-'||TO_CHAR(NOW(),'YYMM')||'-'||LPAD((COALESCE(MAX(SUBSTR(PURCHASE_ORDER_NO,9,11)),'0')::INTEGER+1)::TEXT,3,'0') FROM PURCHASE_ORDER_MASTER), -->
(SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
<!-- 기존: PO-YYMM-순번, 신규: RPSYY-MMDD-순번 (예: RPS25-0926-01) -->
#{PARTNER_OBJID},
#{DELIVERY_REQUEST_DATE},
#{DELIVERY_PLACE},
@@ -772,15 +778,15 @@
#{SALES_MNG_USER_ID}
,#{TITLE}
,#{PURCHASE_DATE}
,#{PROJECT_NO}::NUMERIC
,NULLIF(#{PROJECT_NO}::TEXT, '')::NUMERIC
,#{TYPE }
,#{INSPECT_METHOD }
,#{TOTAL_PRICE_TXT }
,#{VAT_METHOD }
,#{TOTAL_SUPPLY_UNIT_PRICE}
,#{DISCOUNT_PRICE }
,#{TOTAL_PRICE }
,#{NEGO_RATE }
,NULLIF(#{TOTAL_SUPPLY_UNIT_PRICE}::TEXT, '')::NUMERIC
,NULLIF(#{DISCOUNT_PRICE}::TEXT, '')::NUMERIC
,NULLIF(#{TOTAL_PRICE}::TEXT, '')::NUMERIC
,NULLIF(#{NEGO_RATE}::TEXT, '')::NUMERIC
,#{SUPPLY_BUS_NO }
,#{SUPPLY_USER_NAME }
,#{SUPPLY_USER_HP }
@@ -807,7 +813,7 @@
SALES_MNG_USER_ID = #{SALES_MNG_USER_ID}
,TITLE = #{TITLE}
,PURCHASE_DATE = #{PURCHASE_DATE}
,CONTRACT_MGMT_OBJID = #{CONTRACT_MGMT_OBJID}::NUMERIC
,CONTRACT_MGMT_OBJID = NULLIF(#{CONTRACT_MGMT_OBJID}::TEXT, '')::NUMERIC
,TYPE = #{TYPE }
,INSPECT_METHOD = #{INSPECT_METHOD }
,TOTAL_PRICE_TXT = #{TOTAL_PRICE_TXT }
@@ -839,6 +845,64 @@
GROUP BY PARTNER_OBJID
</select>
<!-- 품의서용 공급업체 조회 (VENDOR_PM 사용) -->
<select id="getVendorListByProposalObjid" parameterType="map" resultType="map">
SELECT
VENDOR_PM as PARTNER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN SALES_REQUEST_MASTER SRM ON SRP.SALES_REQUEST_MASTER_OBJID = SRM.OBJID
WHERE SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND VENDOR_PM IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM PURCHASE_ORDER_MASTER AS P WHERE P.SALES_REQUEST_OBJID = SRM.OBJID AND P.PARTNER_OBJID = SRP.VENDOR_PM)
GROUP BY VENDOR_PM
</select>
<!-- 품의서의 공급업체별 품목 조회 (VENDOR_PM 기준) -->
<select id="getProposalPartsByVendor" parameterType="map" resultType="map">
SELECT
SRP.OBJID,
SRP.PART_OBJID,
SRP.QTY,
COALESCE(SRP.PO_QTY, SRP.QTY::NUMERIC, 0) AS ORDER_QTY, -- 발주수량 (PO_QTY 우선, 없으면 QTY)
SRP.UNIT_PRICE AS PARTNER_PRICE,
SRP.TOTAL_PRICE,
SRP.VENDOR_PM AS PARTNER_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.SPEC,
PM.UNIT,
PM.MAKER
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = SRP.PART_OBJID
WHERE
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND SRP.VENDOR_PM = #{PARTNER_OBJID}
</select>
<!-- 구매요청서의 공급업체별 품목 조회 (PARTNER_OBJID 기준) -->
<select id="getSalesRequestPartsByVendor" parameterType="map" resultType="map">
SELECT
SRP.OBJID,
SRP.PART_OBJID,
SRP.QTY,
SRP.UNIT_PRICE AS PARTNER_PRICE,
SRP.TOTAL_PRICE,
SRP.PARTNER_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.SPEC,
PM.UNIT,
PM.MAKER
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = SRP.PART_OBJID
WHERE
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_OBJID}
AND SRP.PARTNER_OBJID = #{PARTNER_OBJID}
</select>
<update id="mergePurchaseOrderMasterPrice" parameterType="map">
INSERT INTO PURCHASE_ORDER_MASTER
(
@@ -887,7 +951,7 @@
(
#{OBJID},
#{PO_CLIENT_ID},
(SELECT 'PO-'||TO_CHAR(NOW(),'YYMM')||'-'||LPAD((COALESCE(MAX(SUBSTR(PURCHASE_ORDER_NO,9,11)),'0')::INTEGER+1)::TEXT,3,'0') FROM PURCHASE_ORDER_MASTER),
(SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(CASE WHEN PURCHASE_ORDER_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY-MMDD')||'-%' THEN SPLIT_PART(PURCHASE_ORDER_NO, '-', 3) ELSE '0' END)::INTEGER, 0) + 1)::TEXT, 2, '0') FROM PURCHASE_ORDER_MASTER),
#{CATEGORY_CD},
#{PRODUCT_GROUP},
#{PRODUCT},
@@ -1223,7 +1287,10 @@
SM.OFFICE_NO AS MY_COMPANY_SUPPLY_OFFICE_NO,
POM.PARTNER_OBJID,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
(
SELECT
SUM(ORDER_QTY::numeric)
@@ -1396,7 +1463,10 @@
SM.OFFICE_NO AS MY_COMPANY_SUPPLY_OFFICE_NO,
POM.PARTNER_OBJID,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
(
SELECT
SUM(ORDER_QTY::numeric)
@@ -1634,7 +1704,10 @@
PM.REVISION,
PM.PART_NAME||'('||PM.MATERIAL||','||PM.SPEC||')/'||PM.PART_NO||(CASE WHEN PM.REVISION IS NULL THEN '' ELSE PM.REVISION END) AS TARGET_TITLE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = pop.UNIT) as UNIT_TITLE,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
POP.ORDER_QTY,
POP.OBJID,
POP.PURCHASE_ORDER_MASTER_OBJID,
@@ -1723,7 +1796,10 @@
PM.REVISION,
PM.PART_NAME||'('||PM.MATERIAL||','||PM.SPEC||')/'||PM.PART_NO||(CASE WHEN PM.REVISION IS NULL THEN '' ELSE PM.REVISION END) AS TARGET_TITLE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = pop.UNIT) as UNIT_TITLE,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME,
CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME,
POP.ORDER_QTY,
POP.REAL_ORDER_QTY,
POP.OBJID AS ORDER_PART_OBJID,
@@ -2805,8 +2881,102 @@ WHERE OBJID = (SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART POP W
WHERE OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
</select>
<select id="purchaseOrderMasterListSum" parameterType="map" resultType="map">
SELECT
SUM(NVL(POM.TOTAL_PRICE_ALL, '0')::NUMERIC) AS TOTAL_PRICE_ALL
,SUM(NVL(POM.TOTAL_SUPPLY_PRICE, '0')::NUMERIC) AS TOTAL_SUPPLY_PRICE
,SUM(NVL(POM.TOTAL_REAL_SUPPLY_PRICE, '0')::NUMERIC) AS TOTAL_REAL_SUPPLY_PRICE
,SUM(NVL(POM.TOTAL_SUPPLY_UNIT_PRICE, '0')::NUMERIC) AS TOTAL_SUPPLY_UNIT_PRICE
FROM
PURCHASE_ORDER_MASTER AS POM
WHERE 1=1
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND S_P.CUSTOMER_OBJID = #{customer_cd}
)
</if>
<if test="customer_project_name !=null and customer_project_name != '' ">
AND CM.CUSTOMER_PROJECT_NAME = #{customer_project_name}
</if>
<if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</if>
<if test="purchase_order_no !=null and purchase_order_no != '' ">
AND POM.PURCHASE_ORDER_NO LIKE '%'||#{purchase_order_no}||'%'
</if>
<if test="type !=null and type != '' ">
AND POM.TYPE = #{type}
</if>
<if test="order_type_cd !=null and order_type_cd != '' ">
AND POM.ORDER_TYPE_CD = #{order_type_cd}
</if>
<if test="delivery_start_date !=null and delivery_start_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{delivery_start_date}, 'YYYY-MM-DD')
</if>
<if test="delivery_end_date !=null and delivery_end_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{delivery_end_date}, 'YYYY-MM-DD')
</if>
<if test="partner_objid !=null and partner_objid != '' ">
AND POM.PARTNER_OBJID = #{partner_objid}
</if>
<if test="sales_mng_user_id !=null and sales_mng_user_id != '' ">
AND POM.SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
<if test="reg_start_date !=null and reg_start_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{reg_start_date}, 'YYYY-MM-DD')
</if>
<if test="reg_end_date !=null and reg_end_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{reg_end_date}, 'YYYY-MM-DD')
</if>
<if test="appr_status !=null and appr_status != '' ">
<choose>
<when test="'cancel'.equals(appr_status)">
AND POM.STATUS = #{appr_status}
</when>
<when test="'complete'.equals(appr_status)">
AND POM.STATUS = 'approvalComplete'
</when>
<when test="'create'.equals(appr_status)">
AND ( POM.STATUS = #{appr_status}
AND NOT EXISTS (SELECT 1 FROM APPROVAL AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
AND NOT EXISTS (SELECT 1 FROM APPROVAL_TARGET AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
OR AT.MASTER_TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
)
</when>
<otherwise>
AND A.APPR_STATUS = #{appr_status}
</otherwise>
</choose>
</if>
<if test="SEARCH_PART_NO !=null and SEARCH_PART_NO != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NO)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NO}))||'%'
)
</if>
<if test="SEARCH_PART_NAME !=null and SEARCH_PART_NAME != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NAME)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NAME}))||'%'
)
</if>
</select>
<select id="purchaseOrderMasterListSum_old" parameterType="map" resultType="map">
SELECT
<!--
SUM(CASE WHEN (SUPPLY_UNIT_VAT_SUM_PRICE IS NULL OR SUPPLY_UNIT_VAT_SUM_PRICE='')
@@ -2969,7 +3139,6 @@ SELECT
</if>
</select>
<select id="purchaseOrderMasterList_new" parameterType="map" resultType="map">
SELECT POM.OBJID
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
@@ -2995,7 +3164,264 @@ SELECT POM.OBJID
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.PARTNER_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,TO_CHAR(POM.REGDATE,'YYYY-MM-DD') AS REGDATE
,POM.TOTAL_PRICE
,POM.TOTAL_PRICE_ALL
,POM.DISCOUNT_PRICE
,POM.DISCOUNT_PRICE_ALL
,POM.TOTAL_SUPPLY_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.TOTAL_REAL_SUPPLY_PRICE
,POM.NEGO_RATE
<!--
,POM.TOTAL_SUPPLY_UNIT_PRICE::NUMERIC - POM.DISCOUNT_PRICE::NUMERIC as TOTAL_SUPPLY_UNIT_PRICE_NEGO
-->
,POM.ORDER_TYPE_CD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME
,POM.UNIT_CODE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = POM.UNIT_CODE) AS UNIT_NAME
,POM.MULTI_YN
,POM.MULTI_MASTER_YN
,POM.MULTI_MASTER_OBJID
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
,POM.MAIL_SEND_YN
,POM.MAIL_SEND_DATE
,POM.STATUS
,A.APPR_STATUS
,CASE WHEN POM.STATUS = 'cancel' then '취소'
ELSE COALESCE(A.APPR_STATUS_NAME,'작성중')
END AS APPR_STATUS_NAME
,A.ROUTE_OBJID
,A.APPROVAL_OBJID
,A.APPR_DATE
,SALES_REQUEST_OBJID
,SRM.REQUEST_MNG_NO AS PROPOSAL_NO
,CODE_NAME(SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME
,CODE_NAME(CM.PRODUCT) AS PRODUCT_NAME
,CODE_NAME(CM.CATEGORY_CD) AS CATEGORY_NAME
-- 발주서 품목 정보 (첫번째 품번/품명 + 외 N건)
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NO)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
) AS PART_NO
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NAME)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
) AS PART_NAME
FROM PURCHASE_ORDER_MASTER AS POM
LEFT OUTER JOIN(
SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
WHEN 'cancel' THEN '취소'
ELSE '' END APPR_STATUS_NAME
,A.OBJID AS APPROVAL_OBJID
,A.TARGET_OBJID
,B.ROUTE_SEQ
,TO_CHAR(B.REGDATE,'YYYY-MM-DD') AS APPR_DATE
FROM APPROVAL A
,( SELECT T1.*
FROM ( SELECT TARGET_OBJID
,MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
FROM ROUTE T
GROUP BY T.TARGET_OBJID
) T
,ROUTE T1
WHERE T.TARGET_OBJID = T1.TARGET_OBJID
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('PURCHASE_ORDER')
) AS A ON ( POM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
<!-- 동시발주건 조건 주석처리(속도)240813
OR EXISTS (SELECT 1 FROM APPROVAL_TARGET AT WHERE AT.APPROVAL_OBJID = A.APPROVAL_OBJID AND AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR)
-->
)
<!--
INNER JOIN PROJECT_MGMT AS CM
-->
LEFT OUTER JOIN PROJECT_MGMT AS CM
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
left outer join SALES_REQUEST_MASTER as SRM
on POM.SALES_REQUEST_OBJID = SRM.OBJID
and SRM.DOC_TYPE = 'PROPOSAL'
<!-- 230907 outer join으로 변경
,PROJECT_MGMT AS CM
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
-->
WHERE 1=1
<!-- for test
-->
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
<if test="Year !=null and Year != '' ">
AND TO_CHAR(POM.REGDATE,'YYYY') = #{Year}
<!--
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND TO_CHAR(S_P.REGDATE,'YYYY') = #{Year}
)
-->
</if>
<if test="customer_cd !=null and customer_cd != '' ">
AND EXISTS (
SELECT 'E' FROM PROJECT_MGMT AS S_P
WHERE POM.CONTRACT_MGMT_OBJID = S_P.OBJID
AND S_P.CUSTOMER_OBJID = #{customer_cd}
)
</if>
<if test="customer_project_name !=null and customer_project_name != '' ">
AND CM.CUSTOMER_PROJECT_NAME = #{customer_project_name}
</if>
<!-- <if test="project_no !=null and project_no != '' ">
AND POM.CONTRACT_MGMT_OBJID = #{project_no}
</if> -->
<if test="project_nos != null and project_nos != ''">
AND POM.CONTRACT_MGMT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="unit_code !=null and unit_code != '' ">
AND POM.UNIT_CODE LIKE '%'||#{unit_code}||'%'
</if>
<if test="purchase_order_no !=null and purchase_order_no != '' ">
AND POM.PURCHASE_ORDER_NO LIKE '%'||#{purchase_order_no}||'%'
</if>
<if test="type !=null and type != '' ">
AND POM.TYPE = #{type}
</if>
<if test="order_type_cd !=null and order_type_cd != '' ">
AND POM.ORDER_TYPE_CD = #{order_type_cd}
</if>
<if test="delivery_start_date !=null and delivery_start_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{delivery_start_date}, 'YYYY-MM-DD')
</if>
<if test="delivery_end_date !=null and delivery_end_date != '' ">
AND TO_DATE(POM.DELIVERY_DATE ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{delivery_end_date}, 'YYYY-MM-DD')
</if>
<if test="partner_objid !=null and partner_objid != '' ">
AND POM.PARTNER_OBJID = #{partner_objid}
</if>
<!--
<if test="sales_mng_user_id !=null and sales_mng_user_id != '' ">
AND POM.SALES_MNG_USER_ID = #{sales_mng_user_id}
</if>
-->
<if test="sales_mng_user_ids != null and sales_mng_user_ids != ''">
AND POM.SALES_MNG_USER_ID IN
<foreach item="value" collection="sales_mng_user_ids.split(',')"
open="(" separator="," close=")">
#{value}
</foreach>
</if>
<if test="reg_start_date !=null and reg_start_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{reg_start_date}, 'YYYY-MM-DD')
</if>
<if test="reg_end_date !=null and reg_end_date != '' ">
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD') ,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{reg_end_date}, 'YYYY-MM-DD')
</if>
<if test="appr_status !=null and appr_status != '' ">
<choose>
<when test="'cancel'.equals(appr_status)">
AND POM.STATUS = #{appr_status}
</when>
<when test="'complete'.equals(appr_status)">
AND POM.STATUS = 'approvalComplete'
</when>
<when test="'create'.equals(appr_status)">
AND ( POM.STATUS = #{appr_status}
AND NOT EXISTS (SELECT 1 FROM APPROVAL AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
AND NOT EXISTS (SELECT 1 FROM APPROVAL_TARGET AT
WHERE AT.TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
OR AT.MASTER_TARGET_OBJID::VARCHAR = POM.OBJID::VARCHAR
)
)
</when>
<otherwise>
AND A.APPR_STATUS = #{appr_status}
</otherwise>
</choose>
</if>
<if test="SEARCH_PART_NO !=null and SEARCH_PART_NO != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NO)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NO}))||'%'
)
</if>
<if test="SEARCH_PART_NAME !=null and SEARCH_PART_NAME != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.PART_NAME)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NAME}))||'%'
)
</if>
<if test="SEARCH_PART_SPEC !=null and SEARCH_PART_SPEC != '' ">
AND EXISTS (SELECT 1
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID
AND TRIM(UPPER(POP.SPEC)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_SPEC}))||'%'
)
</if>
ORDER BY SPLIT_PART( PURCHASE_ORDER_NO, '-', 3)::NUMERIC DESC
</select>
<select id="purchaseOrderMasterList_new_old" parameterType="map" resultType="map">
SELECT POM.OBJID
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(OBJID),',') FROM PURCHASE_ORDER_MASTER S
WHERE POM.OBJID = S.MULTI_MASTER_OBJID) MULTI_OBJIDS
,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR
,TO_CHAR(POM.REGDATE, 'YYYY') AS PO_YEAR
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
,CM.CUSTOMER_PROJECT_NAME
,CM.PROJECT_NO
,POM.PURCHASE_ORDER_NO
,(CASE WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN 'ㅡ'
WHEN POM.MULTI_YN = 'Y' AND POM.MULTI_MASTER_YN != 'Y' THEN ' '
ELSE '' END)||POM.TITLE TITLE
,POM.DELIVERY_PLACE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.DELIVERY_PLACE) AS DELIVERY_PLACE_NAME
,POM.INSPECT_METHOD
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.INSPECT_METHOD) AS INSPECT_METHOD_NAME
,POM.PAYMENT_TERMS
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.PAYMENT_TERMS) AS PAYMENT_TERMS_NAME
,POM.DELIVERY_DATE
,POM.TYPE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.TYPE) AS TYPE_NAME
,POM.PARTNER_OBJID
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
@@ -3776,7 +4202,10 @@ SELECT POM.OBJID
,POM.DELIVERY_DATE
,POM.PARTNER_OBJID
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
@@ -3789,8 +4218,8 @@ SELECT POM.OBJID
,POM.MULTI_YN
,CASE WHEN POM.MULTI_MASTER_YN = 'Y' THEN '' ELSE POM.MULTI_YN END MULTI_YN_MAKED
<!-- ,S1.TOTAL_PO_QTY -->
<!-- ,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY -->
,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY
<!--,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY -->
,S1.CUR_DELIVERY_DATE
,S1.TOTAL_DELIVERY_QTY
<!-- ,(S1.TOTAL_PO_QTY - S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY) AS NON_DELIVERY_QTY -->
@@ -3859,7 +4288,8 @@ SELECT POM.OBJID
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
<!-- ,PROJECT_MGMT AS CM -->
<!-- WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID -->
WHERE POM.STATUS = 'approvalComplete' <!-- A.APPR_STATUS = 'complete' -->/*결재완료*/
WHERE 1=1
<!-- AND POM.STATUS = 'approvalComplete' --> <!-- A.APPR_STATUS = 'complete' -->/*결재완료*/
<!-- AND POM.SALES_STATUS = 'OK' -->
<!-- AND (POM.SALES_STATUS = 'OK' OR POM.TYPE = '0001538' ) -->
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
@@ -4885,7 +5315,10 @@ FROM(
,(SELECT PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NAME
,(SELECT PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NO
,DH.ORDER_QTY
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,DH.INSPECT_DATE
,DH.DEFECT_QTY
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_REASON) AS DEFECT_REASON_NAME
@@ -4989,7 +5422,10 @@ FROM(
,(SELECT PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NAME
,(SELECT PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = DH.PART_OBJID) AS PART_NO
,DH.ORDER_QTY
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,DH.INSPECT_DATE
,DH.DEFECT_QTY
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = DH.DEFECT_REASON) AS DEFECT_REASON_NAME
@@ -5125,7 +5561,10 @@ FROM(
,POP.PART_NO
,POP.PART_NAME
,POP.ORDER_QTY
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,(SELECT (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = AP.PART_OBJID) AS DESIGN_NAME
<!-- ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = AP.OBJID AND DOC_TYPE='DEFECT_ACTION_IMG_01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT -->
@@ -5294,7 +5733,10 @@ FROM(
,POP.PART_NO
,POP.PART_NAME
,POP.SPEC
,(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
,(SELECT (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = AP.PART_OBJID) AS DESIGN_NAME
<!-- ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = DH.OBJID AND DOC_TYPE='DEFECT_ACTION_IMG_01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT -->
@@ -5414,7 +5856,8 @@ FROM(
-->
WHERE 1=1
AND SRM.OBJID = #{SALES_REQUEST_MASTER_OBJID}
AND PARTNER_OBJID = #{PARTNER_OBJID}
AND SRP.VENDOR_PM = #{PARTNER_OBJID}
<!-- AND PARTNER_OBJID = #{PARTNER_OBJID} -->
</select>
<select id="purchaseOrderStatusGoods" parameterType="map" resultType="map">
@@ -5555,4 +5998,13 @@ FROM(
AND P.PART_OBJID = #{objId}
</select>
<!-- 발주서 메일 발송 상태 업데이트 -->
<update id="updateMailSendStatus" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET
MAIL_SEND_YN = #{MAIL_SEND_YN}
,MAIL_SEND_DATE = #{MAIL_SEND_DATE}
WHERE OBJID = #{OBJID}
</update>
</mapper>

View File

@@ -607,12 +607,13 @@
PRODUCT_NAME,
AREA_CD,
CUSTOMER_OBJID,
PAID_TYPE
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),
(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 = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL),
#{REQUEST_CD },
#{PROJECT_NO },
#{RELEASE },
@@ -631,7 +632,8 @@ VALUES
#{PRODUCT_NAME },
#{AREA_CD },
#{CUSTOMER_OBJID },
#{PAID_TYPE }
#{PAID_TYPE },
'PURCHASE_REQUEST'
) ON CONFLICT (OBJID) DO
UPDATE
SET
@@ -667,19 +669,19 @@ VALUES
PM.OBJID,
(SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
) AS PROJECT_MGMT_OBJID,
-- M-BOM 조회용: MBOM_HEADER에서 직접 OBJID 가져오기
(SELECT MH.OBJID FROM MBOM_HEADER MH
WHERE MH.PROJECT_OBJID = COALESCE(PM.OBJID, (SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1))
AND MH.STATUS = 'Y'
ORDER BY MH.REGDATE DESC LIMIT 1
) AS MBOM_HEADER_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,
SM.SUPPLY_NAME AS CUSTOMER_NAME,
SM.OBJID::VARCHAR AS CUSTOMER_OBJID, -- 고객사 OBJID (드롭다운 선택용)
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,
@@ -755,8 +757,8 @@ VALUES
#{SALES_BOM_QTY_OBJID },
#{PART_OBJID },
#{SALES_REQUEST_MASTER_OBJID},
#{QTY },
#{ORG_QTY },
COALESCE(NULLIF(TRIM(#{QTY}::TEXT), '')::NUMERIC, 0),
COALESCE(NULLIF(TRIM(#{ORG_QTY}::TEXT), '')::NUMERIC, 0),
#{PARTNER_OBJID },
#{PARTNER_PRICE },
#{DELIVERY_REQUEST_DATE },
@@ -770,8 +772,8 @@ VALUES
SALES_BOM_QTY_OBJID = #{SALES_BOM_QTY_OBJID },
PART_OBJID = #{PART_OBJID },
SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID},
QTY = #{QTY },
ORG_QTY = #{ORG_QTY },
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 },
@@ -963,46 +965,123 @@ VALUES
SRM.REQUEST_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_CD) AS REQUEST_CD_NAME,
-- 구매요청서 작성 여부 (SALES_REQUEST_PART에 데이터가 있으면 'Y')
(SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) AS HAS_PURCHASE_REQUEST,
-- 문서유형 (PURCHASE_REQUEST: 구매요청서, PROPOSAL: 품의서)
SRM.DOC_TYPE,
-- 추가된 컬럼들
SRM.PURCHASE_TYPE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
SRM.ORDER_TYPE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_TYPE_NAME,
SRM.PRODUCT_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_NAME) AS PRODUCT_NAME_FULL,
SRM.AREA_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.AREA_CD) AS AREA_CD_NAME,
SRM.CUSTOMER_OBJID,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID) AS CUSTOMER_NAME,
SRM.PAID_TYPE,
(CASE WHEN SRM.PAID_TYPE = 'paid' THEN '유상' WHEN SRM.PAID_TYPE = 'free' THEN '무상' ELSE SRM.PAID_TYPE END) AS PAID_TYPE_NAME,
-- 구매요청서 작성 여부 (SALES_REQUEST_PART에 DOC_TYPE이 PURCHASE_REQUEST인 데이터가 있으면 'Y')
(SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END
FROM SALES_REQUEST_PART
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
AND (DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL)) AS HAS_PURCHASE_REQUEST,
-- 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건" 형태로 표시)
(
SELECT
CASE
WHEN COUNT(*) > 1 THEN
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
END
FROM SALES_REQUEST_PART
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
) AS PART_NO,
(
SELECT
CASE
WHEN COUNT(*) > 1 THEN
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
END
FROM SALES_REQUEST_PART
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
) AS PART_NAME,
-- 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,
@@ -1123,6 +1202,8 @@ VALUES
) SRP ON SRP.SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR
AND SRP.SUB_RNUM = 1 -->
WHERE 1=1
-- 구매요청서만 조회 (품의서 제외)
AND (SRM.DOC_TYPE = 'PURCHASE_REQUEST' OR SRM.DOC_TYPE IS NULL)
<if test="Year !=null and Year != '' ">
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
</if>
@@ -1159,26 +1240,40 @@ VALUES
</if>
<if test="SEARCH_PART_NO != null and !''.equals(SEARCH_PART_NO)">
AND 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 '%${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 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 '%${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)">
@@ -3191,6 +3286,7 @@ SELECT
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,
@@ -3264,7 +3360,7 @@ ORDER BY V.PATH2
VENDOR = #{VENDOR_PM},
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
PROPOSAL_DATE = CASE WHEN NULLIF(TRIM(#{PROPOSAL_DATE}::TEXT), '') IS NOT NULL THEN #{PROPOSAL_DATE}::DATE ELSE NULL END,
-- PROPOSAL_DATE는 품의서 생성 시에만 자동 설정 (여기서는 업데이트하지 않음)
EDITER = #{EDITER},
EDIT_DATE = NOW()
WHERE OBJID::VARCHAR = #{OBJID}
@@ -3279,30 +3375,38 @@ ORDER BY V.PATH2
VENDOR_PM = #{VENDOR_PM},
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
PROPOSAL_DATE = CASE WHEN NULLIF(TRIM(#{PROPOSAL_DATE}::TEXT), '') IS NOT NULL THEN #{PROPOSAL_DATE}::DATE ELSE NULL END,
-- PROPOSAL_DATE는 품의서 생성 시에만 자동 설정 (여기서는 업데이트하지 않음)
WRITER = #{EDITER}
WHERE OBJID::VARCHAR = #{OBJID}
</update>
<!-- M-BOM에서 구매리스트 생성 시 해당 프로젝트로 이미 생성된 구매요청서가 있는지 확인 -->
<!-- 프로젝트로 구매요청서 조회 (수동 작성 포함) -->
<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
LIMIT 1
</select>
<!-- 다음 요청번호 생성 (R + YYYYMMDD + - + 3자리 순번) -->
<!-- 다음 요청번호 생성 (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 = 'PURCHASE_REQUEST' 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,13)),'0')::INTEGER+1)::TEXT,3,'0')
FROM SALES_REQUEST_MASTER
WHERE DOC_TYPE = 'PROPOSAL'
</select>
<!-- M-BOM에서 구매리스트 생성 - SALES_REQUEST_MASTER만 생성 (SALES_REQUEST_PART는 생성 안 함) -->
@@ -3311,23 +3415,269 @@ ORDER BY V.PATH2
OBJID,
REQUEST_MNG_NO,
PROJECT_NO,
MBOM_HEADER_OBJID,
REQUEST_USER_ID,
STATUS,
WRITER,
REGDATE
REGDATE,
DOC_TYPE
) VALUES (
#{OBJID},
#{REQUEST_MNG_NO},
#{PROJECT_NO},
#{MBOM_HEADER_OBJID},
#{REQUEST_USER_ID},
#{STATUS},
#{WRITER},
NOW()
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 SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = MD.VENDOR) AS VENDOR_NAME,
MD.NET_QTY,
MD.PO_QTY,
'MBOM' AS DATA_SOURCE
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 기반 (단가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
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>
<!-- 품의서 대상 품목 조회 - 수동 작성 (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 SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
SRP.NET_QTY,
SRP.PO_QTY,
'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}
-- 단가가 입력되어 있고
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>
<!-- 품의서 대상 제외 품목 조회 - 수동 작성 (단가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
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>
<!-- 품의서 생성 (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(),
'PROPOSAL'
)
</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 생성 (수동 작성 품목 복사) -->
<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>
<!-- 품의서 생성 후 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>
<!-- 품의서 생성 후 PROPOSAL_DATE 업데이트 (M-BOM - MBOM_DETAIL) -->
<update id="updateProposalDateForMBomParts" parameterType="map">
UPDATE MBOM_DETAIL
SET PROPOSAL_DATE = NOW()
WHERE OBJID IN
<foreach collection="PART_OBJIDS" item="objid" open="(" separator="," close=")">
#{objid}
</foreach>
</update>
<!-- 품의서 목록 조회 -->
<select id="getProposalMngGridList" parameterType="map" resultType="map">
SELECT
@@ -3339,18 +3689,25 @@ ORDER BY V.PATH2
(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,
SRM.ORDER_TYPE,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_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,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
-- 품번/품명 ("외 N건" 형태로 표시)
CODE_NAME(SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
-- 품번/품명 ("외 N건" 형태로 표시) - 품의서는 항상 SALES_REQUEST_PART에 데이터가 있음
(
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) || '건'
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
(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))
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
@@ -3359,9 +3716,9 @@ ORDER BY V.PATH2
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) || '건'
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
(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))
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
@@ -3371,25 +3728,31 @@ ORDER BY V.PATH2
SELECT
CASE
WHEN COUNT(DISTINCT POM.PARTNER_OBJID) > 1 THEN
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)::NUMERIC) || ' 외 ' || (COUNT(DISTINCT POM.PARTNER_OBJID) - 1) || '건'
COALESCE((SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)::NUMERIC), '') || ' 외 ' || (COUNT(DISTINCT POM.PARTNER_OBJID) - 1)::TEXT || '건'
ELSE
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)::NUMERIC)
COALESCE((SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)::NUMERIC), '')
END
FROM PURCHASE_ORDER_MASTER POM
WHERE POM.SALES_REQUEST_OBJID = SRM.OBJID
) AS SUPPLIER_NAME,
-- 총액
(SELECT SUM(COALESCE(TOTAL_PRICE, 0)) FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS TOTAL_AMOUNT,
(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,
-- (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 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 '미결재'
WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료'
WHEN SRM.STATUS = 'reject' THEN '반려'
WHEN SRM.STATUS = 'create' THEN '작성중'
-- WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료'
-- WHEN SRM.STATUS = 'reject' THEN '반려'
ELSE ''
END AS STATUS_TITLE,
SRM.WRITER,
@@ -3403,6 +3766,7 @@ ORDER BY V.PATH2
LEFT OUTER JOIN (
SELECT
B.OBJID AS ROUTE_OBJID,
B.STATUS AS ROUTE_STATUS,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
@@ -3437,7 +3801,7 @@ ORDER BY V.PATH2
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
WHERE 1=1
AND SRM.STATUS IN ('create', 'approvalRequest', 'approvalComplete', 'reject')
AND SRM.DOC_TYPE = 'PROPOSAL'
<if test="SEARCH_PROPOSAL_NO != null and !''.equals(SEARCH_PROPOSAL_NO)">
AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%'
</if>
@@ -3447,7 +3811,14 @@ ORDER BY V.PATH2
</if>
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
AND SRM.STATUS = #{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)">
@@ -3468,6 +3839,44 @@ ORDER BY V.PATH2
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 SM.SUPPLY_NAME
FROM PROJECT_MGMT PM
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
LEFT JOIN SUPPLY_MNG SM ON SM.OBJID = CM.CUSTOMER_OBJID::NUMERIC
WHERE PM.OBJID::VARCHAR = SRM.PROJECT_NO),
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID)
) 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,
@@ -3477,7 +3886,10 @@ ORDER BY V.PATH2
SRM.AREA_CD,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.AREA_CD) AS AREA_CD_NAME,
SRM.CUSTOMER_OBJID,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID) AS CUSTOMER_NAME,
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,
@@ -3490,13 +3902,72 @@ ORDER BY V.PATH2
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,
SRM.REMARK
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 SUPPLY_NAME FROM ADMIN_SUPPLY_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>
</mapper>