diff --git a/WebContent/WEB-INF/view/partMng/structureBomCopyFormPopup.jsp b/WebContent/WEB-INF/view/partMng/structureBomCopyFormPopup.jsp index 62534d7..0160a6d 100644 --- a/WebContent/WEB-INF/view/partMng/structureBomCopyFormPopup.jsp +++ b/WebContent/WEB-INF/view/partMng/structureBomCopyFormPopup.jsp @@ -7,212 +7,611 @@ <%=Constants.SYSTEM_NAME%> + + + -
-
-

- BOM COPY -

-
- -
- - - - - - - - - - - - - - - - -
-

SOURCE

-
- ※복사할 Version 을 선택하세요. - - - - - - - - - - - - - - - - -
- -
- -
- -
-
- - - -
- -
-

TARGET

-
- ※Version 미선택시 새로운 Version으로 신규 생성 되며 기등록된 BOM구조는 삭제 됩니다. - - - - - - - - - - - - - - - - - -
- -
- -
- -
-
-
-
- - -
-
-
+ + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + +
+
+ + + + +
+
+
+ + +
+ + +
- \ 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 1dacc89..79d8efa 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp @@ -34,6 +34,11 @@ $(document).ready(function(){ fn_search(); }); + // BOM 복사 버튼 + $("#btnBomCopy").click(function(){ + fn_openBomCopyPopup(); + }); + // 전체 체크박스 $(document).on('click', '#checkAll', function() { $('.rowCheck').prop('checked', $(this).prop('checked')); @@ -219,6 +224,27 @@ var columns = [ function fn_search(){ // showCheck를 false로 설정하여 자동 체크박스 제거 (columns에 이미 체크박스 정의되어 있음) _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/productionplanning/mBomMgmtGridList.do", columns, false); + + // 그리드 로드 완료 후 행 클릭 이벤트 추가 + if(_tabulGrid) { + _tabulGrid.on("rowClick", function(e, row){ + // 체크박스를 직접 클릭한 경우는 제외 + if($(e.target).is('input[type="checkbox"]')) { + return; + } + + // M-BOM 아이콘을 클릭한 경우는 제외 + if($(e.target).closest('.clip_icon, .hyphen_icon').length > 0) { + return; + } + + // 행 클릭 시 체크박스 토글 + var checkbox = $(row.getElement()).find('.rowCheck'); + if(checkbox.length > 0) { + checkbox.prop('checked', !checkbox.prop('checked')); + } + }); + } } // E-BOM 팝업 @@ -252,6 +278,80 @@ function fn_openMBomPopup(objId) { var url = "/productionplanning/mBomFormPopup.do?objId=" + objId; fn_centerPopup(popup_width, popup_height, url, 'mbomPopup'); } + +// BOM 복사 팝업 +function fn_openBomCopyPopup() { + // 체크된 행이 있는지 확인 + var checkedRows = $('.rowCheck:checked'); + + if(checkedRows.length === 0) { + Swal.fire({ + title: '선택 필요', + text: 'BOM을 복사할 프로젝트를 선택해주세요.', + icon: 'warning' + }); + return; + } + + if(checkedRows.length > 1) { + Swal.fire({ + title: '선택 오류', + text: '한 번에 하나의 프로젝트만 선택해주세요.', + icon: 'warning' + }); + return; + } + + // 선택된 행의 데이터 가져오기 + var selectedObjId = checkedRows.first().data('objid'); + var selectedRow = _tabulGrid.searchRows("OBJID", "=", selectedObjId); + + if(selectedRow.length === 0) { + Swal.fire('선택된 데이터를 찾을 수 없습니다.'); + return; + } + + var rowData = selectedRow[0].getData(); + var mbomStatus = fnc_checkNull(rowData.MBOM_STATUS); + + // M-BOM이 이미 생성되어 있는 경우 경고 + if(mbomStatus !== '' && mbomStatus !== '0') { + Swal.fire({ + title: '경고', + text: '저장된 M-BOM이 초기화 됩니다.\n계속하시겠습니까?', + icon: 'warning', + showCancelButton: true, + confirmButtonText: '확인', + cancelButtonText: '취소' + }).then((result) => { + if(result.isConfirmed) { + fn_openBomCopyPopupWindow(selectedObjId); + } + }); + } else { + fn_openBomCopyPopupWindow(selectedObjId); + } +} + +// BOM 복사 팝업 창 열기 +function fn_openBomCopyPopupWindow(objId) { + var popup_width = 1400; + var popup_height = 800; + var url = "/partMng/setBomCopyFormPopup.do?objId=" + objId; + var left = (screen.width - popup_width) / 2; + var top = (screen.height - popup_height) / 2; + + var popup = window.open(url, "bomCopyPopup", "width=" + popup_width + ",height=" + popup_height + ",left=" + left + ",top=" + top + ",scrollbars=yes,resizable=yes"); + + // 팝업이 닫힐 때 그리드 새로고침 + var checkPopup = setInterval(function() { + if(popup.closed) { + clearInterval(checkPopup); + console.log("BOM 복사 팝업 닫힘 - 그리드 새로고침"); + fn_search(); + } + }, 500); +}
@@ -264,6 +364,7 @@ function fn_openMBomPopup(objId) {
+
diff --git a/src/com/pms/controller/PartMngController.java b/src/com/pms/controller/PartMngController.java index 04aeede..05f251c 100644 --- a/src/com/pms/controller/PartMngController.java +++ b/src/com/pms/controller/PartMngController.java @@ -1782,6 +1782,44 @@ public class PartMngController { return resultMap; } + /** + * 품번으로 BOM OBJID 조회 + * @param request + * @param paramMap + * @return + */ + @RequestMapping("/partMng/getBomObjIdByPartNo.do") + @ResponseBody + public Map getBomObjIdByPartNo(HttpServletRequest request, @RequestParam Map paramMap){ + Map resultMap = new HashMap(); + + try{ + String partNo = CommonUtils.checkNull(paramMap.get("partNo")); + + if(partNo.isEmpty()) { + resultMap.put("OBJID", null); + return resultMap; + } + + // 품번으로 BOM OBJID 조회 + Map bomInfo = partMngService.getBomObjIdByPartNo(paramMap); + + if(bomInfo != null) { + resultMap.put("OBJID", bomInfo.get("OBJID")); + resultMap.put("PART_NO", bomInfo.get("PART_NO")); + resultMap.put("PART_NAME", bomInfo.get("PART_NAME")); + } else { + resultMap.put("OBJID", null); + } + + }catch(Exception e){ + e.printStackTrace(); + resultMap.put("OBJID", null); + } + + return resultMap; + } + /** * 품번 중복 체크 (PART_BOM_REPORT 테이블) * @param request diff --git a/src/com/pms/controller/ProductionPlanningController.java b/src/com/pms/controller/ProductionPlanningController.java index 8de2da3..7594b9b 100644 --- a/src/com/pms/controller/ProductionPlanningController.java +++ b/src/com/pms/controller/ProductionPlanningController.java @@ -933,6 +933,47 @@ public class ProductionPlanningController extends BaseService { return "/productionplanning/mBomEbomSelectPopup"; } + /** + * M-BOM 팝업 + * @param request + * @param paramMap + * @return + */ + @RequestMapping("/productionplanning/mBomFormPopup.do") + public String mBomFormPopup(HttpServletRequest request, @RequestParam Map paramMap) { + try { + String objId = CommonUtils.checkNull(paramMap.get("objId")); + + // PROJECT_MGMT 정보 조회 + if(!"".equals(objId)) { + paramMap.put("objId", objId); + Map projectInfo = commonService.selectOne("productionplanning.getProjectMgmtDetail", request, paramMap); + request.setAttribute("info", projectInfo); + + // 할당된 E-BOM 정보 조회 + if(projectInfo != null) { + String bomReportObjid = CommonUtils.checkNull(projectInfo.get("BOM_REPORT_OBJID")); + if(!"".equals(bomReportObjid)) { + Map ebomParam = new HashMap<>(); + ebomParam.put("objId", bomReportObjid); + ebomParam.put("bomReportObjId", bomReportObjid); + + // E-BOM 정보 조회 + Map ebomInfo = commonService.selectOne("partMng.getBomReportInfo", request, ebomParam); + request.setAttribute("ebomInfo", ebomInfo); + + // BOM 트리 데이터 조회 (레벨 정보 포함) + List> bomTreeList = commonService.selectList("partMng.getBOMTreeList", request, ebomParam); + request.setAttribute("bomTreeList", bomTreeList); + } + } + } + } catch(Exception e) { + e.printStackTrace(); + } + return "/productionplanning/mBomFormPopup"; + } + /** * E-BOM을 M-BOM(PROJECT_MGMT)에 할당 * @param request diff --git a/src/com/pms/mapper/common.xml b/src/com/pms/mapper/common.xml index d718536..07508a3 100644 --- a/src/com/pms/mapper/common.xml +++ b/src/com/pms/mapper/common.xml @@ -2530,18 +2530,18 @@ SELECT option_objid::VARCHAR AS CODE AND PRODUCT_MGMT_OBJID::VARCHAR = #{codeId}::VARCHAR - + SELECT + T.OBJID::varchar AS CODE + ,COALESCE(T.REVISION, T.REV, '1.0') AS NAME + ,T1.PRODUCT_CODE AS CODE_CD + ,'' AS STATUS + ,T.spec_name AS ID + ,'' AS EXT_VAL + FROM PART_BOM_REPORT T,PRODUCT_MGMT T1 +WHERE T.PRODUCT_MGMT_OBJID = T1.OBJID +AND T1.OBJID = #{code}::numeric +ORDER BY COALESCE(T.REVISION, T.REV, '1.0') diff --git a/src/com/pms/mapper/partMng.xml b/src/com/pms/mapper/partMng.xml index 8b962e5..8c9a0b9 100644 --- a/src/com/pms/mapper/partMng.xml +++ b/src/com/pms/mapper/partMng.xml @@ -2999,6 +2999,19 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.* ORDER BY REGDATE DESC + + + - + diff --git a/src/com/pms/service/PartMngService.java b/src/com/pms/service/PartMngService.java index 6d983d9..1c8cde5 100644 --- a/src/com/pms/service/PartMngService.java +++ b/src/com/pms/service/PartMngService.java @@ -3476,6 +3476,35 @@ public class PartMngService extends BaseService { return ""; } + /** + * 품번으로 BOM OBJID 조회 + */ + public Map getBomObjIdByPartNo(Map paramMap) throws Exception{ + Map resultMap = null; + SqlSession sqlSession = null; + + try { + sqlSession = SqlMapConfig.getInstance().getSqlSession(false); + + // PART_BOM_REPORT 테이블에서 품번으로 OBJID 조회 + resultMap = (Map)sqlSession.selectOne("partMng.getBomObjIdByPartNo", paramMap); + + if(resultMap != null) { + resultMap = CommonUtils.toUpperCaseMapKey(resultMap); + } + + } catch(Exception e) { + e.printStackTrace(); + throw e; + } finally { + if(sqlSession != null) { + sqlSession.close(); + } + } + + return resultMap; + } + /** * BOM 복사를 위한 데이터 조회 (엑셀 파싱 형식과 동일하게 반환) */