From c7bd7070a9521545c62e3b4ef71c615710d5947c Mon Sep 17 00:00:00 2001 From: hjjeong Date: Thu, 26 Feb 2026 17:59:31 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EA=B5=AC=EB=A7=A4=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=EC=84=9C=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=20=EC=95=88=ED=95=98=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EA=B3=A0=EA=B0=9D=EC=82=AC=20=EB=93=B1=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 --- .../view/salesMng/salesRequestFormPopUp.jsp | 64 ++++++++++++++----- src/com/pms/mapper/salesMng.xml | 2 +- .../controller/SalesMngController.java | 8 ++- 3 files changed, 54 insertions(+), 20 deletions(-) diff --git a/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp b/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp index e24d242..4344428 100644 --- a/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp +++ b/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp @@ -500,7 +500,7 @@ function fn_Supply_save(){ } } -// 구매요청서 확정 처리 +// 구매요청서 확정 처리 (저장 후 확정) function fn_confirm(){ var masterObjId = $("#SALES_REQUEST_MASTER_OBJID").val(); @@ -509,15 +509,28 @@ function fn_confirm(){ return; } - // 품목이 있는지 확인 if($("#partListArea tr").length < 1){ Swal.fire("품목이 없습니다. 먼저 품목을 추가하고 저장해주세요."); return; } + if(!fnc_validate("form1")){ + return; + } + + var zeroQty = false; + $("input[name*=QTY]").each(function(){ + if ($(this).val() == 0){ + Swal.fire('수량이 0 입니다.'); + zeroQty = true; + return false; + } + }); + if(zeroQty) return; + Swal.fire({ title: '확정', - text: '확정하시겠습니까? 확정 후에는 수정이 불가능합니다.', + text: '현재 내용을 저장하고 확정하시겠습니까? 확정 후에는 수정이 불가능합니다.', icon: 'warning', showCancelButton: true, confirmButtonColor: '#5cb85c', @@ -526,29 +539,46 @@ function fn_confirm(){ cancelButtonText: '취소' }).then((result) => { if (result.isConfirmed) { + // 폼 데이터를 먼저 저장 $.ajax({ type: "POST", - url: "/salesMng/confirmSalesRequest.do", - data: { "SALES_REQUEST_MASTER_OBJID": masterObjId }, + url: "/salesMng/saveSalesRequestInfo.do", + data: $("#form1").serialize(), dataType: "json", - success: function(data){ - if(data.result){ - Swal.fire({ - title: '완료', - text: '확정되었습니다.', - icon: 'success' - }).then(() => { - if(typeof opener.fn_search == "function"){ - opener.fn_search(); + success: function(saveData){ + if(saveData.result !== false){ + // 저장 성공 → 확정 처리 + $.ajax({ + type: "POST", + url: "/salesMng/confirmSalesRequest.do", + data: { "SALES_REQUEST_MASTER_OBJID": masterObjId }, + dataType: "json", + success: function(data){ + if(data.result){ + Swal.fire({ + title: '완료', + text: '저장 및 확정되었습니다.', + icon: 'success' + }).then(() => { + if(typeof opener.fn_search == "function"){ + opener.fn_search(); + } + self.close(); + }); + } else { + Swal.fire('오류', data.msg || '확정 처리 중 오류가 발생했습니다.', 'error'); + } + }, + error: function(jqxhr, status, error){ + Swal.fire('오류', '확정 처리 중 오류가 발생했습니다.', 'error'); } - self.close(); }); } else { - Swal.fire('오류', data.msg || '확정 처리 중 오류가 발생했습니다.', 'error'); + Swal.fire('오류', saveData.msg || '저장 중 오류가 발생했습니다.', 'error'); } }, error: function(jqxhr, status, error){ - Swal.fire('오류', '서버 통신 중 오류가 발생했습니다.', 'error'); + Swal.fire('오류', '저장 중 오류가 발생했습니다.', 'error'); } }); } diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml index 23f88e6..78719d1 100644 --- a/src/com/pms/mapper/salesMng.xml +++ b/src/com/pms/mapper/salesMng.xml @@ -684,7 +684,7 @@ VALUES WHEN CM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = CM.CUSTOMER_OBJID) ELSE SM.SUPPLY_NAME END AS CUSTOMER_NAME, - COALESCE(SM.OBJID::VARCHAR, CM.CUSTOMER_OBJID) AS CUSTOMER_OBJID, -- 고객사 OBJID (드롭다운 선택용) + COALESCE(SM.OBJID::VARCHAR, CM.CUSTOMER_OBJID) AS CONTRACT_CUSTOMER_OBJID, -- 계약서 기반 고객사 (참고용) PM.MECHANICAL_TYPE, SRM.RELEASE_DATE, SRM.REQUEST_REASONS, diff --git a/src/com/pms/salesmgmt/controller/SalesMngController.java b/src/com/pms/salesmgmt/controller/SalesMngController.java index 4bdaf25..aad912e 100644 --- a/src/com/pms/salesmgmt/controller/SalesMngController.java +++ b/src/com/pms/salesmgmt/controller/SalesMngController.java @@ -374,8 +374,12 @@ public class SalesMngController { code_map.put("order_type",commonService.bizMakeOptionList("0001406", (String)resultMap.get("ORDER_TYPE"),"common.getCodeselect")); //제품구분 (PRODUCT_NAME) - 0000001 사용 code_map.put("product_name",commonService.bizMakeOptionList("0000001", (String)resultMap.get("PRODUCT_NAME"),"common.getCodeselect")); - //제품유형 (CATEGORY_CD) - 0000167 사용 - code_map.put("category_cd",commonService.bizMakeOptionList("0000167", (String)resultMap.get("CATEGORY_CD"),"common.getCodeselect")); + //주문유형 (CATEGORY_CD) - 0000167 사용, 저장된 ORDER_TYPE 값을 우선 사용 + String orderTypeForSelect = CommonUtils.checkNull((String)resultMap.get("ORDER_TYPE")); + if("".equals(orderTypeForSelect)){ + orderTypeForSelect = (String)resultMap.get("CATEGORY_CD"); + } + code_map.put("category_cd",commonService.bizMakeOptionList("0000167", orderTypeForSelect,"common.getCodeselect")); //유/무상 (PAID_TYPE) - COMM_CODE에서 조회 시도, 없으면 하드코딩 String paidTypeOptions = ""; try { -- 2.49.1 From 9a71e807d45daff74efa23470116ca6966bad9b0 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Thu, 26 Feb 2026 17:59:44 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EB=B0=9C=EC=A3=BC=EC=84=9C=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20=EC=88=9C=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/pms/mapper/purchaseOrder.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/pms/mapper/purchaseOrder.xml b/src/com/pms/mapper/purchaseOrder.xml index dfbe16f..4575f32 100644 --- a/src/com/pms/mapper/purchaseOrder.xml +++ b/src/com/pms/mapper/purchaseOrder.xml @@ -3476,7 +3476,7 @@ WHERE 1=1 - ORDER BY POM.REGDATE DESC + ORDER BY POM.REGDATE DESC, SPLIT_PART( PURCHASE_ORDER_NO, '-', 3)::NUMERIC DESC