수주/매출 관리 기능 수정 - ORDER_DATE 필드 추가 및 수주 합계 정보 수정
This commit is contained in:
@@ -463,7 +463,7 @@
|
||||
,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='ORDER_DOC' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT
|
||||
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T.OBJID AND DOC_TYPE IN ('FTC_ORDER', 'ORDER') 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'
|
||||
@@ -574,7 +574,7 @@
|
||||
AND DUE_DATE != ''
|
||||
) AS OTHER_DUE_DATE_COUNT
|
||||
,(
|
||||
SELECT RETURN_REASON
|
||||
SELECT CODE_NAME(RETURN_REASON)
|
||||
FROM CONTRACT_ITEM
|
||||
WHERE CONTRACT_OBJID = T.OBJID
|
||||
AND STATUS = 'ACTIVE'
|
||||
@@ -942,9 +942,7 @@
|
||||
,CONTRACT_DEL_DATE
|
||||
,CONTRACT_COMPANY
|
||||
,CONTRACT_DATE
|
||||
,PO_NO
|
||||
,MANUFACTURE_PLANT
|
||||
,CONTRACT_RESULT
|
||||
,PROJECT_NAME
|
||||
,SPEC_USER_ID
|
||||
,SPEC_PLAN_DATE
|
||||
@@ -968,12 +966,7 @@
|
||||
,QUANTITY
|
||||
,CUSTOMER_REQUEST
|
||||
,EXCHANGE_RATE
|
||||
,ORDER_DATE
|
||||
,ORDER_UNIT_PRICE
|
||||
,ORDER_SUPPLY_PRICE
|
||||
,ORDER_VAT
|
||||
,ORDER_TOTAL_AMOUNT
|
||||
)
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
#{objId}
|
||||
@@ -1009,9 +1002,7 @@
|
||||
,#{contract_del_date}
|
||||
,#{contract_company}
|
||||
,#{contract_date}
|
||||
,#{po_no}
|
||||
,#{manufacture_plant}
|
||||
,#{contract_result}
|
||||
,#{project_name}
|
||||
,#{spec_user_id}
|
||||
,#{spec_plan_date}
|
||||
@@ -1035,12 +1026,7 @@
|
||||
,#{quantity}
|
||||
,#{customer_request}
|
||||
,#{exchange_rate}
|
||||
,#{order_date}
|
||||
,#{unit_price}
|
||||
,#{supply_price}
|
||||
,#{vat}
|
||||
,#{total_amount}
|
||||
)
|
||||
)
|
||||
ON CONFLICT (OBJID) DO
|
||||
UPDATE
|
||||
SET
|
||||
@@ -1073,11 +1059,9 @@
|
||||
,CONTRACT_DEL_DATE = #{contract_del_date}
|
||||
,CONTRACT_COMPANY = #{contract_company}
|
||||
,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_USER_ID = #{spec_user_id}
|
||||
,SPEC_PLAN_DATE = #{spec_plan_date}
|
||||
,SPEC_COMP_DATE = #{spec_comp_date}
|
||||
,SPEC_RESULT_CD = #{spec_result_cd}
|
||||
@@ -1098,12 +1082,7 @@
|
||||
,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}
|
||||
,EXCHANGE_RATE = #{exchange_rate}
|
||||
</update>
|
||||
|
||||
<update id="saveContractMgmtInfo_old" parameterType="map">
|
||||
@@ -3979,6 +3958,7 @@ ORDER BY ASM.SUPPLY_NAME
|
||||
TEMPLATE_OBJID,
|
||||
SEQ,
|
||||
CATEGORY,
|
||||
PART_OBJID,
|
||||
DESCRIPTION,
|
||||
SPECIFICATION,
|
||||
QUANTITY,
|
||||
@@ -4001,6 +3981,7 @@ ORDER BY ASM.SUPPLY_NAME
|
||||
TEMPLATE_OBJID,
|
||||
SEQ,
|
||||
CATEGORY,
|
||||
PART_OBJID,
|
||||
DESCRIPTION,
|
||||
SPECIFICATION,
|
||||
QUANTITY,
|
||||
@@ -4115,6 +4096,7 @@ WHERE
|
||||
TEMPLATE_OBJID,
|
||||
SEQ,
|
||||
CATEGORY,
|
||||
PART_OBJID,
|
||||
DESCRIPTION,
|
||||
SPECIFICATION,
|
||||
QUANTITY,
|
||||
@@ -4128,18 +4110,13 @@ WHERE
|
||||
#{template_objid},
|
||||
(item->>'seq')::INTEGER,
|
||||
item->>'category',
|
||||
item->>'part_objid',
|
||||
item->>'description',
|
||||
item->>'specification',
|
||||
item->>'quantity',
|
||||
item->>'unit',
|
||||
CASE
|
||||
WHEN item->>'unit_price' = '' THEN NULL
|
||||
ELSE (item->>'unit_price')::NUMERIC
|
||||
END,
|
||||
CASE
|
||||
WHEN item->>'amount' = '' THEN NULL
|
||||
ELSE (item->>'amount')::NUMERIC
|
||||
END,
|
||||
item->>'unit_price',
|
||||
item->>'amount',
|
||||
item->>'note',
|
||||
item->>'remark'
|
||||
FROM json_array_elements(#{items_json}::json) AS item
|
||||
@@ -4707,4 +4684,14 @@ WHERE
|
||||
WHERE ITEM_OBJID = #{itemObjId}
|
||||
</update>
|
||||
|
||||
<!-- 고객사 담당자 정보 조회 -->
|
||||
<select id="getCustomerContactInfo" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
REG_ID AS CONTACT_PERSON,
|
||||
SUPPLY_TEL_NO AS CELL_PHONE,
|
||||
EMAIL
|
||||
FROM SUPPLY_MNG
|
||||
WHERE OBJID = #{customerObjId}::NUMERIC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -814,9 +814,10 @@
|
||||
|
||||
<!-- 매출관리 그리드 목록 - project_mgmt 테이블 기반 조회 (S/N, 유무상 포함) -->
|
||||
<select id="getSalesMgmtGridList" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getSalesMgmtGridList - project_mgmt 테이블 기반 조회 (S/N, 유무상 포함) */
|
||||
/* salesNcollectMgmt.getSalesMgmtGridList - sales_registration LEFT JOIN으로 최적화 */
|
||||
SELECT
|
||||
T.PROJECT_NO,
|
||||
T.CONTRACT_OBJID,
|
||||
CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE,
|
||||
CODE_NAME(T.PRODUCT) AS PRODUCT_TYPE,
|
||||
CODE_NAME(T.AREA_CD) AS NATION,
|
||||
@@ -829,145 +830,68 @@
|
||||
ELSE CM.PAID_TYPE
|
||||
END
|
||||
FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PAYMENT_TYPE,
|
||||
T.PART_NO AS PRODUCT_NO,
|
||||
T.PART_NAME AS PRODUCT_NAME,
|
||||
COALESCE(
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) = 0 THEN ''
|
||||
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
|
||||
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
|
||||
END
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
), ''
|
||||
) AS SERIAL_NO,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
T.DUE_DATE AS REQUEST_DATE,
|
||||
T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST,
|
||||
T.PART_NO AS PRODUCT_NO,
|
||||
T.PART_NAME AS PRODUCT_NAME,
|
||||
-- S/N: CONTRACT_ITEM_SERIAL에서만 조회 (품목별로 정확하게 매칭)
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) = 0 THEN ''
|
||||
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
|
||||
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
|
||||
END
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = T.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
AND CIS.SERIAL_NO IS NOT NULL) AS SERIAL_NO,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
-- 요청납기: CONTRACT_ITEM 우선, 없으면 PROJECT_MGMT, 없으면 CONTRACT_MGMT
|
||||
COALESCE(
|
||||
(SELECT CI.DUE_DATE
|
||||
FROM CONTRACT_ITEM CI
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = T.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'),
|
||||
T.DUE_DATE,
|
||||
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)
|
||||
) AS REQUEST_DATE,
|
||||
COALESCE(T.CUSTOMER_PROJECT_NAME, (SELECT CM.customer_request FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS CUSTOMER_REQUEST,
|
||||
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
|
||||
T.PO_NO,
|
||||
T.CONTRACT_DATE AS ORDER_DATE,
|
||||
COALESCE(T.CONTRACT_DATE, (SELECT CM.order_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS ORDER_DATE,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM ATTACH_FILE_INFO
|
||||
WHERE TARGET_OBJID = T.OBJID::VARCHAR
|
||||
WHERE TARGET_OBJID = T.CONTRACT_OBJID
|
||||
AND DOC_TYPE='ORDER_DOC'
|
||||
AND UPPER(STATUS) = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
|
||||
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
|
||||
COALESCE((
|
||||
SELECT SL.SHIPPING_STATUS
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), '') AS SHIPPING_ORDER_STATUS,
|
||||
COALESCE((
|
||||
SELECT SL.SPLIT_QUANTITY
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_QUANTITY,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_UNIT_PRICE
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_SUPPLY_PRICE
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_VAT
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_VAT,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_TOTAL_AMOUNT
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_TOTAL_AMOUNT
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_CURRENCY
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_EXCHANGE_RATE
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
|
||||
COALESCE((
|
||||
SELECT TO_CHAR(SL.SHIPPING_DATE, 'YYYY-MM-DD')
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), '') AS SHIPPING_DATE,
|
||||
COALESCE((
|
||||
SELECT SL.SHIPPING_METHOD
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), '') AS SHIPPING_METHOD,
|
||||
COALESCE((
|
||||
SELECT U.USER_NAME
|
||||
FROM SHIPMENT_LOG SL
|
||||
LEFT JOIN USER_INFO U ON U.USER_ID = SL.MANAGER_USER_ID
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.PM_USER_ID)) AS MANAGER,
|
||||
COALESCE((
|
||||
SELECT SL.INCOTERMS
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
|
||||
), '') AS INCOTERMS,
|
||||
'N' AS SALES_STATUS,
|
||||
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
|
||||
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
|
||||
-- 판매 관련 필드들 (sales_registration 테이블에서 한 번에 가져오기)
|
||||
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
||||
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
|
||||
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
CODE_NAME(COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY)) AS SALES_CURRENCY_NAME,
|
||||
COALESCE(SR.sales_exchange_rate, T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
|
||||
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
|
||||
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
|
||||
COALESCE(
|
||||
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = SR.manager_user_id),
|
||||
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.PM_USER_ID)
|
||||
) AS MANAGER,
|
||||
COALESCE(SR.incoterms, '') AS INCOTERMS,
|
||||
T.SALES_STATUS,
|
||||
T.OBJID::VARCHAR AS SALE_NO,
|
||||
'ORIGINAL' AS RECORD_TYPE,
|
||||
'' AS SPLIT_LOG_ID
|
||||
FROM PROJECT_MGMT AS T
|
||||
LEFT JOIN sales_registration SR ON T.PROJECT_NO = SR.project_no
|
||||
WHERE 1 = 1
|
||||
<if test="orderType != null and orderType != ''">
|
||||
AND T.CATEGORY_CD = #{orderType}
|
||||
@@ -1289,56 +1213,51 @@
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!--
|
||||
<!--
|
||||
/**
|
||||
* 판매 등록 저장 (shipment_log 테이블 사용)
|
||||
* 판매 등록 저장 (sales_registration 테이블 사용)
|
||||
* INSERT 또는 UPDATE (ON CONFLICT로 중복 방지)
|
||||
* @since 2025.10.22
|
||||
* @author johngreen
|
||||
* @version 1.0
|
||||
* @version 1.1
|
||||
**/
|
||||
-->
|
||||
<insert id="insertSaleRegistration" parameterType="map">
|
||||
/* salesNcollectMgmt.insertSaleRegistration - shipment_log에 판매 데이터 저장 */
|
||||
INSERT INTO shipment_log (
|
||||
target_objid,
|
||||
log_type,
|
||||
log_message,
|
||||
split_quantity,
|
||||
shipping_status,
|
||||
/* salesNcollectMgmt.insertSaleRegistration - sales_registration에 판매 데이터 저장 */
|
||||
INSERT INTO sales_registration (
|
||||
project_no,
|
||||
shipping_order_status,
|
||||
serial_no,
|
||||
sales_quantity,
|
||||
sales_unit_price,
|
||||
sales_supply_price,
|
||||
sales_vat,
|
||||
sales_total_amount,
|
||||
sales_currency,
|
||||
sales_exchange_rate,
|
||||
serial_no,
|
||||
shipping_date,
|
||||
shipping_method,
|
||||
manager_user_id,
|
||||
incoterms,
|
||||
is_split_record,
|
||||
reg_date,
|
||||
reg_user_id
|
||||
) VALUES (
|
||||
#{orderNo},
|
||||
'SALES_REGISTRATION',
|
||||
'판매 등록',
|
||||
#{salesQuantity}::integer,
|
||||
<choose>
|
||||
<when test="shippingOrderStatus != null and shippingOrderStatus != ''">
|
||||
#{shippingOrderStatus},
|
||||
</when>
|
||||
<otherwise>
|
||||
'',
|
||||
</otherwise>
|
||||
</choose>
|
||||
<choose>
|
||||
<when test="shippingOrderStatus != null and shippingOrderStatus != ''">
|
||||
#{shippingOrderStatus},
|
||||
</when>
|
||||
<otherwise>
|
||||
'',
|
||||
</otherwise>
|
||||
</choose>
|
||||
#{serialNo},
|
||||
#{salesQuantity}::integer,
|
||||
#{salesUnitPrice}::numeric,
|
||||
#{salesSupplyPrice}::numeric,
|
||||
#{salesVat}::numeric,
|
||||
#{salesTotalAmount}::numeric,
|
||||
#{salesCurrency},
|
||||
#{salesExchangeRate}::numeric,
|
||||
#{serialNo},
|
||||
<choose>
|
||||
<when test="shippingDate != null and shippingDate != ''">
|
||||
TO_DATE(#{shippingDate}, 'YYYY-MM-DD'),
|
||||
@@ -1350,10 +1269,25 @@
|
||||
#{shippingMethod},
|
||||
#{manager},
|
||||
#{incoterms},
|
||||
false,
|
||||
NOW(),
|
||||
#{cretEmpNo}
|
||||
)
|
||||
ON CONFLICT (project_no)
|
||||
DO UPDATE SET
|
||||
shipping_order_status = EXCLUDED.shipping_order_status,
|
||||
serial_no = EXCLUDED.serial_no,
|
||||
sales_quantity = EXCLUDED.sales_quantity,
|
||||
sales_unit_price = EXCLUDED.sales_unit_price,
|
||||
sales_supply_price = EXCLUDED.sales_supply_price,
|
||||
sales_vat = EXCLUDED.sales_vat,
|
||||
sales_total_amount = EXCLUDED.sales_total_amount,
|
||||
sales_currency = EXCLUDED.sales_currency,
|
||||
sales_exchange_rate = EXCLUDED.sales_exchange_rate,
|
||||
shipping_date = EXCLUDED.shipping_date,
|
||||
shipping_method = EXCLUDED.shipping_method,
|
||||
manager_user_id = EXCLUDED.manager_user_id,
|
||||
incoterms = EXCLUDED.incoterms,
|
||||
upd_date = NOW(),
|
||||
upd_user_id = EXCLUDED.reg_user_id
|
||||
</insert>
|
||||
|
||||
<!--
|
||||
@@ -1366,7 +1300,7 @@
|
||||
**/
|
||||
-->
|
||||
<select id="getSaleInfo" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (리스트와 동일한 구조) */
|
||||
/* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (sales_registration 테이블 사용) */
|
||||
SELECT
|
||||
T.PROJECT_NO,
|
||||
CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE,
|
||||
@@ -1381,163 +1315,59 @@
|
||||
ELSE CM.PAID_TYPE
|
||||
END
|
||||
FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PAYMENT_TYPE,
|
||||
T.PART_NO AS PRODUCT_NO,
|
||||
T.PART_NAME AS PRODUCT_NAME,
|
||||
-- S/N 정보 (리스트와 동일: "첫번째 S/N 외 N건")
|
||||
T.PART_NO AS PRODUCT_NO,
|
||||
T.PART_NAME AS PRODUCT_NAME,
|
||||
-- S/N 정보 (CONTRACT_ITEM_SERIAL에서만 조회, 품목별로 정확하게 매칭)
|
||||
(SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SEQ)
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = T.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
AND CIS.SERIAL_NO IS NOT NULL
|
||||
) AS SERIAL_NO,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
-- 요청납기: CONTRACT_ITEM 우선, 없으면 PROJECT_MGMT, 없으면 CONTRACT_MGMT
|
||||
COALESCE(
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) = 0 THEN ''
|
||||
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
|
||||
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
|
||||
END
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
), ''
|
||||
) AS SERIAL_NO,
|
||||
-- S/N 전체 목록 JSON 형식으로
|
||||
COALESCE(
|
||||
(SELECT
|
||||
JSON_AGG(
|
||||
JSON_BUILD_OBJECT(
|
||||
'id', sn_data.row_num,
|
||||
'value', sn_data.serial_no
|
||||
)
|
||||
)::TEXT
|
||||
FROM (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (ORDER BY CIS.SERIAL_NO) AS row_num,
|
||||
CIS.SERIAL_NO AS serial_no
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
AND CIS.SERIAL_NO IS NOT NULL
|
||||
) AS sn_data
|
||||
), '[]'
|
||||
) AS SERIAL_NO_LIST,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
T.DUE_DATE AS REQUEST_DATE,
|
||||
T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST,
|
||||
(SELECT CI.DUE_DATE
|
||||
FROM CONTRACT_ITEM CI
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = T.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'),
|
||||
T.DUE_DATE,
|
||||
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)
|
||||
) AS REQUEST_DATE,
|
||||
COALESCE(T.CUSTOMER_PROJECT_NAME, (SELECT CM.customer_request FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS CUSTOMER_REQUEST,
|
||||
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
|
||||
T.PO_NO,
|
||||
T.CONTRACT_DATE AS ORDER_DATE,
|
||||
COALESCE(T.CONTRACT_DATE, (SELECT CM.order_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS ORDER_DATE,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM ATTACH_FILE_INFO
|
||||
WHERE TARGET_OBJID = T.OBJID::VARCHAR
|
||||
WHERE TARGET_OBJID = T.CONTRACT_OBJID
|
||||
AND DOC_TYPE='ORDER_DOC'
|
||||
AND UPPER(STATUS) = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
|
||||
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
|
||||
-- 판매 관련 필드들 (shipment_log에서 가져오기)
|
||||
COALESCE((
|
||||
SELECT SL.SHIPPING_STATUS
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), '') AS SHIPPING_ORDER_STATUS,
|
||||
COALESCE((
|
||||
SELECT SL.SPLIT_QUANTITY
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_QUANTITY,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_UNIT_PRICE
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_SUPPLY_PRICE
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_VAT
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_VAT,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_TOTAL_AMOUNT
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_TOTAL_AMOUNT
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_CURRENCY
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
COALESCE((
|
||||
SELECT SL.SALES_EXCHANGE_RATE
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
|
||||
COALESCE((
|
||||
SELECT TO_CHAR(SL.SHIPPING_DATE, 'YYYY-MM-DD')
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), '') AS SHIPPING_DATE,
|
||||
COALESCE((
|
||||
SELECT SL.SHIPPING_METHOD
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), '') AS SHIPPING_METHOD,
|
||||
COALESCE((
|
||||
SELECT SL.MANAGER_USER_ID
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), T.PM_USER_ID) AS MANAGER,
|
||||
COALESCE((
|
||||
SELECT SL.INCOTERMS
|
||||
FROM SHIPMENT_LOG SL
|
||||
WHERE SL.TARGET_OBJID = T.PROJECT_NO
|
||||
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
|
||||
ORDER BY SL.REG_DATE DESC
|
||||
LIMIT 1
|
||||
), '') AS INCOTERMS
|
||||
FROM PROJECT_MGMT AS T
|
||||
WHERE T.PROJECT_NO = #{orderNo}
|
||||
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
|
||||
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
|
||||
-- 판매 관련 필드들 (sales_registration 테이블에서 가져오기)
|
||||
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
||||
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
|
||||
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
COALESCE(NULLIF(SR.sales_currency, ''), CM.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
CODE_NAME(COALESCE(NULLIF(SR.sales_currency, ''), CM.CONTRACT_CURRENCY)) AS SALES_CURRENCY_NAME,
|
||||
COALESCE(NULLIF(SR.sales_exchange_rate, 0), CM.EXCHANGE_RATE::numeric, 0) AS SALES_EXCHANGE_RATE,
|
||||
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
|
||||
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
|
||||
COALESCE(SR.manager_user_id, T.PM_USER_ID) AS MANAGER,
|
||||
COALESCE(SR.incoterms, '') AS INCOTERMS
|
||||
FROM PROJECT_MGMT AS T
|
||||
LEFT JOIN sales_registration SR ON T.PROJECT_NO = SR.project_no
|
||||
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID::VARCHAR = T.CONTRACT_OBJID
|
||||
WHERE T.PROJECT_NO = #{orderNo}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -171,7 +171,7 @@ var columns = [
|
||||
{headerHozAlign : 'center', hozAlign : 'right', width : '120', title : '판매원화총액', field : 'SALES_TOTAL_AMOUNT_KRW',
|
||||
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: false}
|
||||
},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '판매환종', field : 'SALES_CURRENCY'},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '판매환종', field : 'SALES_CURRENCY_NAME'},
|
||||
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '판매환율', field : 'SALES_EXCHANGE_RATE',
|
||||
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: 2}
|
||||
},
|
||||
|
||||
@@ -109,7 +109,7 @@ var columns = [
|
||||
{headerHozAlign : 'center', hozAlign : 'right', width : '120', title : '판매원화총액', field : 'SALES_TOTAL_AMOUNT_KRW',
|
||||
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: false}
|
||||
},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '판매환종', field : 'SALES_CURRENCY'},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '판매환종', field : 'SALES_CURRENCY_NAME'},
|
||||
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '판매환율', field : 'SALES_EXCHANGE_RATE',
|
||||
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: 2}
|
||||
},
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
$("#manager").val(managerValue).trigger('change');
|
||||
}
|
||||
|
||||
// 판매환종 초기값 설정 (견적환종과 동기화)
|
||||
initializeSalesCurrency();
|
||||
|
||||
// S/N 필드 클릭 이벤트
|
||||
$("#serialNo").click(function() {
|
||||
fn_openSnManagePopup();
|
||||
@@ -99,6 +102,37 @@
|
||||
$("#salesTotalAmount").val(totalAmount);
|
||||
}
|
||||
|
||||
// 판매환종 초기값 설정 (견적환종과 동기화하되, 사용자가 변경 가능)
|
||||
function initializeSalesCurrency() {
|
||||
var existingSalesCurrency = "${saleInfo.SALES_CURRENCY}";
|
||||
var contractCurrency = "${orderInfo.SALES_CURRENCY}"; // 견적환종 (SALES_CURRENCY로 통일)
|
||||
var contractExchangeRate = "${orderInfo.SALES_EXCHANGE_RATE}"; // 견적환율
|
||||
|
||||
console.log("=== 판매환종 초기화 디버그 ===");
|
||||
console.log("기존 판매환종:", existingSalesCurrency);
|
||||
console.log("견적환종:", contractCurrency);
|
||||
console.log("견적환율:", contractExchangeRate);
|
||||
|
||||
// 이미 저장된 판매환종이 있으면 그대로 사용
|
||||
if(existingSalesCurrency && existingSalesCurrency.trim() !== '') {
|
||||
$("#salesCurrency").val(existingSalesCurrency).trigger('change');
|
||||
console.log("기존 판매환종 사용:", existingSalesCurrency);
|
||||
}
|
||||
// 없으면 견적환종을 기본값으로 설정
|
||||
else if(contractCurrency && contractCurrency.trim() !== '') {
|
||||
$("#salesCurrency").val(contractCurrency).trigger('change');
|
||||
|
||||
// 견적환율도 함께 설정
|
||||
if(contractExchangeRate && contractExchangeRate.trim() !== '') {
|
||||
$("#salesExchangeRate").val(contractExchangeRate);
|
||||
}
|
||||
|
||||
console.log("판매환종 자동 설정: " + contractCurrency + " (견적환종과 동기화)");
|
||||
} else {
|
||||
console.log("견적환종이 없습니다. orderInfo를 확인하세요.");
|
||||
}
|
||||
}
|
||||
|
||||
// 환율 변경 시 원화 금액 재계산
|
||||
function fn_recalculateByExchangeRate() {
|
||||
var currency = $("#salesCurrency").val();
|
||||
@@ -580,19 +614,20 @@
|
||||
<input type="number" name="salesTotalAmount" id="salesTotalAmount" style="width:100%; background-color: #f0f0f0;" value="${saleInfo.SALES_TOTAL_AMOUNT}" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for="salesCurrency">판매환종</label></td>
|
||||
<td class="input_sub_title">
|
||||
<select name="salesCurrency" id="salesCurrency" style="width:100%;" class="select2" onchange="fn_recalculateByExchangeRate()">
|
||||
<option value="">선택</option>
|
||||
${codeMap.salesCurrency}
|
||||
</select>
|
||||
</td>
|
||||
<td class="input_title"><label for="salesExchangeRate">판매환율</label></td>
|
||||
<td class="input_sub_title">
|
||||
<input type="number" name="salesExchangeRate" id="salesExchangeRate" style="width:100%;" step="0.01" value="${saleInfo.SALES_EXCHANGE_RATE}" onchange="fn_recalculateByExchangeRate()" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for="salesCurrency">판매환종</label></td>
|
||||
<td class="input_sub_title">
|
||||
<select name="salesCurrency" id="salesCurrency" style="width:100%;" class="select2" onchange="fn_recalculateByExchangeRate()">
|
||||
<option value="">선택</option>
|
||||
${codeMap.salesCurrency}
|
||||
</select>
|
||||
<small style="color:#666;">* 최초 저장 시 견적환종이 자동 설정되며, 변경 가능합니다.</small>
|
||||
</td>
|
||||
<td class="input_title"><label for="salesExchangeRate">판매환율</label></td>
|
||||
<td class="input_sub_title">
|
||||
<input type="number" name="salesExchangeRate" id="salesExchangeRate" style="width:100%;" step="0.01" value="${saleInfo.SALES_EXCHANGE_RATE}" onchange="fn_recalculateByExchangeRate()" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for="incoterms">인도조건</label></td>
|
||||
<td class="input_sub_title">
|
||||
|
||||
@@ -267,20 +267,23 @@ public class SalesNcollectMgmtController {
|
||||
codeMap.put("managerList",
|
||||
salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList"));
|
||||
|
||||
// 기존 판매 정보 조회 후 환종(통화) 공통코드 세팅
|
||||
Map<String, Object> saleInfo = null;
|
||||
String salesCurrency = "";
|
||||
if(paramMap.get("orderNo") != null && !paramMap.get("orderNo").equals("")) {
|
||||
saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
|
||||
request.setAttribute("saleInfo", saleInfo);
|
||||
}
|
||||
// 기존 판매 정보 조회 후 환종(통화) 공통코드 세팅
|
||||
Map<String, Object> saleInfo = null;
|
||||
String salesCurrency = "";
|
||||
if(paramMap.get("orderNo") != null && !paramMap.get("orderNo").equals("")) {
|
||||
saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
|
||||
request.setAttribute("saleInfo", saleInfo);
|
||||
|
||||
// 환종(통화) - 공통코드 0001533
|
||||
codeMap.put("salesCurrency",
|
||||
commonService.bizMakeOptionList("0001533", salesCurrency, "common.getCodeselect"));
|
||||
|
||||
request.setAttribute("codeMap", codeMap);
|
||||
// orderInfo로 견적 정보 전달 (saleInfo가 이미 모든 필요한 정보를 포함)
|
||||
request.setAttribute("orderInfo", saleInfo);
|
||||
}
|
||||
|
||||
// 환종(통화) - 공통코드 0001533
|
||||
codeMap.put("salesCurrency",
|
||||
commonService.bizMakeOptionList("0001533", salesCurrency, "common.getCodeselect"));
|
||||
|
||||
request.setAttribute("codeMap", codeMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -830,36 +830,33 @@
|
||||
ELSE CM.PAID_TYPE
|
||||
END
|
||||
FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PAYMENT_TYPE,
|
||||
T.PART_NO AS PRODUCT_NO,
|
||||
T.PART_NAME AS PRODUCT_NAME,
|
||||
-- S/N: sales_registration 우선, 없으면 CONTRACT_ITEM_SERIAL (모두 "외 몇건" 형태로 표시)
|
||||
COALESCE(
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN SR.serial_no IS NULL OR SR.serial_no = '' THEN ''
|
||||
ELSE
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN array_length(string_to_array(SR.serial_no, ','), 1) = 1 THEN SR.serial_no
|
||||
ELSE (string_to_array(SR.serial_no, ','))[1] || ' 외 ' || (array_length(string_to_array(SR.serial_no, ','), 1) - 1)::TEXT || '건'
|
||||
END
|
||||
)
|
||||
END
|
||||
FROM sales_registration SR WHERE SR.project_no = T.PROJECT_NO
|
||||
),
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) = 0 THEN ''
|
||||
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
|
||||
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
|
||||
END
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID AND UPPER(CIS.STATUS) = 'ACTIVE' AND CIS.SERIAL_NO IS NOT NULL),
|
||||
''
|
||||
) AS SERIAL_NO,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
COALESCE(T.DUE_DATE, (SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS REQUEST_DATE,
|
||||
T.PART_NO AS PRODUCT_NO,
|
||||
T.PART_NAME AS PRODUCT_NAME,
|
||||
-- S/N: CONTRACT_ITEM_SERIAL에서만 조회 (품목별로 정확하게 매칭)
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) = 0 THEN ''
|
||||
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
|
||||
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
|
||||
END
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = T.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
AND CIS.SERIAL_NO IS NOT NULL) AS SERIAL_NO,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
-- 요청납기: CONTRACT_ITEM 우선, 없으면 PROJECT_MGMT, 없으면 CONTRACT_MGMT
|
||||
COALESCE(
|
||||
(SELECT CI.DUE_DATE
|
||||
FROM CONTRACT_ITEM CI
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = T.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'),
|
||||
T.DUE_DATE,
|
||||
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)
|
||||
) AS REQUEST_DATE,
|
||||
COALESCE(T.CUSTOMER_PROJECT_NAME, (SELECT CM.customer_request FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS CUSTOMER_REQUEST,
|
||||
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
|
||||
T.PO_NO,
|
||||
@@ -871,16 +868,17 @@
|
||||
AND UPPER(STATUS) = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
|
||||
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
|
||||
-- 판매 관련 필드들 (sales_registration 테이블에서 한 번에 가져오기)
|
||||
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
||||
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
|
||||
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
COALESCE(SR.sales_exchange_rate, T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
|
||||
-- 판매 관련 필드들 (sales_registration 테이블에서 한 번에 가져오기)
|
||||
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
||||
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
|
||||
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
CODE_NAME(COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY)) AS SALES_CURRENCY_NAME,
|
||||
COALESCE(SR.sales_exchange_rate, T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
|
||||
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
|
||||
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
|
||||
COALESCE(
|
||||
@@ -1317,22 +1315,29 @@
|
||||
ELSE CM.PAID_TYPE
|
||||
END
|
||||
FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PAYMENT_TYPE,
|
||||
T.PART_NO AS PRODUCT_NO,
|
||||
T.PART_NAME AS PRODUCT_NAME,
|
||||
-- S/N 정보 (sales_registration 우선, 없으면 CONTRACT_ITEM_SERIAL에서)
|
||||
COALESCE(
|
||||
SR.serial_no,
|
||||
(SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SERIAL_NO)
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
AND CIS.SERIAL_NO IS NOT NULL
|
||||
),
|
||||
''
|
||||
) AS SERIAL_NO,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
COALESCE(T.DUE_DATE, (SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS REQUEST_DATE,
|
||||
T.PART_NO AS PRODUCT_NO,
|
||||
T.PART_NAME AS PRODUCT_NAME,
|
||||
-- S/N 정보 (CONTRACT_ITEM_SERIAL에서만 조회, 품목별로 정확하게 매칭)
|
||||
(SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SEQ)
|
||||
FROM CONTRACT_ITEM CI
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = T.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
AND CIS.SERIAL_NO IS NOT NULL
|
||||
) AS SERIAL_NO,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
-- 요청납기: CONTRACT_ITEM 우선, 없으면 PROJECT_MGMT, 없으면 CONTRACT_MGMT
|
||||
COALESCE(
|
||||
(SELECT CI.DUE_DATE
|
||||
FROM CONTRACT_ITEM CI
|
||||
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = T.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'),
|
||||
T.DUE_DATE,
|
||||
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)
|
||||
) AS REQUEST_DATE,
|
||||
COALESCE(T.CUSTOMER_PROJECT_NAME, (SELECT CM.customer_request FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS CUSTOMER_REQUEST,
|
||||
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
|
||||
T.PO_NO,
|
||||
@@ -1344,23 +1349,25 @@
|
||||
AND UPPER(STATUS) = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
|
||||
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
|
||||
-- 판매 관련 필드들 (sales_registration 테이블에서 가져오기)
|
||||
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
||||
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
|
||||
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
COALESCE(SR.sales_exchange_rate, T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
|
||||
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
|
||||
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
|
||||
COALESCE(SR.manager_user_id, T.PM_USER_ID) AS MANAGER,
|
||||
COALESCE(SR.incoterms, '') AS INCOTERMS
|
||||
FROM PROJECT_MGMT AS T
|
||||
LEFT JOIN sales_registration SR ON T.PROJECT_NO = SR.project_no
|
||||
WHERE T.PROJECT_NO = #{orderNo}
|
||||
-- 판매 관련 필드들 (sales_registration 테이블에서 가져오기)
|
||||
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
||||
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
|
||||
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
COALESCE(NULLIF(SR.sales_currency, ''), CM.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
CODE_NAME(COALESCE(NULLIF(SR.sales_currency, ''), CM.CONTRACT_CURRENCY)) AS SALES_CURRENCY_NAME,
|
||||
COALESCE(NULLIF(SR.sales_exchange_rate, 0), CM.EXCHANGE_RATE::numeric, 0) AS SALES_EXCHANGE_RATE,
|
||||
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
|
||||
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
|
||||
COALESCE(SR.manager_user_id, T.PM_USER_ID) AS MANAGER,
|
||||
COALESCE(SR.incoterms, '') AS INCOTERMS
|
||||
FROM PROJECT_MGMT AS T
|
||||
LEFT JOIN sales_registration SR ON T.PROJECT_NO = SR.project_no
|
||||
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID::VARCHAR = T.CONTRACT_OBJID
|
||||
WHERE T.PROJECT_NO = #{orderNo}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user