구매리스트 가공 추가, 품의서 생성도 소재, 가공 분리
This commit is contained in:
@@ -3114,7 +3114,11 @@ UPDATE SET
|
||||
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,
|
||||
COALESCE(SRP.PROCESSING_UNIT_PRICE, 0) AS PROCESSING_UNIT_PRICE,
|
||||
COALESCE(SRP.PROCESSING_TOTAL_PRICE, 0) AS PROCESSING_TOTAL_PRICE,
|
||||
COALESCE(SRP.GRAND_TOTAL_PRICE, 0) AS GRAND_TOTAL_PRICE,
|
||||
SRP.PROPOSAL_DATE,
|
||||
SRP.PROCESSING_PROPOSAL_DATE,
|
||||
'SRP' AS DATA_SOURCE -- 데이터 소스 구분용
|
||||
FROM
|
||||
SALES_REQUEST_PART SRP
|
||||
@@ -3173,7 +3177,11 @@ WITH RECURSIVE VIEW_BOM(
|
||||
USE_YN,
|
||||
NET_QTY,
|
||||
PO_QTY,
|
||||
PROPOSAL_DATE
|
||||
PROPOSAL_DATE,
|
||||
PROCESSING_PROPOSAL_DATE,
|
||||
PROCESSING_UNIT_PRICE,
|
||||
PROCESSING_TOTAL_PRICE,
|
||||
GRAND_TOTAL_PRICE
|
||||
) AS (
|
||||
SELECT
|
||||
A.MBOM_HEADER_OBJID,
|
||||
@@ -3221,7 +3229,11 @@ WITH RECURSIVE VIEW_BOM(
|
||||
COALESCE(A.USE_YN, 'Y'),
|
||||
COALESCE(A.NET_QTY, 0),
|
||||
COALESCE(A.PO_QTY, 0),
|
||||
A.PROPOSAL_DATE
|
||||
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
|
||||
@@ -3281,7 +3293,11 @@ WITH RECURSIVE VIEW_BOM(
|
||||
COALESCE(B.USE_YN, 'Y'),
|
||||
COALESCE(B.NET_QTY, 0),
|
||||
COALESCE(B.PO_QTY, 0),
|
||||
B.PROPOSAL_DATE
|
||||
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
|
||||
@@ -3369,6 +3385,10 @@ SELECT
|
||||
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
|
||||
@@ -3400,6 +3420,9 @@ ORDER BY V.PATH2
|
||||
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}
|
||||
@@ -3415,6 +3438,9 @@ ORDER BY V.PATH2
|
||||
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>
|
||||
@@ -3477,7 +3503,7 @@ ORDER BY V.PATH2
|
||||
|
||||
<!-- ==================== 품의서 관리 ==================== -->
|
||||
|
||||
<!-- 품의서 대상 품목 조회 - M-BOM 기반 (MBOM_DETAIL에서 조회) -->
|
||||
<!-- 품의서 대상 품목 조회 - M-BOM 기반 (MBOM_DETAIL에서 조회) - 소재단가 기준 -->
|
||||
<select id="getProposalTargetPartsFromMBom" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
SELECT
|
||||
MD.OBJID,
|
||||
@@ -3488,27 +3514,62 @@ ORDER BY V.PATH2
|
||||
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,
|
||||
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = MD.VENDOR) AS VENDOR_NAME,
|
||||
MD.NET_QTY,
|
||||
MD.PO_QTY,
|
||||
'MBOM' AS DATA_SOURCE
|
||||
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 기반 (단가O, 공급업체X) -->
|
||||
<!-- 품의서 대상 품목 조회 - 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,
|
||||
@@ -3518,23 +3579,51 @@ ORDER BY V.PATH2
|
||||
MD.QTY,
|
||||
MD.UNIT_PRICE,
|
||||
MD.TOTAL_PRICE,
|
||||
'MBOM' AS DATA_SOURCE
|
||||
'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>
|
||||
|
||||
<!-- 품의서 대상 품목 조회 - 수동 작성 (SALES_REQUEST_PART에서 조회) -->
|
||||
<!-- 품의서 대상 제외 품목 조회 - 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,
|
||||
@@ -3545,27 +3634,62 @@ ORDER BY V.PATH2
|
||||
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,
|
||||
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
|
||||
SRP.NET_QTY,
|
||||
SRP.PO_QTY,
|
||||
'MANUAL' AS DATA_SOURCE
|
||||
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>
|
||||
|
||||
<!-- 품의서 대상 제외 품목 조회 - 수동 작성 (단가O, 공급업체X) -->
|
||||
<!-- 품의서 대상 품목 조회 - 수동 작성 (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,
|
||||
@@ -3575,22 +3699,50 @@ ORDER BY V.PATH2
|
||||
SRP.QTY,
|
||||
SRP.UNIT_PRICE,
|
||||
SRP.TOTAL_PRICE,
|
||||
'MANUAL' AS DATA_SOURCE
|
||||
'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 (
|
||||
@@ -3628,7 +3780,7 @@ ORDER BY V.PATH2
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 품의서용 SALES_REQUEST_PART 생성 (M-BOM 기반 품목 복사) -->
|
||||
<!-- 품의서용 SALES_REQUEST_PART 생성 (M-BOM 기반 품목 복사) - 소재 -->
|
||||
<insert id="insertProposalPartFromMBom" parameterType="map">
|
||||
INSERT INTO SALES_REQUEST_PART (
|
||||
OBJID,
|
||||
@@ -3663,7 +3815,42 @@ ORDER BY V.PATH2
|
||||
WHERE OBJID = #{SOURCE_OBJID}
|
||||
</insert>
|
||||
|
||||
<!-- 품의서용 SALES_REQUEST_PART 생성 (수동 작성 품목 복사) -->
|
||||
<!-- 품의서용 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,
|
||||
@@ -3698,7 +3885,42 @@ ORDER BY V.PATH2
|
||||
WHERE OBJID = #{SOURCE_OBJID}
|
||||
</insert>
|
||||
|
||||
<!-- 품의서 생성 후 PROPOSAL_DATE 업데이트 (수동 작성 - SALES_REQUEST_PART) -->
|
||||
<!-- 품의서용 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()
|
||||
@@ -3708,7 +3930,17 @@ ORDER BY V.PATH2
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<!-- 품의서 생성 후 PROPOSAL_DATE 업데이트 (M-BOM - MBOM_DETAIL) -->
|
||||
<!-- 품의서 생성 후 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) - 소재 -->
|
||||
<update id="updateProposalDateForMBomParts" parameterType="map">
|
||||
UPDATE MBOM_DETAIL
|
||||
SET PROPOSAL_DATE = NOW()
|
||||
@@ -3718,6 +3950,16 @@ ORDER BY V.PATH2
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<!-- 품의서 생성 후 PROCESSING_PROPOSAL_DATE 업데이트 (M-BOM - MBOM_DETAIL) - 가공 -->
|
||||
<update id="updateProcessingProposalDateForMBomParts" parameterType="map">
|
||||
UPDATE MBOM_DETAIL
|
||||
SET PROCESSING_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
|
||||
|
||||
@@ -1428,25 +1428,37 @@ public class SalesMngController {
|
||||
|
||||
String salesRequestMasterObjid = CommonUtils.checkNull(paramMap.get("SALES_REQUEST_MASTER_OBJID"));
|
||||
|
||||
// Service의 공통 메서드 사용
|
||||
// Service의 공통 메서드 사용 (소재/가공 분리)
|
||||
Map partsInfo = salesMngService.getProposalTargetPartsWithInfo(sqlSession, salesRequestMasterObjid);
|
||||
List<Map> targetParts = (List<Map>)partsInfo.get("targetParts");
|
||||
List<Map> excludedParts = (List<Map>)partsInfo.get("excludedParts"); // 공급업체 미입력 품목
|
||||
|
||||
if(targetParts != null && !targetParts.isEmpty()) {
|
||||
// 소재/가공 각각 분리된 데이터
|
||||
List<Map> materialTargetParts = (List<Map>)partsInfo.get("materialTargetParts");
|
||||
List<Map> processingTargetParts = (List<Map>)partsInfo.get("processingTargetParts");
|
||||
List<Map> materialExcludedParts = (List<Map>)partsInfo.get("materialExcludedParts");
|
||||
List<Map> processingExcludedParts = (List<Map>)partsInfo.get("processingExcludedParts");
|
||||
|
||||
// 기존 호환성을 위한 통합 데이터
|
||||
List<Map> targetParts = (List<Map>)partsInfo.get("targetParts");
|
||||
List<Map> excludedParts = (List<Map>)partsInfo.get("excludedParts");
|
||||
|
||||
boolean hasMaterialParts = materialTargetParts != null && !materialTargetParts.isEmpty();
|
||||
boolean hasProcessingParts = processingTargetParts != null && !processingTargetParts.isEmpty();
|
||||
|
||||
if(hasMaterialParts || hasProcessingParts) {
|
||||
resultMap.put("resultFlag", "S");
|
||||
// 소재/가공 분리 데이터
|
||||
resultMap.put("materialTargetParts", materialTargetParts);
|
||||
resultMap.put("processingTargetParts", processingTargetParts);
|
||||
resultMap.put("materialExcludedParts", materialExcludedParts);
|
||||
resultMap.put("processingExcludedParts", processingExcludedParts);
|
||||
// 기존 호환성
|
||||
resultMap.put("data", targetParts);
|
||||
resultMap.put("excludedParts", excludedParts); // 공급업체 미입력 품목도 함께 반환
|
||||
resultMap.put("excludedParts", excludedParts);
|
||||
} else {
|
||||
// 대상 품목이 없는 경우, 공급업체 미입력 품목이 있는지 확인
|
||||
if(excludedParts != null && !excludedParts.isEmpty()) {
|
||||
resultMap.put("resultFlag", "F");
|
||||
resultMap.put("message", "품의서 생성 대상 품목이 없습니다.\n(단가와 공급업체가 모두 입력된 품목만 가능)");
|
||||
resultMap.put("excludedParts", excludedParts);
|
||||
} else {
|
||||
resultMap.put("resultFlag", "F");
|
||||
resultMap.put("message", "품의서 생성 대상 품목이 없습니다.\n(단가가 입력되고 품의서가 생성되지 않은 품목만 가능)");
|
||||
}
|
||||
resultMap.put("resultFlag", "F");
|
||||
resultMap.put("message", "품의서 생성 대상 품목이 없습니다.\n(소재단가+공급업체 또는 가공단가+가공업체가 입력되고 품의서가 생성되지 않은 품목만 가능)");
|
||||
resultMap.put("materialExcludedParts", materialExcludedParts);
|
||||
resultMap.put("processingExcludedParts", processingExcludedParts);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
@@ -1949,10 +1949,10 @@ public class SalesMngService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 품의서 대상 품목 조회 (공통 메서드)
|
||||
* 품의서 대상 품목 조회 (소재/가공 각각 분리)
|
||||
* @param sqlSession
|
||||
* @param salesRequestMasterObjid
|
||||
* @return Map { targetParts: List<Map>, mbomHeaderObjid: String, purchaseRequestInfo: Map }
|
||||
* @return Map { materialTargetParts, processingTargetParts, materialExcludedParts, processingExcludedParts, mbomHeaderObjid, purchaseRequestInfo }
|
||||
* @throws Exception
|
||||
*/
|
||||
public Map getProposalTargetPartsWithInfo(SqlSession sqlSession, String salesRequestMasterObjid) throws Exception {
|
||||
@@ -1967,28 +1967,56 @@ public class SalesMngService {
|
||||
|
||||
String mbomHeaderObjid = CommonUtils.checkNull(purchaseRequestInfo.get("MBOM_HEADER_OBJID"));
|
||||
|
||||
// 2. 품의서 대상 품목 조회 (M-BOM 기반 여부에 따라 분기)
|
||||
List<Map> targetParts = null;
|
||||
List<Map> excludedParts = null; // 공급업체 미입력으로 제외된 품목
|
||||
// 2. 품의서 대상 품목 조회 (소재/가공 각각)
|
||||
List<Map> materialTargetParts = null; // 소재 품의서 대상
|
||||
List<Map> processingTargetParts = null; // 가공 품의서 대상
|
||||
List<Map> materialExcludedParts = null; // 소재 제외 (공급업체 미입력)
|
||||
List<Map> processingExcludedParts = null; // 가공 제외 (가공업체 미입력)
|
||||
|
||||
if(!mbomHeaderObjid.isEmpty()) {
|
||||
// M-BOM 기반 -> MBOM_DETAIL에서 조회
|
||||
Map mbomParam = new HashMap();
|
||||
mbomParam.put("MBOM_HEADER_OBJID", mbomHeaderObjid);
|
||||
targetParts = sqlSession.selectList("salesMng.getProposalTargetPartsFromMBom", mbomParam);
|
||||
excludedParts = sqlSession.selectList("salesMng.getProposalExcludedPartsFromMBom", mbomParam);
|
||||
|
||||
// 소재 품의서 대상
|
||||
materialTargetParts = sqlSession.selectList("salesMng.getProposalTargetPartsFromMBom", mbomParam);
|
||||
materialExcludedParts = sqlSession.selectList("salesMng.getProposalExcludedPartsFromMBom", mbomParam);
|
||||
|
||||
// 가공 품의서 대상
|
||||
processingTargetParts = sqlSession.selectList("salesMng.getProposalTargetPartsFromMBomProcessing", mbomParam);
|
||||
processingExcludedParts = sqlSession.selectList("salesMng.getProposalExcludedPartsFromMBomProcessing", mbomParam);
|
||||
} else {
|
||||
// 수동 작성 -> SALES_REQUEST_PART에서 조회
|
||||
targetParts = sqlSession.selectList("salesMng.getProposalTargetPartsFromManual", paramMap);
|
||||
excludedParts = sqlSession.selectList("salesMng.getProposalExcludedPartsFromManual", paramMap);
|
||||
// 소재 품의서 대상
|
||||
materialTargetParts = sqlSession.selectList("salesMng.getProposalTargetPartsFromManual", paramMap);
|
||||
materialExcludedParts = sqlSession.selectList("salesMng.getProposalExcludedPartsFromManual", paramMap);
|
||||
|
||||
// 가공 품의서 대상
|
||||
processingTargetParts = sqlSession.selectList("salesMng.getProposalTargetPartsFromManualProcessing", paramMap);
|
||||
processingExcludedParts = sqlSession.selectList("salesMng.getProposalExcludedPartsFromManualProcessing", paramMap);
|
||||
}
|
||||
|
||||
targetParts = CommonUtils.keyChangeUpperList(targetParts);
|
||||
excludedParts = CommonUtils.keyChangeUpperList(excludedParts);
|
||||
materialTargetParts = CommonUtils.keyChangeUpperList(materialTargetParts);
|
||||
processingTargetParts = CommonUtils.keyChangeUpperList(processingTargetParts);
|
||||
materialExcludedParts = CommonUtils.keyChangeUpperList(materialExcludedParts);
|
||||
processingExcludedParts = CommonUtils.keyChangeUpperList(processingExcludedParts);
|
||||
|
||||
// 3. 결과 반환
|
||||
// 3. 기존 호환성을 위해 targetParts, excludedParts도 유지 (소재+가공 합침)
|
||||
List<Map> targetParts = new ArrayList<Map>();
|
||||
targetParts.addAll(materialTargetParts);
|
||||
targetParts.addAll(processingTargetParts);
|
||||
|
||||
List<Map> excludedParts = new ArrayList<Map>();
|
||||
excludedParts.addAll(materialExcludedParts);
|
||||
excludedParts.addAll(processingExcludedParts);
|
||||
|
||||
// 4. 결과 반환
|
||||
result.put("targetParts", targetParts);
|
||||
result.put("excludedParts", excludedParts); // 공급업체 미입력 품목
|
||||
result.put("excludedParts", excludedParts);
|
||||
result.put("materialTargetParts", materialTargetParts);
|
||||
result.put("processingTargetParts", processingTargetParts);
|
||||
result.put("materialExcludedParts", materialExcludedParts);
|
||||
result.put("processingExcludedParts", processingExcludedParts);
|
||||
result.put("mbomHeaderObjid", mbomHeaderObjid);
|
||||
result.put("purchaseRequestInfo", purchaseRequestInfo);
|
||||
|
||||
@@ -1996,7 +2024,7 @@ public class SalesMngService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 품의서 생성
|
||||
* 품의서 생성 (소재/가공 각각 별도 품의서 생성)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
@@ -2021,78 +2049,49 @@ public class SalesMngService {
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 1. 품의서 대상 품목 조회 (공통 메서드 사용)
|
||||
// 1. 품의서 대상 품목 조회 (소재/가공 분리)
|
||||
Map partsInfo = getProposalTargetPartsWithInfo(sqlSession, salesRequestMasterObjid);
|
||||
List<Map> targetParts = (List<Map>)partsInfo.get("targetParts");
|
||||
List<Map> materialTargetParts = (List<Map>)partsInfo.get("materialTargetParts");
|
||||
List<Map> processingTargetParts = (List<Map>)partsInfo.get("processingTargetParts");
|
||||
String mbomHeaderObjid = (String)partsInfo.get("mbomHeaderObjid");
|
||||
Map purchaseRequestInfo = (Map)partsInfo.get("purchaseRequestInfo");
|
||||
|
||||
if(targetParts == null || targetParts.isEmpty()) {
|
||||
boolean hasMaterialParts = materialTargetParts != null && !materialTargetParts.isEmpty();
|
||||
boolean hasProcessingParts = processingTargetParts != null && !processingTargetParts.isEmpty();
|
||||
|
||||
if(!hasMaterialParts && !hasProcessingParts) {
|
||||
resultMap.put("resultFlag", "F");
|
||||
resultMap.put("message", "품의서 생성 대상 품목이 없습니다. (단가가 입력되고 품의서가 생성되지 않은 품목만 가능)");
|
||||
resultMap.put("message", "품의서 생성 대상 품목이 없습니다.\n(소재단가+공급업체 또는 가공단가+가공업체가 입력되고 품의서가 생성되지 않은 품목만 가능)");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 2. 품의서 번호 생성
|
||||
String proposalNo = (String)sqlSession.selectOne("salesMng.getNextProposalNo");
|
||||
List<String> createdProposalNos = new ArrayList<String>();
|
||||
|
||||
// 3. 품의서 마스터 생성
|
||||
Map proposalMaster = new HashMap();
|
||||
proposalMaster.put("OBJID", CommonUtils.createObjId());
|
||||
proposalMaster.put("REQUEST_MNG_NO", proposalNo);
|
||||
proposalMaster.put("PROJECT_NO", purchaseRequestInfo.get("PROJECT_NO"));
|
||||
proposalMaster.put("MBOM_HEADER_OBJID", purchaseRequestInfo.get("MBOM_HEADER_OBJID"));
|
||||
proposalMaster.put("PURCHASE_TYPE", purchaseRequestInfo.get("PURCHASE_TYPE"));
|
||||
proposalMaster.put("ORDER_TYPE", purchaseRequestInfo.get("ORDER_TYPE"));
|
||||
proposalMaster.put("PRODUCT_NAME", purchaseRequestInfo.get("PRODUCT_NAME"));
|
||||
proposalMaster.put("AREA_CD", purchaseRequestInfo.get("AREA_CD"));
|
||||
proposalMaster.put("CUSTOMER_OBJID", purchaseRequestInfo.get("CUSTOMER_OBJID"));
|
||||
proposalMaster.put("PAID_TYPE", purchaseRequestInfo.get("PAID_TYPE"));
|
||||
proposalMaster.put("REQUEST_USER_ID", userId);
|
||||
proposalMaster.put("WRITER", userId);
|
||||
|
||||
sqlSession.insert("salesMng.insertProposal", proposalMaster);
|
||||
|
||||
// 4. 품의서용 SALES_REQUEST_PART 생성 (대상 품목 복사)
|
||||
String proposalMasterObjid = (String)proposalMaster.get("OBJID");
|
||||
List<String> sourceObjids = new ArrayList<String>();
|
||||
|
||||
for(Map part : targetParts) {
|
||||
String sourceObjid = CommonUtils.checkNull(part.get("OBJID"));
|
||||
sourceObjids.add(sourceObjid);
|
||||
|
||||
Map partParam = new HashMap();
|
||||
partParam.put("NEW_OBJID", CommonUtils.createObjId());
|
||||
partParam.put("PROPOSAL_MASTER_OBJID", proposalMasterObjid);
|
||||
partParam.put("SOURCE_OBJID", sourceObjid);
|
||||
partParam.put("WRITER", userId);
|
||||
|
||||
// M-BOM 기반 여부에 따라 INSERT 쿼리 분기
|
||||
if(!mbomHeaderObjid.isEmpty()) {
|
||||
// M-BOM 기반 -> MBOM_DETAIL에서 복사
|
||||
sqlSession.insert("salesMng.insertProposalPartFromMBom", partParam);
|
||||
} else {
|
||||
// 수동 작성 -> SALES_REQUEST_PART에서 복사
|
||||
sqlSession.insert("salesMng.insertProposalPartFromManual", partParam);
|
||||
}
|
||||
// 2. 소재 품의서 생성
|
||||
if(hasMaterialParts) {
|
||||
String materialProposalNo = createSingleProposal(sqlSession, userId, purchaseRequestInfo,
|
||||
materialTargetParts, mbomHeaderObjid, "MATERIAL");
|
||||
createdProposalNos.add("소재: " + materialProposalNo);
|
||||
}
|
||||
|
||||
// 5. 원본 데이터의 PROPOSAL_DATE 업데이트
|
||||
Map updateParam = new HashMap();
|
||||
updateParam.put("PART_OBJIDS", sourceObjids);
|
||||
// 3. 가공 품의서 생성
|
||||
if(hasProcessingParts) {
|
||||
String processingProposalNo = createSingleProposal(sqlSession, userId, purchaseRequestInfo,
|
||||
processingTargetParts, mbomHeaderObjid, "PROCESSING");
|
||||
createdProposalNos.add("가공: " + processingProposalNo);
|
||||
}
|
||||
|
||||
// M-BOM 기반 여부에 따라 업데이트 쿼리 분기
|
||||
String updateQuery = mbomHeaderObjid.isEmpty()
|
||||
? "salesMng.updateProposalDateForManualParts" // 수동 작성
|
||||
: "salesMng.updateProposalDateForMBomParts"; // M-BOM 기반
|
||||
|
||||
sqlSession.update(updateQuery, updateParam);
|
||||
sqlSession.commit();
|
||||
|
||||
// Java 7 호환: String.join 대신 StringBuilder 사용
|
||||
StringBuilder messageBuilder = new StringBuilder("품의서가 생성되었습니다.");
|
||||
for(String proposalNo : createdProposalNos) {
|
||||
messageBuilder.append("\n").append(proposalNo);
|
||||
}
|
||||
|
||||
resultMap.put("resultFlag", "S");
|
||||
resultMap.put("message", "품의서가 생성되었습니다. (품의서 번호: " + proposalNo + ")");
|
||||
resultMap.put("PROPOSAL_OBJID", proposalMaster.get("OBJID"));
|
||||
resultMap.put("PROPOSAL_NO", proposalNo);
|
||||
resultMap.put("message", messageBuilder.toString());
|
||||
resultMap.put("createdCount", createdProposalNos.size());
|
||||
|
||||
} catch(Exception e) {
|
||||
if(sqlSession != null) sqlSession.rollback();
|
||||
@@ -2105,4 +2104,94 @@ public class SalesMngService {
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 단일 품의서 생성 (소재 또는 가공)
|
||||
* @param sqlSession
|
||||
* @param userId
|
||||
* @param purchaseRequestInfo
|
||||
* @param targetParts
|
||||
* @param mbomHeaderObjid
|
||||
* @param proposalType MATERIAL(소재) 또는 PROCESSING(가공)
|
||||
* @return 생성된 품의서 번호
|
||||
*/
|
||||
private String createSingleProposal(SqlSession sqlSession, String userId, Map purchaseRequestInfo,
|
||||
List<Map> targetParts, String mbomHeaderObjid, String proposalType) throws Exception {
|
||||
|
||||
// 1. 품의서 번호 생성
|
||||
String proposalNo = (String)sqlSession.selectOne("salesMng.getNextProposalNo");
|
||||
|
||||
// 2. 품의서 마스터 생성
|
||||
Map proposalMaster = new HashMap();
|
||||
proposalMaster.put("OBJID", CommonUtils.createObjId());
|
||||
proposalMaster.put("REQUEST_MNG_NO", proposalNo);
|
||||
proposalMaster.put("PROJECT_NO", purchaseRequestInfo.get("PROJECT_NO"));
|
||||
proposalMaster.put("MBOM_HEADER_OBJID", purchaseRequestInfo.get("MBOM_HEADER_OBJID"));
|
||||
proposalMaster.put("PURCHASE_TYPE", purchaseRequestInfo.get("PURCHASE_TYPE"));
|
||||
proposalMaster.put("ORDER_TYPE", purchaseRequestInfo.get("ORDER_TYPE"));
|
||||
proposalMaster.put("PRODUCT_NAME", purchaseRequestInfo.get("PRODUCT_NAME"));
|
||||
proposalMaster.put("AREA_CD", purchaseRequestInfo.get("AREA_CD"));
|
||||
proposalMaster.put("CUSTOMER_OBJID", purchaseRequestInfo.get("CUSTOMER_OBJID"));
|
||||
proposalMaster.put("PAID_TYPE", purchaseRequestInfo.get("PAID_TYPE"));
|
||||
proposalMaster.put("REQUEST_USER_ID", userId);
|
||||
proposalMaster.put("WRITER", userId);
|
||||
proposalMaster.put("PROPOSAL_TYPE", proposalType); // 소재/가공 구분
|
||||
|
||||
sqlSession.insert("salesMng.insertProposal", proposalMaster);
|
||||
|
||||
// 3. 품의서용 SALES_REQUEST_PART 생성 (대상 품목 복사)
|
||||
String proposalMasterObjid = (String)proposalMaster.get("OBJID");
|
||||
List<String> sourceObjids = new ArrayList<String>();
|
||||
|
||||
for(Map part : targetParts) {
|
||||
String sourceObjid = CommonUtils.checkNull(part.get("OBJID"));
|
||||
sourceObjids.add(sourceObjid);
|
||||
|
||||
Map partParam = new HashMap();
|
||||
partParam.put("NEW_OBJID", CommonUtils.createObjId());
|
||||
partParam.put("PROPOSAL_MASTER_OBJID", proposalMasterObjid);
|
||||
partParam.put("SOURCE_OBJID", sourceObjid);
|
||||
partParam.put("WRITER", userId);
|
||||
partParam.put("PROPOSAL_TYPE", proposalType);
|
||||
|
||||
// M-BOM 기반 여부 + 소재/가공 구분에 따라 INSERT 쿼리 분기
|
||||
if(!mbomHeaderObjid.isEmpty()) {
|
||||
// M-BOM 기반
|
||||
if("PROCESSING".equals(proposalType)) {
|
||||
sqlSession.insert("salesMng.insertProposalPartFromMBomProcessing", partParam);
|
||||
} else {
|
||||
sqlSession.insert("salesMng.insertProposalPartFromMBom", partParam);
|
||||
}
|
||||
} else {
|
||||
// 수동 작성
|
||||
if("PROCESSING".equals(proposalType)) {
|
||||
sqlSession.insert("salesMng.insertProposalPartFromManualProcessing", partParam);
|
||||
} else {
|
||||
sqlSession.insert("salesMng.insertProposalPartFromManual", partParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 4. 원본 데이터의 PROPOSAL_DATE 업데이트
|
||||
Map updateParam = new HashMap();
|
||||
updateParam.put("PART_OBJIDS", sourceObjids);
|
||||
|
||||
// M-BOM 기반 여부 + 소재/가공 구분에 따라 업데이트 쿼리 분기
|
||||
String updateQuery;
|
||||
if(mbomHeaderObjid.isEmpty()) {
|
||||
// 수동 작성
|
||||
updateQuery = "PROCESSING".equals(proposalType)
|
||||
? "salesMng.updateProcessingProposalDateForManualParts"
|
||||
: "salesMng.updateProposalDateForManualParts";
|
||||
} else {
|
||||
// M-BOM 기반
|
||||
updateQuery = "PROCESSING".equals(proposalType)
|
||||
? "salesMng.updateProcessingProposalDateForMBomParts"
|
||||
: "salesMng.updateProposalDateForMBomParts";
|
||||
}
|
||||
|
||||
sqlSession.update(updateQuery, updateParam);
|
||||
|
||||
return proposalNo;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user