xml변경사항커밋
This commit is contained in:
@@ -7362,16 +7362,20 @@ SELECT
|
||||
,EST_USER_ID
|
||||
,EST_COMP_DATE
|
||||
,EST_RESULT_CD
|
||||
,AREA_CD
|
||||
,MECHANICAL_TYPE
|
||||
,OVERHAUL_ORDER
|
||||
,IS_TEMP
|
||||
)
|
||||
,AREA_CD
|
||||
,MECHANICAL_TYPE
|
||||
,OVERHAUL_ORDER
|
||||
,IS_TEMP
|
||||
,PART_OBJID
|
||||
,PART_NO
|
||||
,PART_NAME
|
||||
,QUANTITY
|
||||
)
|
||||
|
||||
(
|
||||
SELECT
|
||||
#{OBJID}
|
||||
,#{objId}
|
||||
,#{objId}
|
||||
,CATEGORY_CD
|
||||
,CUSTOMER_OBJID
|
||||
,PRODUCT
|
||||
@@ -7390,29 +7394,71 @@ SELECT
|
||||
,CHG_USER_ID
|
||||
,PLAN_DATE
|
||||
,COMPLETE_DATE
|
||||
,RESULT_CD
|
||||
<choose>
|
||||
<when test="overhaul_project_no != null and overhaul_project_no !='' ">
|
||||
,#{overhaul_project_no}<!-- || '_' || #{overhaul_order} -->
|
||||
</when>
|
||||
<otherwise>
|
||||
,MECHANICAL_TYPE || '-' ||
|
||||
<!--
|
||||
(SELECT (SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1))::integer+1 FROM PROJECT_MGMT WHERE PROJECT_NO NOT LIKE '%\_%' ESCAPE '\' ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC LIMIT 1)
|
||||
-->
|
||||
(SELECT CASE
|
||||
WHEN PROJECT_NO ~ '[-\s][0-9]+$'
|
||||
THEN REGEXP_REPLACE(PROJECT_NO, '.*[-\s]([0-9]+)$', '\1')::integer+1
|
||||
ELSE NULL
|
||||
END AS extracted_number
|
||||
FROM PROJECT_MGMT
|
||||
WHERE PROJECT_NO NOT LIKE '%\_%' ESCAPE '\'
|
||||
ORDER BY extracted_number DESC NULLS LAST
|
||||
LIMIT 1)
|
||||
</otherwise>
|
||||
</choose>
|
||||
<!-- ,#{project_no} -->
|
||||
<!-- ,(SELECT TITLE FROM PMS_WBS_TEMPLATE PWT WHERE PWT.OBJID = #{mechanical_type}) || '-' || (SELECT (SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1))::integer+1 FROM PROJECT_MGMT ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC LIMIT 1) -->
|
||||
,RESULT_CD
|
||||
<!-- 기존 PROJECT_NO 자동생성 로직 (주석처리)
|
||||
<choose>
|
||||
<when test="overhaul_project_no != null and overhaul_project_no !='' ">
|
||||
,#{overhaul_project_no}
|
||||
</when>
|
||||
<otherwise>
|
||||
,MECHANICAL_TYPE || '-' ||
|
||||
(SELECT CASE
|
||||
WHEN PROJECT_NO ~ '[-\s][0-9]+$'
|
||||
THEN REGEXP_REPLACE(PROJECT_NO, '.*[-\s]([0-9]+)$', '\1')::integer+1
|
||||
ELSE NULL
|
||||
END AS extracted_number
|
||||
FROM PROJECT_MGMT
|
||||
WHERE PROJECT_NO NOT LIKE '%\_%' ESCAPE '\'
|
||||
ORDER BY extracted_number DESC NULLS LAST
|
||||
LIMIT 1)
|
||||
</otherwise>
|
||||
</choose>
|
||||
-->
|
||||
|
||||
<!-- 신규 PROJECT_NO 생성 로직: 주문유형-제품구분-날짜-순번 형식 (예: R-AS-250302-001) -->
|
||||
,(
|
||||
SELECT
|
||||
-- 주문유형 코드 (CATEGORY_CD를 영문 약어로 매핑)
|
||||
CASE CODE_NAME(CATEGORY_CD)
|
||||
WHEN '오버홀' THEN 'O'
|
||||
WHEN '개조' THEN 'M'
|
||||
WHEN '개발' THEN 'D'
|
||||
WHEN '견적' THEN 'Q'
|
||||
WHEN '수리' THEN 'R'
|
||||
WHEN '판매' THEN 'S'
|
||||
ELSE 'T'
|
||||
END || '-' ||
|
||||
-- 제품구분 코드 (PRODUCT의 CODE_NAME에서 슬래시 제거)
|
||||
REPLACE(CODE_NAME(PRODUCT), '/', '') || '-' ||
|
||||
-- 날짜 (YYMMDD)
|
||||
TO_CHAR(CURRENT_DATE, 'YYMMDD') || '-' ||
|
||||
-- 순번 (001, 002, ...)
|
||||
LPAD(
|
||||
COALESCE(
|
||||
(
|
||||
SELECT MAX(SUBSTRING(PROJECT_NO FROM '\d{3}$')::INTEGER) + 1
|
||||
FROM PROJECT_MGMT
|
||||
WHERE PROJECT_NO LIKE
|
||||
CASE CODE_NAME(CATEGORY_CD)
|
||||
WHEN '오버홀' THEN 'O'
|
||||
WHEN '개조' THEN 'M'
|
||||
WHEN '개발' THEN 'D'
|
||||
WHEN '견적' THEN 'Q'
|
||||
WHEN '수리' THEN 'R'
|
||||
WHEN '판매' THEN 'S'
|
||||
ELSE 'T'
|
||||
END || '-' ||
|
||||
REPLACE(CODE_NAME(PRODUCT), '/', '') || '-' ||
|
||||
TO_CHAR(CURRENT_DATE, 'YYMMDD') || '-%'
|
||||
),
|
||||
1
|
||||
)::TEXT,
|
||||
3,
|
||||
'0'
|
||||
)
|
||||
FROM CONTRACT_MGMT
|
||||
WHERE OBJID = #{objId}
|
||||
)
|
||||
,PM_USER_ID
|
||||
,#{contract_price}
|
||||
,#{contract_price_currency}
|
||||
@@ -7437,12 +7483,16 @@ SELECT
|
||||
,EST_USER_ID
|
||||
,EST_COMP_DATE
|
||||
,EST_RESULT_CD
|
||||
,AREA_CD
|
||||
,MECHANICAL_TYPE
|
||||
,#{overhaul_order}
|
||||
,#{is_temp}
|
||||
FROM CONTRACT_MGMT
|
||||
WHERE OBJID=#{objId}
|
||||
,AREA_CD
|
||||
,MECHANICAL_TYPE
|
||||
,#{overhaul_order}
|
||||
,#{is_temp}
|
||||
,#{part_objid}
|
||||
,#{part_no}
|
||||
,#{part_name}
|
||||
,#{quantity}
|
||||
FROM CONTRACT_MGMT
|
||||
WHERE OBJID=#{objId}
|
||||
)
|
||||
</insert>
|
||||
|
||||
@@ -7549,7 +7599,12 @@ SELECT
|
||||
,REQ_DEL_DATE = #{req_del_date}
|
||||
,CONTRACT_COMPANY = #{contract_company}
|
||||
,MANUFACTURE_PLANT = #{manufacture_plant}
|
||||
,PART_OBJID = #{part_objid}
|
||||
,PART_NO = #{part_no}
|
||||
,PART_NAME = #{part_name}
|
||||
,QUANTITY = #{quantity}
|
||||
WHERE CONTRACT_OBJID = #{objId}
|
||||
AND PART_OBJID = #{part_objid}
|
||||
</update>
|
||||
|
||||
<delete id="deleteProjectMngInfo" parameterType="map">
|
||||
|
||||
@@ -463,8 +463,9 @@
|
||||
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE
|
||||
,WRITER
|
||||
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
|
||||
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T.OBJID AND DOC_TYPE='contractMgmt01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT
|
||||
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T.OBJID AND DOC_TYPE='contractMgmt02' AND UPPER(STATUS) = 'ACTIVE') AS CU02_CNT
|
||||
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T.OBJID AND DOC_TYPE='ORDER_DOC' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT
|
||||
<!-- ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T.OBJID AND DOC_TYPE='contractMgmt01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT
|
||||
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T.OBJID AND DOC_TYPE='contractMgmt02' AND UPPER(STATUS) = 'ACTIVE') AS CU02_CNT -->
|
||||
,(CASE WHEN (RESULT_CD is null or RESULT_CD ='') and (SPEC_RESULT_CD is null or RESULT_CD ='') and (EST_RESULT_CD is null or RESULT_CD ='') then '0'
|
||||
ELSE 1
|
||||
END
|
||||
@@ -477,6 +478,7 @@
|
||||
,CODE_NAME(CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
|
||||
,CONTRACT_DATE
|
||||
,PO_NO
|
||||
,ORDER_DATE
|
||||
,MANUFACTURE_PLANT
|
||||
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
||||
,CONTRACT_RESULT
|
||||
@@ -500,11 +502,6 @@
|
||||
,EXCHANGE_RATE
|
||||
,EST_PRICE
|
||||
,EST_SUPPLY_PRICE
|
||||
,ORDER_DATE
|
||||
,ORDER_UNIT_PRICE
|
||||
,ORDER_SUPPLY_PRICE
|
||||
,ORDER_VAT
|
||||
,ORDER_TOTAL_AMOUNT
|
||||
,(SELECT COUNT(1) FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID) AS EST_STATUS
|
||||
,(
|
||||
SELECT IS_SEND
|
||||
@@ -525,6 +522,66 @@
|
||||
,A.APPR_STATUS
|
||||
,A.APPROVAL_OBJID
|
||||
,A.ROUTE_OBJID
|
||||
,(SELECT objid FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID order by regdate desc limit 1) AS EST_OBJID
|
||||
-- 최근 차수 견적서 합계 정보
|
||||
,(SELECT TOTAL_AMOUNT FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID ORDER BY REGDATE DESC LIMIT 1) AS EST_TOTAL_AMOUNT
|
||||
,(SELECT TOTAL_AMOUNT_KRW FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID ORDER BY REGDATE DESC LIMIT 1) AS EST_TOTAL_AMOUNT_KRW
|
||||
-- 수주 합계 정보 (CONTRACT_MGMT 테이블에 저장된 값 사용)
|
||||
,T.ORDER_SUPPLY_PRICE AS ORDER_SUPPLY_PRICE_SUM
|
||||
,T.ORDER_VAT AS ORDER_VAT_SUM
|
||||
,T.ORDER_TOTAL_AMOUNT AS ORDER_TOTAL_AMOUNT_SUM
|
||||
,CASE
|
||||
WHEN T.ORDER_TOTAL_AMOUNT IS NOT NULL AND T.ORDER_TOTAL_AMOUNT != ''
|
||||
AND T.EXCHANGE_RATE IS NOT NULL AND T.EXCHANGE_RATE != ''
|
||||
THEN CAST(T.ORDER_TOTAL_AMOUNT AS NUMERIC) * CAST(T.EXCHANGE_RATE AS NUMERIC)
|
||||
ELSE 0
|
||||
END AS ORDER_TOTAL_AMOUNT_KRW
|
||||
-- 품목 정보 요약
|
||||
,(
|
||||
WITH item_info AS (
|
||||
SELECT
|
||||
COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME,
|
||||
COUNT(*) OVER() AS total_count,
|
||||
ROW_NUMBER() OVER(ORDER BY CI.SEQ) AS rn
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.OBJID
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
)
|
||||
SELECT
|
||||
CASE
|
||||
WHEN total_count = 1 THEN PART_NAME
|
||||
WHEN total_count > 1 THEN PART_NAME || ' 외 ' || (total_count - 1) || '건'
|
||||
ELSE ''
|
||||
END
|
||||
FROM item_info
|
||||
WHERE rn = 1
|
||||
) AS ITEM_SUMMARY
|
||||
,(
|
||||
SELECT MIN(DUE_DATE)
|
||||
FROM CONTRACT_ITEM
|
||||
WHERE CONTRACT_OBJID = T.OBJID
|
||||
AND STATUS = 'ACTIVE'
|
||||
AND DUE_DATE IS NOT NULL
|
||||
AND DUE_DATE != ''
|
||||
) AS EARLIEST_DUE_DATE
|
||||
,(
|
||||
SELECT COUNT(*) - 1
|
||||
FROM CONTRACT_ITEM
|
||||
WHERE CONTRACT_OBJID = T.OBJID
|
||||
AND STATUS = 'ACTIVE'
|
||||
AND DUE_DATE IS NOT NULL
|
||||
AND DUE_DATE != ''
|
||||
) AS OTHER_DUE_DATE_COUNT
|
||||
,(
|
||||
SELECT RETURN_REASON
|
||||
FROM CONTRACT_ITEM
|
||||
WHERE CONTRACT_OBJID = T.OBJID
|
||||
AND STATUS = 'ACTIVE'
|
||||
AND RETURN_REASON IS NOT NULL
|
||||
AND RETURN_REASON != ''
|
||||
LIMIT 1
|
||||
) AS RETURN_REASON_SUMMARY
|
||||
FROM
|
||||
CONTRACT_MGMT AS T
|
||||
LEFT OUTER JOIN
|
||||
@@ -564,7 +621,7 @@
|
||||
A.OBJID = B.APPROVAL_OBJID
|
||||
AND TARGET_TYPE IN ('CONTRACT_ESTIMATE')
|
||||
) A
|
||||
ON T.OBJID::numeric = A.TARGET_OBJID
|
||||
ON (SELECT objid FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID order by regdate desc limit 1)::numeric = A.TARGET_OBJID
|
||||
)
|
||||
</sql>
|
||||
|
||||
@@ -698,12 +755,15 @@
|
||||
AND PAID_TYPE = #{paid_type}
|
||||
</if>
|
||||
|
||||
<if test="search_partNo != null and search_partNo != ''">
|
||||
AND UPPER(PART_NO) LIKE UPPER('%${search_partNo}%')
|
||||
</if>
|
||||
|
||||
<if test="search_partName != null and search_partName != ''">
|
||||
AND UPPER(PART_NAME) LIKE UPPER('%${search_partName}%')
|
||||
<!-- 품번/품명 검색: PART_OBJID로 정확하게 검색 -->
|
||||
<if test="search_partObjId != null and search_partObjId != ''">
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM CONTRACT_ITEM CI
|
||||
WHERE CI.CONTRACT_OBJID = T.OBJID
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
AND CI.PART_OBJID = #{search_partObjId}
|
||||
)
|
||||
</if>
|
||||
|
||||
<if test="search_serialNo != null and search_serialNo != ''">
|
||||
@@ -723,17 +783,10 @@
|
||||
<if test="due_end_date != null and !''.equals(due_end_date)">
|
||||
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{due_end_date}, 'YYYY-MM-DD')
|
||||
</if>
|
||||
|
||||
<if test="order_start_date != null and !''.equals(order_start_date)">
|
||||
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{order_start_date}, 'YYYY-MM-DD')
|
||||
</if>
|
||||
<if test="due_end_date != null and !''.equals(due_end_date)">
|
||||
AND TO_DATE(ORDER_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{due_end_date}, 'YYYY-MM-DD')
|
||||
</if>
|
||||
ORDER BY REGDATE DESC
|
||||
</select>
|
||||
|
||||
<select id="contractList_bak" parameterType="map" resultType="map">
|
||||
</select>
|
||||
|
||||
<select id="contractList_bak" parameterType="map" resultType="map">
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT CONTRACT_MGMT.*,ROW_NUMBER() OVER (ORDER BY CONTRACT_NO DESC) AS RNUM
|
||||
@@ -889,7 +942,9 @@
|
||||
,CONTRACT_DEL_DATE
|
||||
,CONTRACT_COMPANY
|
||||
,CONTRACT_DATE
|
||||
,PO_NO
|
||||
,MANUFACTURE_PLANT
|
||||
,CONTRACT_RESULT
|
||||
,PROJECT_NAME
|
||||
,SPEC_USER_ID
|
||||
,SPEC_PLAN_DATE
|
||||
@@ -910,8 +965,14 @@
|
||||
,PART_NO
|
||||
,PART_NAME
|
||||
,SERIAL_NO
|
||||
,QUANTITY
|
||||
,CUSTOMER_REQUEST
|
||||
,EXCHANGE_RATE
|
||||
,ORDER_DATE
|
||||
,ORDER_UNIT_PRICE
|
||||
,ORDER_SUPPLY_PRICE
|
||||
,ORDER_VAT
|
||||
,ORDER_TOTAL_AMOUNT
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@@ -948,7 +1009,9 @@
|
||||
,#{contract_del_date}
|
||||
,#{contract_company}
|
||||
,#{contract_date}
|
||||
,#{po_no}
|
||||
,#{manufacture_plant}
|
||||
,#{contract_result}
|
||||
,#{project_name}
|
||||
,#{spec_user_id}
|
||||
,#{spec_plan_date}
|
||||
@@ -969,8 +1032,14 @@
|
||||
,#{part_no}
|
||||
,#{part_name}
|
||||
,#{serial_no}
|
||||
,#{quantity}
|
||||
,#{customer_request}
|
||||
,#{exchange_rate}
|
||||
,#{order_date}
|
||||
,#{unit_price}
|
||||
,#{supply_price}
|
||||
,#{vat}
|
||||
,#{total_amount}
|
||||
)
|
||||
ON CONFLICT (OBJID) DO
|
||||
UPDATE
|
||||
@@ -1003,8 +1072,10 @@
|
||||
,REQ_DEL_DATE = #{req_del_date}
|
||||
,CONTRACT_DEL_DATE = #{contract_del_date}
|
||||
,CONTRACT_COMPANY = #{contract_company}
|
||||
,CONTRACT_DATE = #{contract_date}
|
||||
,CONTRACT_DATE = #{contract_date}
|
||||
,PO_NO = #{po_no}
|
||||
,MANUFACTURE_PLANT = #{manufacture_plant}
|
||||
,CONTRACT_RESULT = #{contract_result}
|
||||
,PROJECT_NAME = #{project_name}
|
||||
,SPEC_USER_ID = #{spec_user_id}
|
||||
,SPEC_PLAN_DATE = #{spec_plan_date}
|
||||
@@ -1025,8 +1096,14 @@
|
||||
,PART_NO = #{part_no}
|
||||
,PART_NAME = #{part_name}
|
||||
,SERIAL_NO = #{serial_no}
|
||||
,QUANTITY = #{quantity}
|
||||
,CUSTOMER_REQUEST = #{customer_request}
|
||||
,EXCHANGE_RATE = #{exchange_rate}
|
||||
,ORDER_DATE = #{order_date}
|
||||
,ORDER_UNIT_PRICE = #{unit_price}
|
||||
,ORDER_SUPPLY_PRICE = #{supply_price}
|
||||
,ORDER_VAT = #{vat}
|
||||
,ORDER_TOTAL_AMOUNT = #{total_amount}
|
||||
</update>
|
||||
|
||||
<update id="saveContractMgmtInfo_old" parameterType="map">
|
||||
@@ -3023,7 +3100,8 @@ SELECT
|
||||
,#{writer}
|
||||
FROM PMS_WBS_TASK_STANDARD AS T LEFT JOIN PMS_WBS_TEMPLATE AS T1
|
||||
ON T.PARENT_OBJID = T1.OBJID
|
||||
WHERE T1.TITLE=#{mechanical_type}
|
||||
WHERE T1.OBJID = '1662715267'
|
||||
<!-- WHERE T1.TITLE=#{mechanical_type} -->
|
||||
<!-- WHERE T1.OBJID=#{mechanical_type} -->
|
||||
<!-- WHERE T1.PRODUCT_OBJID=#{product} -->
|
||||
)
|
||||
@@ -3393,6 +3471,20 @@ ORDER BY ASM.SUPPLY_NAME
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<!-- 품목별 프로젝트 조회 (PART_OBJID 기준) -->
|
||||
<select id="getProjectListByContractAndPartObjid" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
PROJECT_NAME,
|
||||
PART_OBJID,
|
||||
PART_NO,
|
||||
PART_NAME
|
||||
FROM
|
||||
PROJECT_MGMT
|
||||
WHERE CONTRACT_OBJID = #{contractObjId}
|
||||
AND PART_OBJID = #{part_objid}
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<select id="overlapOrder" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
T.*
|
||||
@@ -3737,86 +3829,147 @@ ORDER BY ASM.SUPPLY_NAME
|
||||
<!-- 견적서 템플릿 목록 조회 (CONTRACT_OBJID 기준) -->
|
||||
<select id="getEstimateTemplateList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID AS "OBJID",
|
||||
CONTRACT_OBJID AS "CONTRACT_OBJID",
|
||||
TEMPLATE_TYPE AS "TEMPLATE_TYPE",
|
||||
ET.OBJID AS "OBJID",
|
||||
ET.CONTRACT_OBJID AS "CONTRACT_OBJID",
|
||||
ET.TEMPLATE_TYPE AS "TEMPLATE_TYPE",
|
||||
CASE
|
||||
WHEN TEMPLATE_TYPE = '1' THEN '일반 견적서'
|
||||
WHEN TEMPLATE_TYPE = '2' THEN '장비 견적서'
|
||||
ELSE TEMPLATE_TYPE
|
||||
WHEN ET.TEMPLATE_TYPE = '1' THEN '일반 견적서'
|
||||
WHEN ET.TEMPLATE_TYPE = '2' THEN '장비 견적서'
|
||||
ELSE ET.TEMPLATE_TYPE
|
||||
END AS "TEMPLATE_TYPE_NAME",
|
||||
ESTIMATE_NO AS "ESTIMATE_NO",
|
||||
WRITER AS "WRITER",
|
||||
TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI') AS "REGDATE",
|
||||
CHG_USER_ID AS "CHG_USER_ID",
|
||||
TO_CHAR(CHGDATE, 'YYYY-MM-DD HH24:MI') AS "CHGDATE",
|
||||
ROW_NUMBER() OVER (PARTITION BY TEMPLATE_TYPE ORDER BY REGDATE) AS "REVISION"
|
||||
ET.ESTIMATE_NO AS "ESTIMATE_NO",
|
||||
ET.WRITER AS "WRITER",
|
||||
TO_CHAR(ET.REGDATE, 'YYYY-MM-DD HH24:MI') AS "REGDATE",
|
||||
ET.CHG_USER_ID AS "CHG_USER_ID",
|
||||
TO_CHAR(ET.CHGDATE, 'YYYY-MM-DD HH24:MI') AS "CHGDATE",
|
||||
ROW_NUMBER() OVER (PARTITION BY ET.TEMPLATE_TYPE ORDER BY ET.REGDATE) AS "REVISION",
|
||||
COALESCE(
|
||||
(SELECT CASE
|
||||
WHEN A.STATUS = 'complete' THEN '결재완료'
|
||||
WHEN A.STATUS = 'cancel' THEN '취소'
|
||||
WHEN A.STATUS = 'reject' THEN '반려'
|
||||
WHEN A.STATUS = 'inProcess' THEN '결재중'
|
||||
ELSE '작성중'
|
||||
END
|
||||
FROM APPROVAL A
|
||||
WHERE A.TARGET_OBJID::VARCHAR = ET.OBJID
|
||||
AND A.TARGET_TYPE = 'CONTRACT_ESTIMATE'
|
||||
ORDER BY A.REGDATE DESC
|
||||
LIMIT 1),
|
||||
'작성중'
|
||||
) AS "APPR_STATUS"
|
||||
FROM
|
||||
ESTIMATE_TEMPLATE
|
||||
ESTIMATE_TEMPLATE ET
|
||||
WHERE
|
||||
CONTRACT_OBJID = #{objId}
|
||||
ORDER BY TEMPLATE_TYPE, REGDATE DESC
|
||||
ET.CONTRACT_OBJID = #{objId}
|
||||
ORDER BY ET.TEMPLATE_TYPE, ET.REGDATE DESC
|
||||
</select>
|
||||
|
||||
<!-- 견적서 템플릿 데이터 조회 (ESTIMATE_TEMPLATE 테이블) -->
|
||||
<select id="getEstimateTemplateData" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID,
|
||||
CONTRACT_OBJID,
|
||||
TEMPLATE_TYPE,
|
||||
EXECUTOR,
|
||||
RECIPIENT,
|
||||
ESTIMATE_NO,
|
||||
CONTACT_PERSON,
|
||||
GREETING_TEXT,
|
||||
MODEL_NAME,
|
||||
MODEL_CODE,
|
||||
EXECUTOR_DATE,
|
||||
NOTE1,
|
||||
NOTE2,
|
||||
NOTE3,
|
||||
NOTE4,
|
||||
WRITER,
|
||||
REGDATE,
|
||||
CHG_USER_ID,
|
||||
CHGDATE
|
||||
ET.OBJID,
|
||||
ET.CONTRACT_OBJID,
|
||||
ET.TEMPLATE_TYPE,
|
||||
ET.EXECUTOR,
|
||||
ET.RECIPIENT,
|
||||
ET.ESTIMATE_NO,
|
||||
ET.CONTACT_PERSON,
|
||||
ET.GREETING_TEXT,
|
||||
ET.MODEL_NAME,
|
||||
ET.MODEL_CODE,
|
||||
ET.EXECUTOR_DATE,
|
||||
ET.NOTE1,
|
||||
ET.NOTE2,
|
||||
ET.NOTE3,
|
||||
ET.NOTE4,
|
||||
ET.NOTE_REMARKS,
|
||||
ET.TOTAL_AMOUNT,
|
||||
ET.TOTAL_AMOUNT_KRW,
|
||||
ET.MANAGER_NAME,
|
||||
ET.MANAGER_CONTACT,
|
||||
ET.WRITER,
|
||||
ET.REGDATE,
|
||||
ET.CHG_USER_ID,
|
||||
ET.CHGDATE,
|
||||
CM.EXCHANGE_RATE,
|
||||
CODE_NAME(CM.CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME,
|
||||
COALESCE(
|
||||
(SELECT CASE
|
||||
WHEN A.STATUS = 'complete' THEN '결재완료'
|
||||
WHEN A.STATUS = 'cancel' THEN '취소'
|
||||
WHEN A.STATUS = 'reject' THEN '반려'
|
||||
WHEN A.STATUS = 'inProcess' THEN '결재중'
|
||||
ELSE '작성중'
|
||||
END
|
||||
FROM APPROVAL A
|
||||
WHERE A.TARGET_OBJID::VARCHAR = ET.OBJID
|
||||
AND A.TARGET_TYPE = 'CONTRACT_ESTIMATE'
|
||||
ORDER BY A.REGDATE DESC
|
||||
LIMIT 1),
|
||||
'작성중'
|
||||
) AS APPR_STATUS
|
||||
FROM
|
||||
ESTIMATE_TEMPLATE
|
||||
ESTIMATE_TEMPLATE ET
|
||||
LEFT JOIN CONTRACT_MGMT CM ON ET.CONTRACT_OBJID = CM.OBJID
|
||||
WHERE
|
||||
CONTRACT_OBJID = #{objId}
|
||||
<if test="template_type != null and template_type != ''">
|
||||
AND TEMPLATE_TYPE = #{template_type}
|
||||
</if>
|
||||
ORDER BY REGDATE DESC
|
||||
LIMIT 1
|
||||
ET.CONTRACT_OBJID = #{objId}
|
||||
<if test="template_type != null and template_type != ''">
|
||||
AND ET.TEMPLATE_TYPE = #{template_type}
|
||||
</if>
|
||||
ORDER BY ET.REGDATE DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 견적서 템플릿 데이터 조회 (OBJID 기준) -->
|
||||
<select id="getEstimateTemplateByObjId" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID,
|
||||
CONTRACT_OBJID,
|
||||
TEMPLATE_TYPE,
|
||||
EXECUTOR,
|
||||
RECIPIENT,
|
||||
ESTIMATE_NO,
|
||||
CONTACT_PERSON,
|
||||
GREETING_TEXT,
|
||||
MODEL_NAME,
|
||||
MODEL_CODE,
|
||||
EXECUTOR_DATE,
|
||||
NOTE1,
|
||||
NOTE2,
|
||||
NOTE3,
|
||||
NOTE4,
|
||||
WRITER,
|
||||
TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI') AS REGDATE,
|
||||
CHG_USER_ID,
|
||||
TO_CHAR(CHGDATE, 'YYYY-MM-DD HH24:MI') AS CHGDATE
|
||||
ET.OBJID,
|
||||
ET.CONTRACT_OBJID,
|
||||
ET.TEMPLATE_TYPE,
|
||||
ET.EXECUTOR,
|
||||
ET.RECIPIENT,
|
||||
ET.ESTIMATE_NO,
|
||||
ET.CONTACT_PERSON,
|
||||
ET.GREETING_TEXT,
|
||||
ET.MODEL_NAME,
|
||||
ET.MODEL_CODE,
|
||||
ET.EXECUTOR_DATE,
|
||||
ET.NOTE1,
|
||||
ET.NOTE2,
|
||||
ET.NOTE3,
|
||||
ET.NOTE4,
|
||||
ET.NOTE_REMARKS,
|
||||
ET.TOTAL_AMOUNT,
|
||||
ET.TOTAL_AMOUNT_KRW,
|
||||
ET.MANAGER_NAME,
|
||||
ET.MANAGER_CONTACT,
|
||||
ET.WRITER,
|
||||
TO_CHAR(ET.REGDATE, 'YYYY-MM-DD HH24:MI') AS REGDATE,
|
||||
ET.CHG_USER_ID,
|
||||
TO_CHAR(ET.CHGDATE, 'YYYY-MM-DD HH24:MI') AS CHGDATE,
|
||||
CM.EXCHANGE_RATE,
|
||||
CODE_NAME(CM.CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME,
|
||||
COALESCE(
|
||||
(SELECT CASE
|
||||
WHEN A.STATUS = 'complete' THEN '결재완료'
|
||||
WHEN A.STATUS = 'cancel' THEN '취소'
|
||||
WHEN A.STATUS = 'reject' THEN '반려'
|
||||
WHEN A.STATUS = 'inProcess' THEN '결재중'
|
||||
ELSE '작성중'
|
||||
END
|
||||
FROM APPROVAL A
|
||||
WHERE A.TARGET_OBJID::VARCHAR = ET.OBJID
|
||||
AND A.TARGET_TYPE = 'CONTRACT_ESTIMATE'
|
||||
ORDER BY A.REGDATE DESC
|
||||
LIMIT 1),
|
||||
'작성중'
|
||||
) AS APPR_STATUS
|
||||
FROM
|
||||
ESTIMATE_TEMPLATE
|
||||
ESTIMATE_TEMPLATE ET
|
||||
LEFT JOIN CONTRACT_MGMT CM ON ET.CONTRACT_OBJID = CM.OBJID
|
||||
WHERE
|
||||
OBJID = #{templateObjId}
|
||||
ET.OBJID = #{templateObjId}
|
||||
</select>
|
||||
|
||||
<!-- 견적서 템플릿 품목 조회 (TEMPLATE_OBJID 기준) -->
|
||||
@@ -3881,35 +4034,45 @@ ORDER BY ASM.SUPPLY_NAME
|
||||
MODEL_NAME,
|
||||
MODEL_CODE,
|
||||
EXECUTOR_DATE,
|
||||
NOTE1,
|
||||
NOTE2,
|
||||
NOTE3,
|
||||
NOTE4,
|
||||
WRITER,
|
||||
REGDATE,
|
||||
CHG_USER_ID,
|
||||
CHGDATE
|
||||
) VALUES (
|
||||
#{template_objid},
|
||||
#{objId},
|
||||
#{template_type},
|
||||
#{executor},
|
||||
#{recipient},
|
||||
#{estimate_no},
|
||||
#{contact_person},
|
||||
#{greeting_text},
|
||||
#{model_name},
|
||||
#{model_code},
|
||||
#{executor_date},
|
||||
#{note1},
|
||||
#{note2},
|
||||
#{note3},
|
||||
#{note4},
|
||||
#{writer},
|
||||
NOW(),
|
||||
#{chg_user_id},
|
||||
NOW()
|
||||
)
|
||||
NOTE1,
|
||||
NOTE2,
|
||||
NOTE3,
|
||||
NOTE4,
|
||||
NOTE_REMARKS,
|
||||
TOTAL_AMOUNT,
|
||||
TOTAL_AMOUNT_KRW,
|
||||
MANAGER_NAME,
|
||||
MANAGER_CONTACT,
|
||||
WRITER,
|
||||
REGDATE,
|
||||
CHG_USER_ID,
|
||||
CHGDATE
|
||||
) VALUES (
|
||||
#{template_objid},
|
||||
#{objId},
|
||||
#{template_type},
|
||||
#{executor},
|
||||
#{recipient},
|
||||
#{estimate_no},
|
||||
#{contact_person},
|
||||
#{greeting_text},
|
||||
#{model_name},
|
||||
#{model_code},
|
||||
#{executor_date},
|
||||
#{note1},
|
||||
#{note2},
|
||||
#{note3},
|
||||
#{note4},
|
||||
#{note_remarks},
|
||||
#{total_amount},
|
||||
#{total_amount_krw},
|
||||
#{manager_name},
|
||||
#{manager_contact},
|
||||
#{writer},
|
||||
NOW(),
|
||||
#{chg_user_id},
|
||||
NOW()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 견적서 템플릿 수정 -->
|
||||
@@ -3924,14 +4087,19 @@ ORDER BY ASM.SUPPLY_NAME
|
||||
MODEL_NAME = #{model_name},
|
||||
MODEL_CODE = #{model_code},
|
||||
EXECUTOR_DATE = #{executor_date},
|
||||
NOTE1 = #{note1},
|
||||
NOTE2 = #{note2},
|
||||
NOTE3 = #{note3},
|
||||
NOTE4 = #{note4},
|
||||
CHG_USER_ID = #{chg_user_id},
|
||||
CHGDATE = NOW()
|
||||
WHERE
|
||||
OBJID = #{template_objid}
|
||||
NOTE1 = #{note1},
|
||||
NOTE2 = #{note2},
|
||||
NOTE3 = #{note3},
|
||||
NOTE4 = #{note4},
|
||||
NOTE_REMARKS = #{note_remarks},
|
||||
TOTAL_AMOUNT = #{total_amount},
|
||||
TOTAL_AMOUNT_KRW = #{total_amount_krw},
|
||||
MANAGER_NAME = #{manager_name},
|
||||
MANAGER_CONTACT = #{manager_contact},
|
||||
CHG_USER_ID = #{chg_user_id},
|
||||
CHGDATE = NOW()
|
||||
WHERE
|
||||
OBJID = #{template_objid}
|
||||
</update>
|
||||
|
||||
<!-- 견적서 템플릿 품목 삭제 -->
|
||||
@@ -3992,33 +4160,41 @@ ORDER BY ASM.SUPPLY_NAME
|
||||
<!-- 최종 차수 견적서 조회 (메일 발송용) -->
|
||||
<select id="getLatestEstimateTemplate" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID AS "OBJID",
|
||||
CONTRACT_OBJID AS "CONTRACT_OBJID",
|
||||
TEMPLATE_TYPE AS "TEMPLATE_TYPE",
|
||||
EXECUTOR AS "EXECUTOR",
|
||||
RECIPIENT AS "RECIPIENT",
|
||||
ESTIMATE_NO AS "ESTIMATE_NO",
|
||||
CONTACT_PERSON AS "CONTACT_PERSON",
|
||||
GREETING_TEXT AS "GREETING_TEXT",
|
||||
MODEL_NAME AS "MODEL_NAME",
|
||||
MODEL_CODE AS "MODEL_CODE",
|
||||
EXECUTOR_DATE AS "EXECUTOR_DATE",
|
||||
NOTE1 AS "NOTE1",
|
||||
NOTE2 AS "NOTE2",
|
||||
NOTE3 AS "NOTE3",
|
||||
NOTE4 AS "NOTE4",
|
||||
WRITER AS "WRITER",
|
||||
TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI') AS "REGDATE",
|
||||
CHG_USER_ID AS "CHG_USER_ID",
|
||||
TO_CHAR(CHGDATE, 'YYYY-MM-DD HH24:MI') AS "CHGDATE",
|
||||
CATEGORIES_JSON AS "CATEGORIES_JSON"
|
||||
FROM
|
||||
ESTIMATE_TEMPLATE
|
||||
WHERE
|
||||
CONTRACT_OBJID = #{objId}
|
||||
ET.OBJID AS "OBJID",
|
||||
ET.CONTRACT_OBJID AS "CONTRACT_OBJID",
|
||||
ET.TEMPLATE_TYPE AS "TEMPLATE_TYPE",
|
||||
ET.EXECUTOR AS "EXECUTOR",
|
||||
ET.RECIPIENT AS "RECIPIENT",
|
||||
ET.ESTIMATE_NO AS "ESTIMATE_NO",
|
||||
ET.CONTACT_PERSON AS "CONTACT_PERSON",
|
||||
ET.GREETING_TEXT AS "GREETING_TEXT",
|
||||
ET.MODEL_NAME AS "MODEL_NAME",
|
||||
ET.MODEL_CODE AS "MODEL_CODE",
|
||||
ET.EXECUTOR_DATE AS "EXECUTOR_DATE",
|
||||
ET.NOTE1 AS "NOTE1",
|
||||
ET.NOTE2 AS "NOTE2",
|
||||
ET.NOTE3 AS "NOTE3",
|
||||
ET.NOTE4 AS "NOTE4",
|
||||
ET.NOTE_REMARKS AS "NOTE_REMARKS",
|
||||
ET.TOTAL_AMOUNT AS "TOTAL_AMOUNT",
|
||||
ET.TOTAL_AMOUNT_KRW AS "TOTAL_AMOUNT_KRW",
|
||||
ET.MANAGER_NAME AS "MANAGER_NAME",
|
||||
ET.MANAGER_CONTACT AS "MANAGER_CONTACT",
|
||||
ET.WRITER AS "WRITER",
|
||||
TO_CHAR(ET.REGDATE, 'YYYY-MM-DD HH24:MI') AS "REGDATE",
|
||||
ET.CHG_USER_ID AS "CHG_USER_ID",
|
||||
TO_CHAR(ET.CHGDATE, 'YYYY-MM-DD HH24:MI') AS "CHGDATE",
|
||||
ET.CATEGORIES_JSON AS "CATEGORIES_JSON",
|
||||
CM.EXCHANGE_RATE AS "EXCHANGE_RATE",
|
||||
CODE_NAME(CM.CONTRACT_CURRENCY) AS "CONTRACT_CURRENCY_NAME"
|
||||
FROM
|
||||
ESTIMATE_TEMPLATE ET
|
||||
LEFT JOIN CONTRACT_MGMT CM ON ET.CONTRACT_OBJID = CM.OBJID
|
||||
WHERE
|
||||
ET.CONTRACT_OBJID = #{objId}
|
||||
ORDER BY
|
||||
TEMPLATE_TYPE,
|
||||
REGDATE DESC
|
||||
ET.TEMPLATE_TYPE,
|
||||
ET.REGDATE DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
@@ -4181,13 +4357,354 @@ ORDER BY ASM.SUPPLY_NAME
|
||||
CONTRACT_RESULT = #{contract_result},
|
||||
PO_NO = #{po_no},
|
||||
ORDER_DATE = #{order_date},
|
||||
QUANTITY = #{quantity},
|
||||
ORDER_UNIT_PRICE = #{unit_price},
|
||||
ORDER_SUPPLY_PRICE = #{supply_price},
|
||||
ORDER_VAT = #{vat},
|
||||
ORDER_TOTAL_AMOUNT = #{total_amount},
|
||||
CONTRACT_CURRENCY = #{contract_currency},
|
||||
EXCHANGE_RATE = #{exchange_rate}
|
||||
WHERE OBJID = #{contractObjId}
|
||||
EXCHANGE_RATE = #{exchange_rate},
|
||||
ORDER_SUPPLY_PRICE = #{order_supply_price},
|
||||
ORDER_VAT = #{order_vat},
|
||||
ORDER_TOTAL_AMOUNT = #{order_total_amount}
|
||||
WHERE OBJID = #{objId}
|
||||
</update>
|
||||
|
||||
<!-- 계약 품목 조회 -->
|
||||
<select id="getContractItems" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
CI.OBJID,
|
||||
CI.CONTRACT_OBJID,
|
||||
CI.PART_OBJID,
|
||||
COALESCE(PM.PART_NO, CI.PART_NO) AS PART_NO,
|
||||
COALESCE(PM.PART_NAME, CI.PART_NAME) AS PART_NAME,
|
||||
STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SEQ) AS SERIAL_NO,
|
||||
CI.QUANTITY,
|
||||
CI.DUE_DATE,
|
||||
CI.CUSTOMER_REQUEST,
|
||||
CI.RETURN_REASON,
|
||||
CI.ORDER_QUANTITY,
|
||||
CI.ORDER_UNIT_PRICE,
|
||||
CI.ORDER_SUPPLY_PRICE,
|
||||
CI.ORDER_VAT,
|
||||
CI.ORDER_TOTAL_AMOUNT
|
||||
FROM
|
||||
CONTRACT_ITEM CI
|
||||
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID AND CIS.STATUS = 'ACTIVE'
|
||||
WHERE
|
||||
CI.CONTRACT_OBJID = #{contractObjId}
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
GROUP BY
|
||||
CI.OBJID,
|
||||
CI.CONTRACT_OBJID,
|
||||
CI.PART_OBJID,
|
||||
CI.SEQ,
|
||||
PM.PART_NO,
|
||||
PM.PART_NAME,
|
||||
CI.PART_NO,
|
||||
CI.PART_NAME,
|
||||
CI.QUANTITY,
|
||||
CI.DUE_DATE,
|
||||
CI.CUSTOMER_REQUEST,
|
||||
CI.RETURN_REASON,
|
||||
CI.ORDER_QUANTITY,
|
||||
CI.ORDER_UNIT_PRICE,
|
||||
CI.ORDER_SUPPLY_PRICE,
|
||||
CI.ORDER_VAT,
|
||||
CI.ORDER_TOTAL_AMOUNT
|
||||
ORDER BY CI.SEQ
|
||||
</select>
|
||||
|
||||
<!-- 계약 품목별 수주 정보 업데이트 (단일 품목) -->
|
||||
<update id="updateContractItemOrderInfo" parameterType="map">
|
||||
UPDATE CONTRACT_ITEM
|
||||
SET
|
||||
ORDER_QUANTITY = #{orderQuantity},
|
||||
ORDER_UNIT_PRICE = #{orderUnitPrice},
|
||||
ORDER_SUPPLY_PRICE = #{orderSupplyPrice},
|
||||
ORDER_VAT = #{orderVat},
|
||||
ORDER_TOTAL_AMOUNT = #{orderTotalAmount}
|
||||
WHERE OBJID = #{contractItemObjId}
|
||||
</update>
|
||||
|
||||
<!-- ====================================
|
||||
품목 관리 쿼리
|
||||
==================================== -->
|
||||
|
||||
<!-- 품번 목록 조회 (is_last = 1) -->
|
||||
<select id="getPartList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID,
|
||||
PART_NO,
|
||||
PART_NAME,
|
||||
SPEC
|
||||
FROM
|
||||
PART_MNG
|
||||
WHERE
|
||||
IS_LAST = '1'
|
||||
AND STATUS = 'release'
|
||||
ORDER BY
|
||||
PART_NO
|
||||
</select>
|
||||
|
||||
<!-- 품번 검색 (AJAX용 - 검색어 기반 또는 OBJID 기반) -->
|
||||
<select id="searchPartList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID,
|
||||
PART_NO,
|
||||
PART_NAME,
|
||||
SPEC
|
||||
FROM
|
||||
PART_MNG
|
||||
WHERE
|
||||
IS_LAST = '1'
|
||||
AND STATUS = 'release'
|
||||
<if test="partObjId != null and partObjId != ''">
|
||||
AND OBJID = #{partObjId}
|
||||
</if>
|
||||
<if test="searchTerm != null and searchTerm != ''">
|
||||
AND (
|
||||
UPPER(PART_NO) LIKE '%' || UPPER(#{searchTerm}) || '%'
|
||||
OR UPPER(PART_NAME) LIKE '%' || UPPER(#{searchTerm}) || '%'
|
||||
)
|
||||
</if>
|
||||
ORDER BY
|
||||
PART_NO
|
||||
LIMIT 100
|
||||
</select>
|
||||
|
||||
<!-- 품목 저장 -->
|
||||
<insert id="insertContractItem" parameterType="map">
|
||||
INSERT INTO CONTRACT_ITEM (
|
||||
OBJID,
|
||||
CONTRACT_OBJID,
|
||||
SEQ,
|
||||
PART_OBJID,
|
||||
PART_NO,
|
||||
PART_NAME,
|
||||
QUANTITY,
|
||||
DUE_DATE,
|
||||
CUSTOMER_REQUEST,
|
||||
RETURN_REASON,
|
||||
REGDATE,
|
||||
WRITER,
|
||||
STATUS
|
||||
) VALUES (
|
||||
#{objId},
|
||||
#{contractObjId},
|
||||
#{seq},
|
||||
#{partObjId},
|
||||
#{partNo},
|
||||
#{partName},
|
||||
#{quantity},
|
||||
#{dueDate},
|
||||
#{customerRequest},
|
||||
#{returnReason},
|
||||
NOW(),
|
||||
#{writer},
|
||||
'ACTIVE'
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 품목별 S/N 저장 -->
|
||||
<insert id="insertContractItemSerial" parameterType="map">
|
||||
INSERT INTO CONTRACT_ITEM_SERIAL (
|
||||
OBJID,
|
||||
ITEM_OBJID,
|
||||
SEQ,
|
||||
SERIAL_NO,
|
||||
REGDATE,
|
||||
WRITER,
|
||||
STATUS
|
||||
) VALUES (
|
||||
#{objId},
|
||||
#{itemObjId},
|
||||
#{seq},
|
||||
#{serialNo},
|
||||
NOW(),
|
||||
#{writer},
|
||||
'ACTIVE'
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 견적의 품목 목록 조회 -->
|
||||
<select id="getContractItemList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
CI.OBJID,
|
||||
CI.CONTRACT_OBJID,
|
||||
CI.SEQ,
|
||||
CI.PART_OBJID,
|
||||
CI.PART_NO,
|
||||
CI.PART_NAME,
|
||||
CI.QUANTITY,
|
||||
CI.DUE_DATE,
|
||||
CI.CUSTOMER_REQUEST,
|
||||
CI.RETURN_REASON,
|
||||
CI.REGDATE,
|
||||
CI.WRITER,
|
||||
STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SEQ) AS SERIAL_NOS,
|
||||
COUNT(CIS.OBJID) AS SERIAL_COUNT
|
||||
FROM
|
||||
CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS
|
||||
ON CI.OBJID = CIS.ITEM_OBJID
|
||||
AND CIS.STATUS = 'ACTIVE'
|
||||
WHERE
|
||||
CI.CONTRACT_OBJID = #{contractObjId}
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
GROUP BY
|
||||
CI.OBJID,
|
||||
CI.CONTRACT_OBJID,
|
||||
CI.SEQ,
|
||||
CI.PART_OBJID,
|
||||
CI.PART_NO,
|
||||
CI.PART_NAME,
|
||||
CI.QUANTITY,
|
||||
CI.DUE_DATE,
|
||||
CI.CUSTOMER_REQUEST,
|
||||
CI.REGDATE,
|
||||
CI.WRITER
|
||||
ORDER BY
|
||||
CI.SEQ
|
||||
</select>
|
||||
|
||||
<!-- 품목의 S/N 목록 조회 -->
|
||||
<select id="getContractItemSerialList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID,
|
||||
ITEM_OBJID,
|
||||
SEQ,
|
||||
SERIAL_NO,
|
||||
REGDATE,
|
||||
WRITER
|
||||
FROM
|
||||
CONTRACT_ITEM_SERIAL
|
||||
WHERE
|
||||
ITEM_OBJID = #{itemObjId}
|
||||
AND STATUS = 'ACTIVE'
|
||||
ORDER BY
|
||||
SEQ
|
||||
</select>
|
||||
|
||||
<!-- 품목 UPSERT (INSERT or UPDATE) -->
|
||||
<insert id="upsertContractItem" parameterType="map">
|
||||
INSERT INTO CONTRACT_ITEM (
|
||||
OBJID,
|
||||
CONTRACT_OBJID,
|
||||
SEQ,
|
||||
PART_OBJID,
|
||||
PART_NO,
|
||||
PART_NAME,
|
||||
QUANTITY,
|
||||
DUE_DATE,
|
||||
CUSTOMER_REQUEST,
|
||||
RETURN_REASON,
|
||||
REGDATE,
|
||||
WRITER,
|
||||
STATUS
|
||||
) VALUES (
|
||||
#{objId},
|
||||
#{contractObjId},
|
||||
#{seq},
|
||||
#{partObjId},
|
||||
#{partNo},
|
||||
#{partName},
|
||||
#{quantity},
|
||||
#{dueDate},
|
||||
#{customerRequest},
|
||||
#{returnReason},
|
||||
NOW(),
|
||||
#{writer},
|
||||
'ACTIVE'
|
||||
)
|
||||
ON CONFLICT (OBJID) DO UPDATE
|
||||
SET
|
||||
SEQ = #{seq},
|
||||
PART_OBJID = #{partObjId},
|
||||
PART_NO = #{partNo},
|
||||
PART_NAME = #{partName},
|
||||
QUANTITY = #{quantity},
|
||||
DUE_DATE = #{dueDate},
|
||||
CUSTOMER_REQUEST = #{customerRequest},
|
||||
RETURN_REASON = #{returnReason},
|
||||
CHGDATE = NOW(),
|
||||
CHG_USER_ID = #{writer},
|
||||
STATUS = 'ACTIVE'
|
||||
</insert>
|
||||
|
||||
<!-- S/N UPSERT (INSERT or UPDATE) -->
|
||||
<insert id="upsertContractItemSerial" parameterType="map">
|
||||
INSERT INTO CONTRACT_ITEM_SERIAL (
|
||||
OBJID,
|
||||
ITEM_OBJID,
|
||||
SEQ,
|
||||
SERIAL_NO,
|
||||
REGDATE,
|
||||
WRITER,
|
||||
STATUS
|
||||
) VALUES (
|
||||
#{objId},
|
||||
#{itemObjId},
|
||||
#{seq},
|
||||
#{serialNo},
|
||||
NOW(),
|
||||
#{writer},
|
||||
'ACTIVE'
|
||||
)
|
||||
ON CONFLICT (ITEM_OBJID, SERIAL_NO) DO UPDATE
|
||||
SET
|
||||
SEQ = #{seq},
|
||||
STATUS = 'ACTIVE'
|
||||
</insert>
|
||||
|
||||
<!-- 프론트에서 전달되지 않은 품목들 INACTIVE 처리 -->
|
||||
<update id="inactivateRemovedItems" parameterType="map">
|
||||
UPDATE CONTRACT_ITEM
|
||||
SET STATUS = 'INACTIVE',
|
||||
CHGDATE = NOW(),
|
||||
CHG_USER_ID = #{userId}
|
||||
WHERE CONTRACT_OBJID = #{contractObjId}
|
||||
AND STATUS = 'ACTIVE'
|
||||
<if test="currentItemObjIds != null and currentItemObjIds.size() > 0">
|
||||
AND OBJID NOT IN
|
||||
<foreach collection="currentItemObjIds" item="objId" open="(" separator="," close=")">
|
||||
#{objId}
|
||||
</foreach>
|
||||
</if>
|
||||
</update>
|
||||
|
||||
<!-- 견적의 품목 전체 삭제 (상태 변경) - 기존 방식, 호환성 유지 -->
|
||||
<update id="deleteContractItems" parameterType="map">
|
||||
UPDATE CONTRACT_ITEM
|
||||
SET STATUS = 'INACTIVE',
|
||||
CHGDATE = NOW(),
|
||||
CHG_USER_ID = #{userId}
|
||||
WHERE CONTRACT_OBJID = #{contractObjId}
|
||||
AND STATUS = 'ACTIVE'
|
||||
</update>
|
||||
|
||||
<!-- 품목의 S/N 전체 삭제 (상태 변경) -->
|
||||
<update id="deleteContractItemSerials" parameterType="map">
|
||||
UPDATE CONTRACT_ITEM_SERIAL
|
||||
SET STATUS = 'INACTIVE'
|
||||
WHERE ITEM_OBJID IN (
|
||||
SELECT OBJID
|
||||
FROM CONTRACT_ITEM
|
||||
WHERE CONTRACT_OBJID = #{contractObjId}
|
||||
AND STATUS = 'ACTIVE'
|
||||
)
|
||||
</update>
|
||||
|
||||
<!-- 특정 품목 삭제 (상태 변경) -->
|
||||
<update id="deleteContractItem" parameterType="map">
|
||||
UPDATE CONTRACT_ITEM
|
||||
SET STATUS = 'INACTIVE',
|
||||
CHGDATE = NOW(),
|
||||
CHG_USER_ID = #{userId}
|
||||
WHERE OBJID = #{itemObjId}
|
||||
</update>
|
||||
|
||||
<!-- 특정 품목의 S/N 전체 삭제 -->
|
||||
<update id="deleteItemSerials" parameterType="map">
|
||||
UPDATE CONTRACT_ITEM_SERIAL
|
||||
SET STATUS = 'INACTIVE'
|
||||
WHERE ITEM_OBJID = #{itemObjId}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user