diff --git a/WebContent/WEB-INF/view/partMng/structureBomCopyFormPopup.jsp b/WebContent/WEB-INF/view/partMng/structureBomCopyFormPopup.jsp index ce7101d..1d3989a 100644 --- a/WebContent/WEB-INF/view/partMng/structureBomCopyFormPopup.jsp +++ b/WebContent/WEB-INF/view/partMng/structureBomCopyFormPopup.jsp @@ -717,11 +717,11 @@ function fn_excel() { - + - + diff --git a/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp b/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp index ddb36dc..8c9e7cd 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp @@ -58,6 +58,7 @@ $(function(){ // 저장된 M-BOM 품번 조회 및 표시 var projectObjId = "${info.OBJID}"; + $.ajax({ url: "/productionplanning/getLatestMbomByProjectId.do", type: "POST", @@ -68,7 +69,29 @@ $(function(){ if(response && response.MBOM_NO) { console.log("저장된 M-BOM 발견:", response); $("#search_mbom_part_no").val(response.MBOM_NO); - $("#search_save_date").val(response.REGDATE); + + // 날짜 형식 변환 (타임스탬프 또는 문자열 -> YYYY-MM-DD) + var regDate = response.REGDATE; + if(regDate) { + var dateStr = ""; + + // 타임스탬프(숫자)인 경우 + if(typeof regDate === 'number') { + var date = new Date(regDate); + var year = date.getFullYear(); + var month = String(date.getMonth() + 1).padStart(2, '0'); + var day = String(date.getDate()).padStart(2, '0'); + dateStr = year + '-' + month + '-' + day; + } + // 문자열인 경우 (YYYY-MM-DD HH:mm:ss 형식) + else if(typeof regDate === 'string') { + dateStr = regDate.split(' ')[0]; + } + + $("#search_save_date").val(dateStr); + } else { + $("#search_save_date").val(""); + } } else { console.log("저장된 M-BOM 없음"); $("#search_mbom_part_no").val(""); @@ -126,7 +149,7 @@ $(function(){ // 닫기 버튼 클릭 $("#btnClose").click(function(){ - window.close(); + fn_closeWindow(); }); // 일괄 적용 버튼 클릭 @@ -306,7 +329,7 @@ function fn_saveMbom() { } // 현재 창 닫기 - window.close(); + fn_closeWindow(); } else { alert("M-BOM 저장에 실패했습니다: " + (data.message || "")); } @@ -792,30 +815,30 @@ function compareItemFields(before, after) { - + - + - + - + + + + + + + - - - - - - @@ -827,7 +850,7 @@ function compareItemFields(before, after) { - + @@ -1087,6 +1110,27 @@ function fn_mbomChangePart() { function generateTempId() { return -Math.floor(Math.random() * 1000000000); } + +// 창 닫기 함수 (프레임 구조 고려) +function fn_closeWindow() { + try { + // 최상위 창(frameset)을 닫기 + if(window.top && window.top.opener) { + // 팝업으로 열린 경우 + window.top.close(); + } else if(window.parent && window.parent !== window) { + // 프레임 내부인 경우 최상위 창 닫기 시도 + window.top.close(); + } else { + // 일반 창인 경우 + window.close(); + } + } catch(e) { + console.error("창 닫기 오류:", e); + // 오류 발생 시 강제로 닫기 시도 + window.top.close(); + } +} diff --git a/WebContent/WEB-INF/view/productionplanning/mBomPopupCenter.jsp b/WebContent/WEB-INF/view/productionplanning/mBomPopupCenter.jsp index b83ce3e..3d05b98 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomPopupCenter.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomPopupCenter.jsp @@ -373,12 +373,12 @@ function fn_changeRelatePartInfo(objId,rightObjId,leftObjId,leftPartNoQty,leftPa
-
+

- +
- +
diff --git a/WebContent/WEB-INF/view/productionplanning/mBomPopupLeft.jsp b/WebContent/WEB-INF/view/productionplanning/mBomPopupLeft.jsp index 6ff698b..39f0098 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomPopupLeft.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomPopupLeft.jsp @@ -613,7 +613,7 @@ function fn_initGrid() { // Tabulator 생성 _tabulGrid = new Tabulator("#mBomTableWrap", { layout: "fitData", - height: "calc(100vh - 150px)", + height: "calc(100vh - 70px)", columns: columns, data: bomTreeData, rowFormatter: function(row) { diff --git a/WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp b/WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp index 07a204e..8f3c997 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp @@ -10,26 +10,27 @@ @@ -43,23 +44,23 @@ body, html { - + - + - + - + - + @@ -84,7 +85,7 @@ body, html { -
+
0
@@ -126,7 +127,7 @@ function initEbomTable() { {title: "품번", field: "PART_NO", widthGrow: 1.5, vertAlign:"middle"}, {title: "품명", field: "PART_NAME", widthGrow: 2, vertAlign:"middle"}, {title: "재료", field: "MATERIAL", widthGrow: 1.2, vertAlign:"middle"}, - {title: "공급업체", field: "SUPPLIER", widthGrow: 1.5, vertAlign:"middle"} + {title: "메이커", field: "MAKER", widthGrow: 1.5, vertAlign:"middle"} ], placeholder: "검색 결과가 없습니다." }); @@ -198,15 +199,32 @@ function updatePagination() { $("#bTableStatus").text(allData.length); - // 페이지 버튼 생성 + // 페이지 버튼 생성 (10개씩만 표시) var pagingHtml = ''; - for(var i = 1; i <= totalPages; i++) { + var pageGroupSize = 10; // 한 번에 표시할 페이지 수 + var currentGroup = Math.ceil(currentPage / pageGroupSize); + var startPage = (currentGroup - 1) * pageGroupSize + 1; + var endPage = Math.min(startPage + pageGroupSize - 1, totalPages); + + // 이전 그룹 버튼 + if(startPage > 1) { + pagingHtml += ''; + } + + // 페이지 번호 버튼 + for(var i = startPage; i <= endPage; i++) { if(i === currentPage) { pagingHtml += ''; } else { pagingHtml += ''; } } + + // 다음 그룹 버튼 + if(endPage < totalPages) { + pagingHtml += ''; + } + $("#pagingButtons").html(pagingHtml); } diff --git a/src/com/pms/controller/PartMngController.java b/src/com/pms/controller/PartMngController.java index cea4b23..30b1a5b 100644 --- a/src/com/pms/controller/PartMngController.java +++ b/src/com/pms/controller/PartMngController.java @@ -941,7 +941,7 @@ public class PartMngController { } Map code_map = new HashMap(); - code_map.put("rev", commonService.bizMakeOptionList("", "", "common.getRevNoselect")); + //code_map.put("rev", commonService.bizMakeOptionList("", "", "common.getRevNoselect")); code_map.put("product_code", commonService.bizMakeOptionList("", "", "common.getProductNoselect")); // E-BOM 목록 (기존 getActiveBomList 사용) diff --git a/src/com/pms/mapper/common.xml b/src/com/pms/mapper/common.xml index 07508a3..4628365 100644 --- a/src/com/pms/mapper/common.xml +++ b/src/com/pms/mapper/common.xml @@ -2533,7 +2533,7 @@ SELECT option_objid::VARCHAR AS CODE diff --git a/src/com/pms/mapper/productionplanning.xml b/src/com/pms/mapper/productionplanning.xml index 869dea1..0b576d7 100644 --- a/src/com/pms/mapper/productionplanning.xml +++ b/src/com/pms/mapper/productionplanning.xml @@ -3493,6 +3493,30 @@ LIMIT 1 + + + + + + UPDATE MBOM_HEADER + SET STATUS = 'INACTIVE', + EDIT_DATE = NOW() + WHERE OBJID = #{mbomHeaderObjid} + + + + + UPDATE MBOM_DETAIL + SET STATUS = 'INACTIVE', + EDIT_DATE = NOW() + WHERE MBOM_HEADER_OBJID = #{mbomHeaderObjid} + + INSERT INTO MBOM_HEADER ( diff --git a/src/com/pms/service/ProductionPlanningService.java b/src/com/pms/service/ProductionPlanningService.java index ad6c8de..428fec8 100644 --- a/src/com/pms/service/ProductionPlanningService.java +++ b/src/com/pms/service/ProductionPlanningService.java @@ -1016,9 +1016,45 @@ public class ProductionPlanningService { boolean result = false; try { - sqlSession = SqlMapConfig.getInstance().getSqlSession(); + sqlSession = SqlMapConfig.getInstance().getSqlSession(false); // 수동 커밋 + + String projectObjId = CommonUtils.checkNull(paramMap.get("projectObjId")); + + // 1. 기존 M-BOM 데이터 비활성화 (새로운 BOM 할당 시 초기화) + if(!"".equals(projectObjId)) { + // 해당 프로젝트의 기존 활성 M-BOM HEADER 조회 + Map queryParam = new HashMap<>(); + queryParam.put("projectObjId", projectObjId); + List> existingMboms = sqlSession.selectList("productionplanning.getActiveMbomsByProjectId", queryParam); + + if(existingMboms != null && !existingMboms.isEmpty()) { + System.out.println("========== 기존 M-BOM 비활성화 =========="); + System.out.println("Project OBJID: " + projectObjId); + System.out.println("비활성화할 M-BOM 개수: " + existingMboms.size()); + + for(Map mbom : existingMboms) { + String mbomHeaderObjid = CommonUtils.checkNull(mbom.get("OBJID")); + + if(!"".equals(mbomHeaderObjid)) { + Map inactivateParam = new HashMap<>(); + inactivateParam.put("mbomHeaderObjid", mbomHeaderObjid); + + // M-BOM DETAIL 비활성화 + sqlSession.update("productionplanning.inactivateMbomDetail", inactivateParam); + + // M-BOM HEADER 비활성화 + sqlSession.update("productionplanning.inactivateMbomHeader", inactivateParam); + + System.out.println("M-BOM 비활성화 완료: " + mbomHeaderObjid); + } + } + } + } + + // 2. PROJECT_MGMT 업데이트 (새로운 BOM 할당 정보) int updateCount = sqlSession.update("productionplanning.saveBomAssignment", paramMap); result = (updateCount > 0); + sqlSession.commit(); } catch(Exception e) { if(sqlSession != null) {