From 1ed810a0f8fa57d648fc1ad0732c2fe4bb886a8c Mon Sep 17 00:00:00 2001 From: leeheejin Date: Wed, 26 Nov 2025 16:19:29 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=EA=B5=AC=EB=A7=A4=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=91=EC=97=85=ED=95=9C=20=EA=B2=83=20=EC=BB=A4?= =?UTF-8?q?=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../classes/com/pms/mapper/salesMng.xml | 45 ++++++++++++ .../view/productionplanning/mBomMgmtList.jsp | 52 +++++++++++--- .../view/salesMng/salesRequestMngRegList.jsp | 6 +- src/com/pms/mapper/salesMng.xml | 45 ++++++++++++ .../controller/SalesMngController.java | 20 ++++++ .../salesmgmt/service/SalesMngService.java | 70 +++++++++++++++++++ 6 files changed, 227 insertions(+), 11 deletions(-) diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml index c752153..a58faa5 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml @@ -963,6 +963,9 @@ VALUES SRM.REQUEST_CD, (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_CD) AS REQUEST_CD_NAME, + -- 구매요청서 작성 여부 (SALES_REQUEST_PART에 데이터가 있으면 'Y') + (SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) AS HAS_PURCHASE_REQUEST, + -- 추가된 컬럼들 SRM.PURCHASE_TYPE, (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME, @@ -3272,5 +3275,47 @@ ORDER BY V.PATH2 WRITER = #{EDITER} WHERE OBJID::VARCHAR = #{OBJID} + + + + + + + + + + INSERT INTO SALES_REQUEST_MASTER ( + OBJID, + REQUEST_MNG_NO, + PROJECT_NO, + REQUEST_USER_ID, + STATUS, + WRITER, + REGDATE + ) VALUES ( + #{OBJID}, + #{REQUEST_MNG_NO}, + #{PROJECT_NO}, + #{REQUEST_USER_ID}, + #{STATUS}, + #{WRITER}, + NOW() + ) + \ No newline at end of file diff --git a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp index 50070c9..f3c32a3 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp @@ -418,10 +418,13 @@ function fn_openPurchaseListPopup() { // 체크된 행 가져오기 var checkedRows = []; $('.rowCheck:checked').each(function() { - var objid = $(this).data('objid'); - if(_tabulGrid && _tabulGrid.getRow) { - var rowData = _tabulGrid.getRow(objid).getData(); - checkedRows.push(rowData); + // 체크박스가 있는 행(tr)에서 Tabulator row 찾기 + var row = $(this).closest('.tabulator-row'); + if(row.length > 0 && _tabulGrid) { + var rowComponent = _tabulGrid.getRow(row[0]); + if(rowComponent) { + checkedRows.push(rowComponent.getData()); + } } }); @@ -443,12 +446,43 @@ function fn_openPurchaseListPopup() { return; } - // 선택된 프로젝트의 OBJID - var projectObjId = checkedRows[0].OBJID; + // 선택된 프로젝트 정보 + var selectedRow = checkedRows[0]; + var projectObjId = selectedRow.OBJID; + var projectNo = selectedRow.PROJECT_NO; - // 구매리스트 팝업 열기 - var url = "/salesMng/purchaseListFormPopUp.do?SALES_REQUEST_MASTER_OBJID=" + projectObjId; - window.open(url, "purchaseListPopup", "width=1400,height=800,scrollbars=yes,resizable=yes"); + // 구매요청서 마스터 생성 후 팝업 열기 + $.ajax({ + url: "/salesMng/createPurchaseListFromMBom.do", + method: "POST", + data: { + PROJECT_MGMT_OBJID: projectObjId, + PROJECT_NO: projectNo + }, + dataType: "json", + success: function(result) { + if(result.resultFlag === "S") { + var salesRequestMasterObjid = result.SALES_REQUEST_MASTER_OBJID; + // 구매리스트 팝업 열기 + var url = "/salesMng/purchaseListFormPopUp.do?SALES_REQUEST_MASTER_OBJID=" + salesRequestMasterObjid + + "&PROJECT_MGMT_OBJID=" + projectObjId; + window.open(url, "purchaseListPopup", "width=1400,height=800,scrollbars=yes,resizable=yes"); + } else { + Swal.fire({ + title: '오류', + text: result.message || '구매리스트 생성 중 오류가 발생했습니다.', + icon: 'error' + }); + } + }, + error: function(xhr, status, error) { + Swal.fire({ + title: '오류', + text: '서버 통신 중 오류가 발생했습니다.', + icon: 'error' + }); + } + }); } diff --git a/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp b/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp index 8b232ea..97a8ad7 100644 --- a/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp +++ b/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp @@ -223,8 +223,10 @@ var columns = [ ,{headerHozAlign : 'center', hozAlign : 'left' , title : "품명", field :"PART_NAME" , widthGrow:1.8 } ,{headerHozAlign : 'center', hozAlign : 'center', title : "구매요청서", field :"REQUEST_MNG_NO" , widthGrow:1.1, formatter: function(cell, formatterParams, onRendered){ - var objid = fnc_checkNull(cell.getData().OBJID); - var iconClass = (objid != '' && objid != null) ? 'file_icon' : 'file_empty_icon'; + // 구매요청서 작성 여부: PART_NO가 있으면 품목이 저장된 것 (구매요청서 작성됨) + var data = cell.getData(); + var partNo = fnc_checkNull(data.PART_NO); + var iconClass = (partNo != '' && partNo != null) ? 'file_icon' : 'file_empty_icon'; return ''; }, cellClick : function(e, cell) { diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml index c752153..a58faa5 100644 --- a/src/com/pms/mapper/salesMng.xml +++ b/src/com/pms/mapper/salesMng.xml @@ -963,6 +963,9 @@ VALUES SRM.REQUEST_CD, (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_CD) AS REQUEST_CD_NAME, + -- 구매요청서 작성 여부 (SALES_REQUEST_PART에 데이터가 있으면 'Y') + (SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) AS HAS_PURCHASE_REQUEST, + -- 추가된 컬럼들 SRM.PURCHASE_TYPE, (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME, @@ -3272,5 +3275,47 @@ ORDER BY V.PATH2 WRITER = #{EDITER} WHERE OBJID::VARCHAR = #{OBJID} + + + + + + + + + + INSERT INTO SALES_REQUEST_MASTER ( + OBJID, + REQUEST_MNG_NO, + PROJECT_NO, + REQUEST_USER_ID, + STATUS, + WRITER, + REGDATE + ) VALUES ( + #{OBJID}, + #{REQUEST_MNG_NO}, + #{PROJECT_NO}, + #{REQUEST_USER_ID}, + #{STATUS}, + #{WRITER}, + NOW() + ) + \ No newline at end of file diff --git a/src/com/pms/salesmgmt/controller/SalesMngController.java b/src/com/pms/salesmgmt/controller/SalesMngController.java index 61ee6fa..f68d98f 100644 --- a/src/com/pms/salesmgmt/controller/SalesMngController.java +++ b/src/com/pms/salesmgmt/controller/SalesMngController.java @@ -1202,4 +1202,24 @@ public class SalesMngController { } return resultMap; } + + /** + * M-BOM에서 구매리스트 생성 (SALES_REQUEST_MASTER 생성) + * @param request + * @param paramMap + * @return + */ + @ResponseBody + @RequestMapping("/salesMng/createPurchaseListFromMBom.do") + public Map createPurchaseListFromMBom(HttpServletRequest request, @RequestParam Map paramMap){ + Map resultMap = new HashMap(); + try{ + resultMap = salesMngService.createPurchaseListFromMBom(request, paramMap); + }catch(Exception e){ + e.printStackTrace(); + resultMap.put("resultFlag", "F"); + resultMap.put("message", "구매리스트 생성 중 오류가 발생했습니다: " + e.getMessage()); + } + return resultMap; + } } diff --git a/src/com/pms/salesmgmt/service/SalesMngService.java b/src/com/pms/salesmgmt/service/SalesMngService.java index 2372db4..7758e34 100644 --- a/src/com/pms/salesmgmt/service/SalesMngService.java +++ b/src/com/pms/salesmgmt/service/SalesMngService.java @@ -1849,4 +1849,74 @@ public class SalesMngService { return resultList; } + + /** + * M-BOM에서 구매리스트 생성 (SALES_REQUEST_MASTER만 생성, SALES_REQUEST_PART는 생성 안 함) + * @param request + * @param paramMap + * @return + * @throws Exception + */ + public Map createPurchaseListFromMBom(HttpServletRequest request, Map paramMap) throws Exception { + Map resultMap = new HashMap(); + SqlSession sqlSession = null; + + try { + sqlSession = SqlMapConfig.getInstance().getSqlSession(false); + + String projectMgmtObjid = CommonUtils.checkNull(paramMap.get("PROJECT_MGMT_OBJID")); + String projectNo = CommonUtils.checkNull(paramMap.get("PROJECT_NO")); + + // 로그인 사용자 정보 + HttpSession session = request.getSession(); + PersonBean personBean = (PersonBean) session.getAttribute(Constants.PERSON_BEAN); + String userId = personBean.getUserId(); + + // 이미 해당 프로젝트로 생성된 구매요청서가 있는지 확인 + Map checkParam = new HashMap(); + checkParam.put("PROJECT_NO", projectMgmtObjid); + Map existingMaster = sqlSession.selectOne("salesMng.getSalesRequestMasterByProjectNo", checkParam); + + String salesRequestMasterObjid; + + if(existingMaster != null && existingMaster.get("OBJID") != null) { + // 이미 있으면 기존 것 사용 + salesRequestMasterObjid = CommonUtils.checkNull(existingMaster.get("OBJID")); + System.out.println("기존 구매요청서 마스터 사용: " + salesRequestMasterObjid); + } else { + // 없으면 새로 생성 + salesRequestMasterObjid = String.valueOf(CommonUtils.createObjId()); + + // 요청번호 생성 (기존 로직과 동일) + String requestMngNo = (String) sqlSession.selectOne("salesMng.getNextRequestMngNo"); + + Map insertParam = new HashMap(); + insertParam.put("OBJID", salesRequestMasterObjid); + insertParam.put("PROJECT_NO", projectMgmtObjid); // PROJECT_MGMT.OBJID 저장 + insertParam.put("REQUEST_MNG_NO", requestMngNo); + insertParam.put("WRITER", userId); + insertParam.put("REQUEST_USER_ID", userId); + insertParam.put("STATUS", "create"); + + sqlSession.insert("salesMng.insertSalesRequestMasterFromMBom", insertParam); + sqlSession.commit(); + + System.out.println("새 구매요청서 마스터 생성: " + salesRequestMasterObjid + ", 요청번호: " + requestMngNo); + } + + resultMap.put("resultFlag", "S"); + resultMap.put("SALES_REQUEST_MASTER_OBJID", salesRequestMasterObjid); + resultMap.put("message", "구매리스트가 생성되었습니다."); + + } catch(Exception e) { + if(sqlSession != null) sqlSession.rollback(); + e.printStackTrace(); + resultMap.put("resultFlag", "F"); + resultMap.put("message", "구매리스트 생성 중 오류가 발생했습니다: " + e.getMessage()); + } finally { + if(sqlSession != null) sqlSession.close(); + } + + return resultMap; + } } From da7877ac6933567f7f8346ba324fa76ec5894fb3 Mon Sep 17 00:00:00 2001 From: leeheejin Date: Wed, 26 Nov 2025 16:49:34 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=EA=B5=AC=EB=A7=A4=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EC=9D=98=20=EA=B5=AC=EB=A7=A4=EC=9A=94=EC=B2=AD=EC=84=9C?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=99=80=20m-bom=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EC=9D=98=20=EA=B2=80=EC=83=89=ED=95=84=ED=84=B0=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../classes/com/pms/mapper/salesMng.xml | 20 +++++-- .../view/salesMng/purchaseListFormPopUp.jsp | 58 +++++++++---------- .../view/salesMng/salesRequestFormPopUp.jsp | 43 +++++++------- .../view/salesMng/salesRequestMngRegList.jsp | 49 +++++++++++----- src/com/pms/mapper/salesMng.xml | 20 +++++-- 5 files changed, 112 insertions(+), 78 deletions(-) diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml index a58faa5..51ad609 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml @@ -1158,32 +1158,40 @@ VALUES AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') TO_DATE(#{receipt_date_end}, 'YYYY-MM-DD') - + + + + AND SRM.REGDATE::DATE = ]]> #{regdate_start}::DATE + + + AND SRM.REGDATE::DATE #{regdate_end}::DATE + + ORDER BY SRM.REGDATE desc diff --git a/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp b/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp index 37ff63f..a79497e 100644 --- a/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp +++ b/WebContent/WEB-INF/view/salesMng/purchaseListFormPopUp.jsp @@ -91,15 +91,15 @@ var bomReportObjid = "${resolvedBomReportObjid}"; var mbomHeaderObjid = "${resolvedMbomHeaderObjid}"; // MBOM_HEADER.OBJID (M-BOM 관리 화면에서 사용하는 ID) var vendorList = []; // 공급업체 목록 -// 디버그: resultMap 내용 확인 -console.log("=== JSP resultMap 디버그 ==="); -console.log("resultMap.PROJECT_MGMT_OBJID:", "${resultMap.PROJECT_MGMT_OBJID}"); -console.log("resultMap.BOM_REPORT_OBJID:", "${resultMap.BOM_REPORT_OBJID}"); -console.log("resultMap.MBOM_HEADER_OBJID:", "${resultMap.MBOM_HEADER_OBJID}"); -console.log("resultMap.PROJECT_NO:", "${resultMap.PROJECT_NO}"); -console.log("resolvedProjectId:", projectMgmtObjid); -console.log("resolvedBomReportObjid:", bomReportObjid); -console.log("resolvedMbomHeaderObjid:", mbomHeaderObjid); +// 디버그: resultMap 내용 확인 (주석처리) +// console.log("=== JSP resultMap 디버그 ==="); +// console.log("resultMap.PROJECT_MGMT_OBJID:", "${resultMap.PROJECT_MGMT_OBJID}"); +// console.log("resultMap.BOM_REPORT_OBJID:", "${resultMap.BOM_REPORT_OBJID}"); +// console.log("resultMap.MBOM_HEADER_OBJID:", "${resultMap.MBOM_HEADER_OBJID}"); +// console.log("resultMap.PROJECT_NO:", "${resultMap.PROJECT_NO}"); +// console.log("resolvedProjectId:", projectMgmtObjid); +// console.log("resolvedBomReportObjid:", bomReportObjid); +// console.log("resolvedMbomHeaderObjid:", mbomHeaderObjid); function logDebug(){ if(window.console && typeof window.console.log === "function"){ console.log.apply(console, arguments); @@ -131,7 +131,7 @@ function fn_loadVendorList(callback) { }, dataType: 'json', success: function(data) { - console.log("공급업체 목록 응답:", data); + // console.log("공급업체 목록 응답:", data); if(data && data.RESULTLIST) { vendorList = {}; // 객체 형태로 변경 vendorList[''] = '선택'; // 빈 값 @@ -142,7 +142,7 @@ function fn_loadVendorList(callback) { vendorList[objid] = name; } }); - console.log("vendorList 생성 완료:", Object.keys(vendorList).length + "개"); + // console.log("vendorList 생성 완료:", Object.keys(vendorList).length + "개"); } if(callback) callback(); }, @@ -608,14 +608,14 @@ function fn_loadPurchaseList(mergeMode) { // M-BOM에서 구매리스트 생성 function fn_loadFromMBom(callback) { - console.log("=== fn_loadFromMBom 호출 ==="); - console.log("PROJECT_MGMT_OBJID:", projectMgmtObjid); - console.log("BOM_REPORT_OBJID:", bomReportObjid); - console.log("MBOM_HEADER_OBJID:", mbomHeaderObjid); + // console.log("=== fn_loadFromMBom 호출 ==="); + // console.log("PROJECT_MGMT_OBJID:", projectMgmtObjid); + // console.log("BOM_REPORT_OBJID:", bomReportObjid); + // console.log("MBOM_HEADER_OBJID:", mbomHeaderObjid); // MBOM_HEADER_OBJID가 있으면 우선 사용 (M-BOM 관리 화면과 동일한 방식) var mbomObjIdToUse = mbomHeaderObjid || projectMgmtObjid; - console.log("사용할 MBOM OBJID:", mbomObjIdToUse); + // console.log("사용할 MBOM OBJID:", mbomObjIdToUse); $.ajax({ url: "/salesMng/getMBomForPurchaseList.do", @@ -626,24 +626,24 @@ function fn_loadFromMBom(callback) { }, dataType: 'json', success: function(data) { - console.log("=== M-BOM AJAX 응답 ==="); - console.log("전체 응답:", JSON.stringify(data)); - console.log("data.list:", data ? data.list : "data가 null"); - console.log("list 길이:", (data && data.list) ? data.list.length : 0); - if(data && data.list && data.list.length > 0) { - console.log("첫번째 항목 전체 키:", Object.keys(data.list[0])); - console.log("첫번째 항목 PM_HEAT_RAW:", data.list[0].PM_HEAT_RAW); - console.log("첫번째 항목 PM_METHOD_RAW:", data.list[0].PM_METHOD_RAW); - console.log("첫번째 항목 PM_SURFACE_RAW:", data.list[0].PM_SURFACE_RAW); - console.log("첫번째 항목 HEAT_TREATMENT_HARDNESS:", data.list[0].HEAT_TREATMENT_HARDNESS); - } + // console.log("=== M-BOM AJAX 응답 ==="); + // console.log("전체 응답:", JSON.stringify(data)); + // console.log("data.list:", data ? data.list : "data가 null"); + // console.log("list 길이:", (data && data.list) ? data.list.length : 0); + // if(data && data.list && data.list.length > 0) { + // console.log("첫번째 항목 전체 키:", Object.keys(data.list[0])); + // console.log("첫번째 항목 PM_HEAT_RAW:", data.list[0].PM_HEAT_RAW); + // console.log("첫번째 항목 PM_METHOD_RAW:", data.list[0].PM_METHOD_RAW); + // console.log("첫번째 항목 PM_SURFACE_RAW:", data.list[0].PM_SURFACE_RAW); + // console.log("첫번째 항목 HEAT_TREATMENT_HARDNESS:", data.list[0].HEAT_TREATMENT_HARDNESS); + // } var list = (data && data.list) ? data.list : []; if(list.length > 0) { - console.log("M-BOM 데이터 " + list.length + "건 로드됨"); + // console.log("M-BOM 데이터 " + list.length + "건 로드됨"); _tabulGrid.setData(list); } else { - console.log("M-BOM 데이터 없음!"); + // console.log("M-BOM 데이터 없음!"); // 알림 제거 - 머지 모드에서는 알림 안 띄움 } if(typeof callback === "function"){ diff --git a/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp b/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp index 92349f3..e5089a8 100644 --- a/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp +++ b/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp @@ -143,7 +143,7 @@ $("#REQUEST_CD,#PROJECT_NO,#CUSTOMER_NAME,#PRODUCT_NAME,#MECHANICAL_TYPE,#PROJEC if(fnc_checkNull( list )!=""){ var row = list[0]; - console.log("프로젝트 정보:", row); // 디버깅용 + // console.log("프로젝트 정보:", row); // 디버깅용 // 기존 필드 (읽기전용 텍스트) $("#CUSTOMER_NAME" ).val( row["CUSTOMER_NAME" ] ); @@ -156,25 +156,25 @@ $("#REQUEST_CD,#PROJECT_NO,#CUSTOMER_NAME,#PRODUCT_NAME,#MECHANICAL_TYPE,#PROJEC // 제품구분 (PRODUCT from PROJECT_MGMT) - 드롭다운 if(fnc_checkNull(row["PRODUCT"]) != ""){ $("#PRODUCT_NAME").val(row["PRODUCT"]).trigger("change"); - console.log("제품구분 설정:", row["PRODUCT"]); + // console.log("제품구분 설정:", row["PRODUCT"]); } // 국내/해외 (AREA_CD from PROJECT_MGMT) if(fnc_checkNull(row["AREA_CD"]) != ""){ $("#AREA_CD").val(row["AREA_CD"]).trigger("change"); - console.log("국내/해외 설정:", row["AREA_CD"]); + // console.log("국내/해외 설정:", row["AREA_CD"]); } // 고객사 (CUSTOMER_OBJID from PROJECT_MGMT) if(fnc_checkNull(row["CUSTOMER_OBJID"]) != ""){ $("#CUSTOMER_OBJID").val(row["CUSTOMER_OBJID"]).trigger("change"); - console.log("고객사 설정:", row["CUSTOMER_OBJID"]); + // console.log("고객사 설정:", row["CUSTOMER_OBJID"]); } // 유/무상 (PAID_TYPE from CONTRACT_MGMT) if(fnc_checkNull(row["PAID_TYPE"]) != ""){ $("#PAID_TYPE").val(row["PAID_TYPE"]).trigger("change"); - console.log("유/무상 설정:", row["PAID_TYPE"]); + // console.log("유/무상 설정:", row["PAID_TYPE"]); } } @@ -235,7 +235,7 @@ function fn_getSalesRequestTargetPartList(masterObjId,bomObjId){ var resultData = data; $.each(resultData, function(i){ - console.log("resultData["+i+"]:"+resultData[i]); + // console.log("resultData["+i+"]:"+resultData[i]); //var RNUM = fnc_checkNull(resultData[i].RNUM); var rowObjId = fnc_checkNull(resultData[i].OBJID); @@ -496,13 +496,13 @@ function fn_Supply_save(){ function fn_loadMbomParts(projectObjId){ if(fnc_checkNull(projectObjId) == "") return; - console.log("M-BOM 품목 로드 시작, PROJECT_OBJID:", projectObjId); + // console.log("M-BOM 품목 로드 시작, PROJECT_OBJID:", projectObjId); // M-BOM 품목 조회 var paramData = {"sqlId":"salesMng.SalesBomPartListByProjectUnit", "PROJECT_OBJID":projectObjId}; var resultList = fnc_getJsonAllDataListBySqlId(paramData); - console.log("M-BOM 품목 조회 결과:", resultList); + // console.log("M-BOM 품목 조회 결과:", resultList); if(resultList && resultList.length > 0){ // 기존 품목 초기화 @@ -542,9 +542,9 @@ function fn_loadMbomParts(projectObjId){ }); $(".select2").select2(); - console.log("M-BOM 품목 " + resultList.length + "건 로드 완료"); + // console.log("M-BOM 품목 " + resultList.length + "건 로드 완료"); } else { - console.log("M-BOM 품목이 없습니다."); + // console.log("M-BOM 품목이 없습니다."); } } @@ -567,15 +567,15 @@ function fn_addBomPart(selectboxId,selectedVal,sql_id,sql_supply){ paramData.UNIT_CODE = unit_code; } resultList = fnc_getJsonAllDataListBySqlId(paramData); - console.log("M-BOM 품목 조회 결과:", resultList.length, "건"); + // console.log("M-BOM 품목 조회 결과:", resultList.length, "건"); } // 2. M-BOM 품목이 없으면 전체 PART_MNG에서 조회 if(resultList.length == 0){ - console.log("M-BOM 품목이 없어 전체 품목에서 조회합니다."); + // console.log("M-BOM 품목이 없어 전체 품목에서 조회합니다."); var allPartData = {"sqlId":"salesMng.getAllPartMngList"}; resultList = fnc_getJsonAllDataListBySqlId(allPartData); - console.log("전체 품목 조회 결과:", resultList.length, "건"); + // console.log("전체 품목 조회 결과:", resultList.length, "건"); // 전체 품목 조회 결과 처리 if(0 < resultList.length){ @@ -621,6 +621,7 @@ function fn_callbackFnc(){ .input_title {border-left:1px solid #ccc;} .input_sub_title {border-left:1px solid #ccc;} .pmsPopupForm tr:last-child td{border-bottom:1px solid #ccc;} +.required-mark { color: red; font-weight: bold; margin-left: 2px; }
@@ -648,7 +649,7 @@ function fn_callbackFnc(){ - + - + - ${code_map.purchase_type} - + ${code_map.product_name} - + - + - + +
+
+
+
+

+ 구매관리_품의서관리 +

+
+ + + + <%-- + --%> +
+
+
+ + + + + + + + + + + + + +
+ + + + + + + ~ + +
+
+ + <%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %> +
+
+
+
+ + + + diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml index 51ad609..4c0da6b 100644 --- a/src/com/pms/mapper/salesMng.xml +++ b/src/com/pms/mapper/salesMng.xml @@ -3325,5 +3325,178 @@ ORDER BY V.PATH2 NOW() ) + + + + + + + + + \ No newline at end of file diff --git a/src/com/pms/salesmgmt/controller/SalesMngController.java b/src/com/pms/salesmgmt/controller/SalesMngController.java index f68d98f..bebb1e7 100644 --- a/src/com/pms/salesmgmt/controller/SalesMngController.java +++ b/src/com/pms/salesmgmt/controller/SalesMngController.java @@ -1222,4 +1222,82 @@ public class SalesMngController { } return resultMap; } + + // ==================== 품의서 관리 ==================== + + /** + * 품의서 관리 - 목록 화면 + * @param request + * @param paramMap + * @return + */ + @RequestMapping("/salesMng/proposalMngList.do") + public String proposalMngList(HttpServletRequest request, @RequestParam Map paramMap){ + String returnUrl = "/salesMng/proposalMngList"; + Map code_map = new HashMap(); + + try { + // 구매유형 + code_map.put("purchase_type", commonService.bizMakeOptionList("0001821", (String)paramMap.get("purchase_type"), "common.getCodeselect")); + // 주문유형 + code_map.put("order_type", commonService.bizMakeOptionList("0001822", (String)paramMap.get("order_type"), "common.getCodeselect")); + // 제품구분 + code_map.put("product_name", commonService.bizMakeOptionList("0000016", (String)paramMap.get("product_name"), "common.getCodeselect")); + } catch (Exception e) { + e.printStackTrace(); + } + + request.setAttribute("code_map", code_map); + return returnUrl; + } + + /** + * 품의서 관리 - 목록 조회 (페이징) + * @param request + * @param paramMap + * @return + */ + @ResponseBody + @RequestMapping("/salesMng/proposalMngGridList.do") + public Map getProposalMngGridList(HttpServletRequest request, @RequestParam Map paramMap){ + commonService.selectListPagingNew("salesMng.getProposalMngGridList", request, paramMap); + return paramMap; + } + + /** + * 품의서 상세 팝업 + * @param request + * @param paramMap + * @return + */ + @RequestMapping("/salesMng/proposalFormPopUp.do") + public String proposalFormPopUp(HttpServletRequest request, @RequestParam Map paramMap){ + Map resultMap = new HashMap(); + Map code_map = new HashMap(); + + try { + String proposalObjId = CommonUtils.checkNull(paramMap.get("PROPOSAL_OBJID")); + + if(!"".equals(proposalObjId)){ + resultMap = commonService.selectOne("salesMng.getProposalInfo", request, paramMap); + } else { + resultMap.put("OBJID", CommonUtils.createObjId()); + resultMap.put("STATUS", "create"); + } + + // 구매유형 + code_map.put("purchase_type", commonService.bizMakeOptionList("0001821", (String)resultMap.get("PURCHASE_TYPE"), "common.getCodeselect")); + // 주문유형 + code_map.put("order_type", commonService.bizMakeOptionList("0001822", (String)resultMap.get("ORDER_TYPE"), "common.getCodeselect")); + // 제품구분 + code_map.put("product_name", commonService.bizMakeOptionList("0000016", (String)resultMap.get("PRODUCT_NAME"), "common.getCodeselect")); + + } catch (Exception e) { + e.printStackTrace(); + } + + request.setAttribute("resultMap", resultMap); + request.setAttribute("code_map", code_map); + return "/salesMng/proposalFormPopUp"; + } } From 70fbb058c5b641a855ff81ededecddf2b25bce91 Mon Sep 17 00:00:00 2001 From: leeheejin Date: Wed, 26 Nov 2025 17:46:48 +0900 Subject: [PATCH 4/4] ui --- .../WEB-INF/view/productionplanning/mBomMgmtList.jsp | 6 ++++++ WebContent/WEB-INF/view/salesMng/proposalMngList.jsp | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp index f3c32a3..453838b 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp @@ -11,6 +11,12 @@ <%=Constants.SYSTEM_NAME%> +