From 1ed810a0f8fa57d648fc1ad0732c2fe4bb886a8c Mon Sep 17 00:00:00 2001 From: leeheejin Date: Wed, 26 Nov 2025 16:19:29 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B5=AC=EB=A7=A4=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=9E=91=EC=97=85=ED=95=9C=20=EA=B2=83=20=EC=BB=A4=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; + } }