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;
+ }
}