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 @@ 판매 등록 - +