From 6bc7a8413567d6c55ccd1e8104cbd2757063aa86 Mon Sep 17 00:00:00 2001 From: Johngreen Date: Wed, 22 Oct 2025 19:37:35 +0900 Subject: [PATCH] =?UTF-8?q?=20=ED=8C=90=EB=A7=A4=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=EC=9D=98=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=EB=82=A9=EA=B8=B0,=20=EA=B3=A0=EA=B0=9D=EC=82=AC=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=82=AC=ED=95=AD,=20=EB=B0=9C=EC=A3=BC=EC=9D=BC,=20?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=EC=84=9C=20=EC=BB=AC=EB=9F=BC=EC=9D=98=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=EB=84=98=EC=96=B4=EC=98=A4=EA=B2=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salesmgmt/mapper/salesNcollectMgmt.xml | 407 +++++------------- .../salesmgmt/salesMgmt/salesMgmtList.jsp | 2 +- .../view/salesmgmt/salesMgmt/salesRegForm.jsp | 280 ++++++------ .../SalesNcollectMgmtController.java | 33 +- .../salesmgmt/mapper/salesNcollectMgmt.xml | 407 +++++------------- .../service/SalesNcollectMgmtService.java | 2 +- 6 files changed, 384 insertions(+), 747 deletions(-) diff --git a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index 3fd34e5..da8e146 100644 --- a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -814,9 +814,10 @@ - /* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (리스트와 동일한 구조) */ + /* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (sales_registration 테이블 사용) */ SELECT T.PROJECT_NO, CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE, @@ -1383,160 +1319,47 @@ 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건") - 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, + -- 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, - T.DUE_DATE AS REQUEST_DATE, - T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST, + COALESCE(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 + ) 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} diff --git a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesMgmtList.jsp b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesMgmtList.jsp index ac37e6f..4956074 100644 --- a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesMgmtList.jsp +++ b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesMgmtList.jsp @@ -83,7 +83,7 @@ var columns = [ {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '주문서첨부', field : 'ORDER_ATTACH', formatter: fnc_subInfoValueFormatter, cellClick: function(e, cell){ - var objid = cell.getData().PROJECT_NO || cell.getData().SALE_NO; + var objid = cell.getData().CONTRACT_OBJID || cell.getData().SALE_NO; if(objid){ fn_FileRegist(objid, "ORDER_DOC", "주문서"); } diff --git a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesRegForm.jsp b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesRegForm.jsp index f297bf0..497e0ac 100644 --- a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesRegForm.jsp +++ b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesRegForm.jsp @@ -1,5 +1,5 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ include file="/init.jsp" %> +<%@ include file="/init_new.jsp" %> @@ -7,26 +7,7 @@ 판매 등록 - +