From 2ee76a8f20b9bdc70616bec5dabdde20eca88319 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Tue, 23 Dec 2025 16:05:49 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=9E=85=EA=B3=A0=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=9C=EC=A3=BC=EA=B8=88=EC=95=A1=20=ED=91=9C=EC=8B=9C=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deliveryMngAcceptanceList.jsp | 12 ++++--- src/com/pms/mapper/purchaseOrder.xml | 32 +++++++++++-------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptanceList.jsp b/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptanceList.jsp index 1983352..da96cd2 100644 --- a/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptanceList.jsp +++ b/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptanceList.jsp @@ -86,7 +86,8 @@ $(document).ready(function(){ var columns = [ // 요구사항: 품의서 No, 발주서 No, 프로젝트번호, 품번, 품명, 공급업체, 발주수량, 입고수량, 미입고수량, 검사성적서, 입고결과 {title:'TOTAL_SUPPLY_PRICE' ,field:'TOTAL_SUPPLY_PRICE' ,visible:false, frozen:true}, - {title:'TOTAL_DELIVERY_PRICE' ,field:'TOTAL_DELIVERY_PRICE' ,visible:false, frozen:true}, + {title:'TOTAL_DELIVERY_PRICE' ,field:'TOTAL_DELIVERY_PRICE' ,visible:false, frozen:true}, + {title:'TOTAL_NOT_DELIVERY_PRICE',field:'TOTAL_NOT_DELIVERY_PRICE',visible:false, frozen:true}, {headerHozAlign : 'center', hozAlign : 'center', minWidth : 130, widthGrow : 1, title : '품의서 No', field : 'PROPOSAL_NO', formatter: fnc_createGridAnchorTag, cellClick : function(e, cell) { @@ -179,17 +180,18 @@ function fn_calculateTotalAmount(){ // 현재 그리드에 표시된 데이터 가져오기 var data = _tabulGrid.getData(); - var totalOrderAmount = 0; // 총 발주금액 + var totalOrderAmount = 0; // 총 발주금액 var totalDeliveredAmount = 0; // 입고금액 var totalNotDeliveredAmount = 0; // 미입고금액 if(data.length > 0) { data.forEach(function(row) { - var rowTotalPrice = parseFloat(row.TOTAL_SUPPLY_PRICE || 0); + // SQL에서 계산된 값 사용 + var rowSupplyPrice = parseFloat(row.TOTAL_SUPPLY_PRICE || 0); var rowDeliveredPrice = parseFloat(row.TOTAL_DELIVERY_PRICE || 0); - var rowNotDeliveredPrice = rowTotalPrice - rowDeliveredPrice; + var rowNotDeliveredPrice = parseFloat(row.TOTAL_NOT_DELIVERY_PRICE || 0); - totalOrderAmount += rowTotalPrice; + totalOrderAmount += rowSupplyPrice; totalDeliveredAmount += rowDeliveredPrice; totalNotDeliveredAmount += rowNotDeliveredPrice; }); diff --git a/src/com/pms/mapper/purchaseOrder.xml b/src/com/pms/mapper/purchaseOrder.xml index 13aacec..77b36e4 100644 --- a/src/com/pms/mapper/purchaseOrder.xml +++ b/src/com/pms/mapper/purchaseOrder.xml @@ -4293,7 +4293,8 @@ SELECT POM.OBJID ,POM.TOTAL_PRICE ,POM.DISCOUNT_PRICE ,POM.TOTAL_SUPPLY_UNIT_PRICE - ,POM.TOTAL_SUPPLY_PRICE + -- ,POM.TOTAL_SUPPLY_PRICE + ,S1.TOTAL_SUPPLY_PRICE ,POM.NEGO_RATE ,POM.MULTI_MASTER_YN ,POM.MULTI_YN @@ -4304,6 +4305,7 @@ SELECT POM.OBJID ,S1.CUR_DELIVERY_DATE ,S1.TOTAL_DELIVERY_QTY ,S1.TOTAL_DELIVERY_PRICE + ,S1.TOTAL_NOT_DELIVERY_PRICE ,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY )) AS NON_DELIVERY_QTY @@ -4355,19 +4357,23 @@ SELECT POM.OBJID LEFT OUTER JOIN( SELECT POP.PURCHASE_ORDER_MASTER_OBJID ,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY - ,MAX(DH.RECEIPT_DATE) AS CUR_DELIVERY_DATE - ,SUM(DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY - ,SUM(pop.partner_price::NUMERIC * DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_PRICE - - - + ,MAX(AP_AGG.MAX_RECEIPT_DATE) AS CUR_DELIVERY_DATE + ,SUM(COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0)) AS TOTAL_DELIVERY_QTY + -- 발주금액 = 단가 × 발주수량 + ,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * COALESCE(POP.ORDER_QTY::NUMERIC, 0)) AS TOTAL_SUPPLY_PRICE + -- 입고금액 = 단가 × 입고수량 + ,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0)) AS TOTAL_DELIVERY_PRICE + -- 미입고금액 = 단가 × (발주수량 - 입고수량) + ,SUM(COALESCE(POP.PARTNER_PRICE::NUMERIC, 0) * (COALESCE(POP.ORDER_QTY::NUMERIC, 0) - COALESCE(AP_AGG.SUM_RECEIPT_QTY, 0))) AS TOTAL_NOT_DELIVERY_PRICE FROM PURCHASE_ORDER_PART POP - LEFT OUTER JOIN ARRIVAL_PLAN DH - ON POP.OBJID = DH.ORDER_PART_OBJID - - + LEFT OUTER JOIN ( + -- ARRIVAL_PLAN을 ORDER_PART_OBJID별로 먼저 집계 + SELECT ORDER_PART_OBJID + ,SUM(RECEIPT_QTY::NUMERIC) AS SUM_RECEIPT_QTY + ,MAX(RECEIPT_DATE) AS MAX_RECEIPT_DATE + FROM ARRIVAL_PLAN + GROUP BY ORDER_PART_OBJID + ) AP_AGG ON POP.OBJID = AP_AGG.ORDER_PART_OBJID GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID ) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID LEFT OUTER JOIN PROJECT_MGMT AS CM From bfc9d768c8947c5ff4079b06077d4e81af855f87 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Tue, 23 Dec 2025 16:31:08 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EB=B0=98=EC=A0=9C=ED=92=88,=20=EC=9B=90?= =?UTF-8?q?=EC=9E=90=EC=9E=AC=20=EC=86=8C=EC=9A=94=EB=9F=89=20=EC=97=A0?= =?UTF-8?q?=EB=B4=84=EC=84=A0=ED=83=9D=20=ED=92=88=EB=AA=85=EC=9E=90?= =?UTF-8?q?=EB=8F=99=ED=91=9C=EC=8B=9C=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rawMaterialRequirementList.jsp | 17 ++++++++++---- .../semiProductRequirementList.jsp | 17 ++++++++++---- .../ProductionPlanningController.java | 8 +++++++ src/com/pms/mapper/productionplanning.xml | 11 +++++++++ .../service/ProductionPlanningService.java | 23 +++++++++++++++++++ 5 files changed, 68 insertions(+), 8 deletions(-) diff --git a/WebContent/WEB-INF/view/productionplanning/rawMaterialRequirementList.jsp b/WebContent/WEB-INF/view/productionplanning/rawMaterialRequirementList.jsp index f99f6c6..9aa3ab4 100644 --- a/WebContent/WEB-INF/view/productionplanning/rawMaterialRequirementList.jsp +++ b/WebContent/WEB-INF/view/productionplanning/rawMaterialRequirementList.jsp @@ -46,8 +46,10 @@ var resultGrid; var grid; // 입력 행 번호 var rowSeq = 0; -// M-BOM 옵션 데이터 +// M-BOM 옵션 데이터 (셀렉트박스용) var mbomOptionsData = {}; +// M-BOM 품명 데이터 (OBJID -> PART_NAME 매핑) +var mbomPartNameData = {}; $(document).ready(function(){ $('.select2').select2(); @@ -87,7 +89,14 @@ function fn_initMbomOptions() { mbomOptionsData[val] = text; } }); + + // M-BOM 품명 데이터 초기화 (서버에서 전달받은 데이터) + + mbomPartNameData["${item.OBJID}"] = "${item.PART_NAME}"; + + console.log("M-BOM 옵션:", mbomOptionsData); + console.log("M-BOM 품명:", mbomPartNameData); } // 입력 그리드 초기화 @@ -136,12 +145,12 @@ function fn_initInputGrid() { return mbomOptionsData[value] || ""; }, cellEdited: function(cell) { - // M-BOM 선택 시 품명 자동 입력 + // M-BOM 선택 시 품명 자동 입력 (MBOM_HEADER.PART_NAME 사용) var mbomObjid = cell.getValue(); var row = cell.getRow(); if(mbomObjid) { - var mbomName = mbomOptionsData[mbomObjid] || ""; - row.update({PART_NAME: mbomName}); + var partName = mbomPartNameData[mbomObjid] || ""; + row.update({PART_NAME: partName}); } else { row.update({PART_NAME: ""}); } diff --git a/WebContent/WEB-INF/view/productionplanning/semiProductRequirementList.jsp b/WebContent/WEB-INF/view/productionplanning/semiProductRequirementList.jsp index 1b36795..53c0beb 100644 --- a/WebContent/WEB-INF/view/productionplanning/semiProductRequirementList.jsp +++ b/WebContent/WEB-INF/view/productionplanning/semiProductRequirementList.jsp @@ -46,8 +46,10 @@ var resultGrid; var grid; // 입력 행 번호 var rowSeq = 0; -// M-BOM 옵션 데이터 +// M-BOM 옵션 데이터 (셀렉트박스용) var mbomOptionsData = {}; +// M-BOM 품명 데이터 (OBJID -> PART_NAME 매핑) +var mbomPartNameData = {}; $(document).ready(function(){ $('.select2').select2(); @@ -87,7 +89,14 @@ function fn_initMbomOptions() { mbomOptionsData[val] = text; } }); + + // M-BOM 품명 데이터 초기화 (서버에서 전달받은 데이터) + + mbomPartNameData["${item.OBJID}"] = "${item.PART_NAME}"; + + console.log("M-BOM 옵션:", mbomOptionsData); + console.log("M-BOM 품명:", mbomPartNameData); } // 입력 그리드 초기화 @@ -136,12 +145,12 @@ function fn_initInputGrid() { return mbomOptionsData[value] || ""; }, cellEdited: function(cell) { - // M-BOM 선택 시 품명 자동 입력 + // M-BOM 선택 시 품명 자동 입력 (MBOM_HEADER.PART_NAME 사용) var mbomObjid = cell.getValue(); var row = cell.getRow(); if(mbomObjid) { - var mbomName = mbomOptionsData[mbomObjid] || ""; - row.update({PART_NAME: mbomName}); + var partName = mbomPartNameData[mbomObjid] || ""; + row.update({PART_NAME: partName}); } else { row.update({PART_NAME: ""}); } diff --git a/src/com/pms/controller/ProductionPlanningController.java b/src/com/pms/controller/ProductionPlanningController.java index bee4495..ce894fa 100644 --- a/src/com/pms/controller/ProductionPlanningController.java +++ b/src/com/pms/controller/ProductionPlanningController.java @@ -1863,6 +1863,10 @@ public class ProductionPlanningController extends BaseService { // M-BOM 목록 (셀렉트박스용) code_map.put("mbom_list", commonService.bizMakeOptionList("", "", "productionplanning.getMbomListForSelect2")); + // M-BOM 목록 (품명 포함) - 품명 자동 입력용 + List mbomListWithPartName = productionPlanningService.getMbomListWithPartName(); + request.setAttribute("mbom_part_name_list", mbomListWithPartName); + request.setAttribute("code_map", code_map); } catch(Exception e) { e.printStackTrace(); @@ -1902,6 +1906,10 @@ public class ProductionPlanningController extends BaseService { // M-BOM 목록 (셀렉트박스용) code_map.put("mbom_list", commonService.bizMakeOptionList("", "", "productionplanning.getMbomListForSelect2")); + // M-BOM 목록 (품명 포함) - 품명 자동 입력용 + List mbomListWithPartName = productionPlanningService.getMbomListWithPartName(); + request.setAttribute("mbom_part_name_list", mbomListWithPartName); + request.setAttribute("code_map", code_map); } catch(Exception e) { e.printStackTrace(); diff --git a/src/com/pms/mapper/productionplanning.xml b/src/com/pms/mapper/productionplanning.xml index 5d26cab..253623b 100644 --- a/src/com/pms/mapper/productionplanning.xml +++ b/src/com/pms/mapper/productionplanning.xml @@ -3969,6 +3969,17 @@ ORDER BY REGDATE DESC, MBOM_NO + + +