diff --git a/.playwright-mcp/structure_popup_main.png b/.playwright-mcp/structure_popup_main.png
deleted file mode 100644
index d398cfc..0000000
Binary files a/.playwright-mcp/structure_popup_main.png and /dev/null differ
diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/productionplanning.xml b/WebContent/WEB-INF/classes/com/pms/mapper/productionplanning.xml
index 5d60271..2926e4e 100644
--- a/WebContent/WEB-INF/classes/com/pms/mapper/productionplanning.xml
+++ b/WebContent/WEB-INF/classes/com/pms/mapper/productionplanning.xml
@@ -3011,4 +3011,326 @@
LEFT JOIN USER_INFO UI ON UI.USER_ID = T.WRITER
WHERE T.OBJID::VARCHAR = #{objid}
+
+
+
+
+
+
+
+
+
+ INSERT INTO m_bom_data (
+ objid,
+ project_mgmt_objid,
+ bom_report_objid,
+ parent_objid,
+ child_objid,
+ parent_part_no,
+ part_no,
+ part_name,
+ qty,
+ aggregate_qty,
+ level,
+ material,
+ heat_treat_hardness,
+ heat_treat_method,
+ surface_treatment,
+ supplier_name,
+ category_name,
+ raw_material,
+ size,
+ order_qty,
+ quantity,
+ production_qty,
+ processor_name,
+ process_due_date,
+ grinding_due_date,
+ writer,
+ regdate
+ ) VALUES (
+ #{OBJID}::NUMERIC,
+ #{projectMgmtObjid}::NUMERIC,
+ #{BOM_REPORT_OBJID}::NUMERIC,
+
+
+ #{PARENT_OBJID}::NUMERIC,
+
+
+ NULL,
+
+
+
+
+ #{CHILD_OBJID}::NUMERIC,
+
+
+ NULL,
+
+
+ #{PARENT_PART_NO},
+ #{PART_NO},
+ #{PART_NAME},
+ #{QTY}::NUMERIC,
+ #{AGGREGATE_QTY}::NUMERIC,
+ #{LEVEL}::INTEGER,
+ #{MATERIAL},
+ #{HEAT_TREAT_HARDNESS},
+ #{HEAT_TREAT_METHOD},
+ #{SURFACE_TREATMENT},
+ #{SUPPLIER_NAME},
+ #{CATEGORY_NAME},
+ #{RAW_MATERIAL},
+ #{SIZE},
+ #{ORDER_QTY}::NUMERIC,
+ #{QUANTITY}::NUMERIC,
+ #{PRODUCTION_QTY}::NUMERIC,
+ #{PROCESSOR_NAME},
+ #{PROCESS_DUE_DATE},
+ #{GRINDING_DUE_DATE},
+ #{writer},
+ NOW()
+ )
+
+
+
+
+ UPDATE project_mgmt
+ SET
+ mbom_version = COALESCE(mbom_version, 0) + 1,
+ mbom_regdate = NOW(),
+ mbom_writer = #{writer},
+ mbom_status = 'Y'
+ WHERE objid = #{projectMgmtObjid}
+
+
+
+
+ UPDATE m_bom_data
+ SET
+ STATUS = 'DELETED',
+ EDIT_DATE = NOW()
+ WHERE PROJECT_MGMT_OBJID = #{projectMgmtObjid}::NUMERIC
+ AND STATUS = 'ACTIVE'
+
+
+
+
+ UPDATE project_mgmt
+ SET
+ mbom_status = NULL,
+ mbom_version = NULL,
+ mbom_regdate = NULL,
+ mbom_writer = NULL
+ WHERE objid = #{projectMgmtObjid}
+
+
+
+
diff --git a/WebContent/WEB-INF/view/productionplanning/mBomEbomSelectPopup.jsp b/WebContent/WEB-INF/view/productionplanning/mBomEbomSelectPopup.jsp
index 1e522bc..48645a5 100644
--- a/WebContent/WEB-INF/view/productionplanning/mBomEbomSelectPopup.jsp
+++ b/WebContent/WEB-INF/view/productionplanning/mBomEbomSelectPopup.jsp
@@ -28,32 +28,33 @@
}
.current-ebom-section {
background: #f9f9f9;
- padding: 20px;
+ padding: 10px 15px;
margin-bottom: 10px;
border: 1px solid #ddd;
border-radius: 5px;
}
.current-ebom-section h4 {
- margin: 0 0 15px 0;
+ margin: 0 0 8px 0;
color: #333;
- font-size: 16px;
+ font-size: 13px;
}
.ebom-info-table {
width: 100%;
border-collapse: collapse;
background: white;
- margin-bottom: 15px;
+ margin-bottom: 8px;
+ font-size: 12px;
}
.ebom-info-table th {
background: #f5f5f5;
- padding: 10px;
+ padding: 6px 8px;
text-align: left;
border: 1px solid #ddd;
- width: 150px;
+ width: 120px;
font-weight: bold;
}
.ebom-info-table td {
- padding: 10px;
+ padding: 6px 8px;
border: 1px solid #ddd;
}
.ebom-list-section {
@@ -314,7 +315,7 @@ function fn_removeEbom() {
-
다른 E-BOM으로 변경하려면 "E-BOM 변경" 버튼을 클릭하세요.
+
다른 E-BOM으로 변경하려면 "E-BOM 변경" 버튼을 클릭하세요.
diff --git a/WebContent/WEB-INF/view/productionplanning/mBomFormPopup.jsp b/WebContent/WEB-INF/view/productionplanning/mBomFormPopup.jsp
new file mode 100644
index 0000000..c8f5ddb
--- /dev/null
+++ b/WebContent/WEB-INF/view/productionplanning/mBomFormPopup.jsp
@@ -0,0 +1,694 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page import="com.pms.common.utils.*"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ page import="java.util.*" %>
+<%@include file= "/init.jsp" %>
+
+
+
+
+<%=Constants.SYSTEM_NAME%>
+
+
+
+
+
+
+
+
+
+
diff --git a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp
index d467ff0..cce200a 100644
--- a/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp
+++ b/WebContent/WEB-INF/view/productionplanning/mBomMgmtList.jsp
@@ -283,7 +283,7 @@ function fn_openEBomSelectPopup(projectMgmtObjid, partNo, partName, bomReportObj
// M-BOM 팝업
function fn_openMBomPopup(objId) {
- var popup_width = 1800;
+ var popup_width = 1400;
var popup_height = 800;
var url = "/productionplanning/mBomFormPopup.do?objId=" + objId;
fn_centerPopup(popup_width, popup_height, url, 'mbomPopup');
diff --git a/src/com/pms/controller/ProductionPlanningController.java b/src/com/pms/controller/ProductionPlanningController.java
index 70e4ec3..0862221 100644
--- a/src/com/pms/controller/ProductionPlanningController.java
+++ b/src/com/pms/controller/ProductionPlanningController.java
@@ -1007,4 +1007,168 @@ public class ProductionPlanningController extends BaseService {
}
return resultMap;
}
+
+ /**
+ * 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(!objId.isEmpty()) {
+ Map projectInfo = productionPlanningService.getProjectMgmtInfo(objId);
+ request.setAttribute("projectInfo", projectInfo);
+
+ // E-BOM이 할당되어 있는지 확인 (PART_OBJID 사용)
+ String partObjid = CommonUtils.checkNull(projectInfo.get("PART_OBJID"));
+ if(!partObjid.isEmpty()) {
+ // E-BOM 정보 조회
+ Map ebomInfo = productionPlanningService.getEbomInfo(partObjid);
+ request.setAttribute("ebomInfo", ebomInfo);
+ }
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ return "/productionplanning/mBomFormPopup";
+ }
+
+ /**
+ * M-BOM 그리드 데이터 조회 (저장된 M-BOM 또는 빈 데이터)
+ * @param request
+ * @param paramMap
+ * @return
+ */
+ @ResponseBody
+ @RequestMapping("/productionplanning/getMBomGridData.do")
+ public Map getMBomGridData(HttpServletRequest request, @RequestParam Map paramMap) {
+ Map resultMap = new HashMap<>();
+ try {
+ String projectMgmtObjid = CommonUtils.checkNull(paramMap.get("projectMgmtObjid"));
+
+ if(projectMgmtObjid.isEmpty()) {
+ resultMap.put("success", false);
+ resultMap.put("message", "프로젝트 정보가 없습니다.");
+ return resultMap;
+ }
+
+ // 저장된 M-BOM 데이터 조회 (없으면 빈 리스트)
+ List