diff --git a/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp b/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp
index 1d84dbd..951d68c 100644
--- a/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp
+++ b/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp
@@ -54,13 +54,47 @@ $(function(){
$("#search_part_no").val("${info.PART_NO}");
$("#search_part_name").val("${info.PART_NAME}");
- $("#search_mbom_part_no").val("${info.MBOM_PART_NO}"); // M-BOM 품번 (자동 생성된 값)
- $("#search_save_date").val("${info.MBOM_REGDATE}");
+ $("#search_quantity").val("${info.QUANTITY}"); // 프로젝트 수주수량
- // 자동으로 M-BOM 조회
- setTimeout(function() {
- fn_searchMbom();
- }, 500);
+ // 저장된 M-BOM 품번 조회 및 표시
+ var projectObjId = "${info.OBJID}";
+ $.ajax({
+ url: "/productionplanning/getLatestMbomByProjectId.do",
+ type: "POST",
+ data: { projectObjId: projectObjId },
+ dataType: "json",
+ async: false,
+ success: function(response) {
+ if(response && response.MBOM_NO) {
+ console.log("저장된 M-BOM 발견:", response);
+ $("#search_mbom_part_no").val(response.MBOM_NO);
+ $("#search_save_date").val(response.REGDATE);
+ } else {
+ console.log("저장된 M-BOM 없음");
+ $("#search_mbom_part_no").val("");
+ $("#search_save_date").val("");
+ }
+ },
+ error: function(xhr, status, error) {
+ console.error("M-BOM 조회 오류:", error);
+ }
+ });
+
+ // 할당된 BOM 정보 확인 및 자동 로드
+ var sourceBomType = "${info.SOURCE_BOM_TYPE}";
+ var sourceEbomObjId = "${info.SOURCE_EBOM_OBJID}";
+ var sourceMbomObjId = "${info.SOURCE_MBOM_OBJID}";
+
+ console.log("할당된 BOM 정보:", {
+ sourceBomType: sourceBomType,
+ sourceEbomObjId: sourceEbomObjId,
+ sourceMbomObjId: sourceMbomObjId
+ });
+
+ // Controller에서 이미 데이터를 로드하여 JSP에 전달하므로 자동 조회 불필요
+ // setTimeout(function() {
+ // fn_searchMbom();
+ // }, 500);
//Part 연결
@@ -268,6 +302,11 @@ $(function(){
window.close();
});
+ // 일괄 적용 버튼 클릭
+ $("#btnApplyBulkDeadline").click(function(){
+ fn_applyBulkDeadline();
+ });
+
});
//1레벨에 같은 Part No가 등록되어있는지 확인.
@@ -461,15 +500,67 @@ function fn_changeRelatePartInfo(objId,rightObjId,leftObjId,leftPartNoQty,leftPa
});
}
+// 가공납기/연삭납기 일괄 적용
+function fn_applyBulkDeadline() {
+ var processingDeadline = $("#bulk_processing_deadline").val();
+ var grindingDeadline = $("#bulk_grinding_deadline").val();
+
+ if(!processingDeadline && !grindingDeadline) {
+ alert("가공납기 또는 연삭납기를 입력해주세요.");
+ return;
+ }
+
+ // 확인 메시지
+ var message = "선택한 날짜를 전체 항목에 일괄 적용하시겠습니까?\n\n";
+ if(processingDeadline) message += "가공납기: " + processingDeadline + "\n";
+ if(grindingDeadline) message += "연삭납기: " + grindingDeadline;
+
+ if(!confirm(message)) {
+ return;
+ }
+
+ // 왼쪽 프레임의 함수 호출
+ var bottomFrame = parent.frames[1];
+ var leftFrame = bottomFrame ? bottomFrame.frames['leftFrame'] : null;
+
+ if(!leftFrame || !leftFrame.applyBulkDeadline) {
+ alert("M-BOM 화면을 찾을 수 없습니다.");
+ return;
+ }
+
+ // 일괄 적용 실행
+ var updatedCount = leftFrame.applyBulkDeadline(processingDeadline, grindingDeadline);
+
+ if(updatedCount > 0) {
+ alert("일괄 적용이 완료되었습니다. (" + updatedCount + "개 항목)");
+ } else {
+ alert("적용할 데이터가 없습니다.");
+ }
+}
+
// M-BOM 조회
function fn_searchMbom() {
var partNo = $("#search_part_no").val().trim();
var partName = $("#search_part_name").val().trim();
var mbomPartNo = $("#search_mbom_part_no").val().trim();
var saveDate = $("#search_save_date").val().trim();
- var bomReportObjId = "${info.BOM_REPORT_OBJID}"; // M-BOM의 BOM_REPORT_OBJID
+
+ // 할당된 BOM 정보 사용 (우선순위: SOURCE_EBOM_OBJID > SOURCE_MBOM_OBJID > 기존 BOM_REPORT_OBJID)
+ var sourceBomType = "${info.SOURCE_BOM_TYPE}";
+ var sourceEbomObjId = "${info.SOURCE_EBOM_OBJID}";
+ var sourceMbomObjId = "${info.SOURCE_MBOM_OBJID}";
+ var bomReportObjId = "";
+
+ if(sourceBomType === "EBOM" && sourceEbomObjId) {
+ bomReportObjId = sourceEbomObjId;
+ } else if(sourceBomType === "MBOM" && sourceMbomObjId) {
+ bomReportObjId = sourceMbomObjId;
+ } else {
+ bomReportObjId = "${info.BOM_REPORT_OBJID}"; // 기존 방식 (하위 호환)
+ }
console.log("fn_searchMbom 호출:", {
+ sourceBomType: sourceBomType,
bomReportObjId: bomReportObjId,
partNo: partNo,
partName: partName,
@@ -478,15 +569,20 @@ function fn_searchMbom() {
});
// 왼쪽 프레임의 조회 함수 호출
- var leftFrame = parent.frames['leftFrame'];
+ var bottomFrame = parent.frames[1]; // 하단 프레임셋
+ var leftFrame = bottomFrame ? bottomFrame.frames['leftFrame'] : null;
+
if(leftFrame && leftFrame.fn_searchMbom) {
leftFrame.fn_searchMbom({
bomReportObjId: bomReportObjId,
+ sourceBomType: sourceBomType,
partNo: partNo,
partName: partName,
mbomPartNo: mbomPartNo,
saveDate: saveDate
});
+ } else {
+ console.error("왼쪽 프레임 또는 fn_searchMbom 함수를 찾을 수 없습니다.");
}
}
@@ -494,8 +590,16 @@ function fn_searchMbom() {
function fn_saveMbom() {
console.log("fn_saveMbom 호출됨");
- // 왼쪽 프레임에서 M-BOM 트리 데이터 가져오기
- var leftFrame = parent.frames['leftFrame'];
+ // 프레임 구조: parent(최상위) -> parent.frames[1](하단) -> parent.frames[1].frames['leftFrame']
+ var bottomFrame = parent.frames[1]; // 하단 프레임 (mBomPopupFs.jsp)
+ console.log("bottomFrame:", bottomFrame);
+
+ if(!bottomFrame) {
+ alert("하단 프레임을 찾을 수 없습니다.");
+ return;
+ }
+
+ var leftFrame = bottomFrame.frames['leftFrame']; // 왼쪽 프레임 (mBomPopupLeft.jsp)
console.log("leftFrame:", leftFrame);
if(!leftFrame) {
@@ -518,15 +622,35 @@ function fn_saveMbom() {
return;
}
+ var projectObjId = "${info.OBJID}";
+
+ // 기존 M-BOM 존재 여부 확인 (동기 처리)
+ var existingMbom = null;
+ $.ajax({
+ url: "/productionplanning/getLatestMbomByProjectId.do",
+ type: "POST",
+ data: { projectObjId: projectObjId },
+ dataType: "json",
+ async: false,
+ success: function(response) {
+ if(response && response.OBJID) {
+ existingMbom = response;
+ console.log("기존 M-BOM 발견:", existingMbom);
+ }
+ }
+ });
+
var saveData = {
+ projectObjId: projectObjId, // PROJECT_MGMT의 OBJID
mbomData: mbomData,
partNo: $("#search_part_no").val().trim(),
partName: $("#search_part_name").val().trim(),
- mbomPartNo: $("#search_mbom_part_no").val().trim(),
- isUpdate: $("#search_mbom_part_no").val().trim() !== ""
+ mbomPartNo: existingMbom ? existingMbom.MBOM_NO : "", // 기존 M-BOM 품번 사용
+ isUpdate: existingMbom !== null // 기존 M-BOM이 있으면 업데이트
};
console.log("저장할 데이터:", saveData);
+ console.log("isUpdate:", saveData.isUpdate);
// 저장 API 호출
$.ajax({
@@ -540,13 +664,13 @@ function fn_saveMbom() {
if(data && data.result === "success") {
alert("M-BOM이 저장되었습니다.");
- // 조회 새로고침
- fn_searchMbom();
-
// 부모 창 새로고침
if(window.opener && window.opener.fn_search) {
window.opener.fn_search();
}
+
+ // 현재 창 닫기
+ window.close();
} else {
alert("M-BOM 저장에 실패했습니다: " + (data.message || ""));
}
@@ -561,50 +685,45 @@ function fn_saveMbom() {
// M-BOM 이력보기
function fn_showHistory() {
- var mbomPartNo = $("#search_mbom_part_no").val().trim();
+ var projectObjId = "${info.OBJID}";
- if(!mbomPartNo) {
- alert("M-BOM 품번이 없습니다. 먼저 M-BOM을 저장해주세요.");
+ if(!projectObjId) {
+ alert("프로젝트 정보가 없습니다.");
return;
}
- // M-BOM 이력 조회
+ // M-BOM 이력 조회 (프로젝트 기준)
$.ajax({
url: "/productionplanning/getMbomHistory.do",
method: 'post',
data: {
- mbomPartNo: mbomPartNo
+ projectObjId: projectObjId
},
dataType: 'json',
success: function(data) {
if(data && data.historyList && data.historyList.length > 0) {
- // 이력 팝업 표시
- var historyHtml = "
";
- historyHtml += "
";
- historyHtml += "
순번
";
- historyHtml += "
M-BOM 품번
";
- historyHtml += "
저장일
";
- historyHtml += "
수정자
";
- historyHtml += "
비고
";
- historyHtml += "
";
-
- for(var i = 0; i < data.historyList.length; i++) {
- var item = data.historyList[i];
- historyHtml += "
";
- historyHtml += "
" + (i + 1) + "
";
- historyHtml += "
" + (item.MBOM_PART_NO || "") + "
";
- historyHtml += "
" + (item.REGDATE || "") + "
";
- historyHtml += "
" + (item.REGUSER || "") + "
";
- historyHtml += "
" + (item.REMARK || "") + "
";
- historyHtml += "
";
- }
-
- historyHtml += "
";
+ // 이력 상세 분석 및 HTML 생성
+ var historyHtml = generateHistoryHtml(data.historyList);
// 새 창으로 이력 표시
- var historyWindow = window.open("", "mbomHistory", "width=800,height=600,scrollbars=yes,resizable=yes");
- historyWindow.document.write("M-BOM 이력");
- historyWindow.document.write("
M-BOM 수정 이력
");
+ var historyWindow = window.open("", "mbomHistory", "width=1400,height=800,scrollbars=yes,resizable=yes");
+ historyWindow.document.write("M-BOM 변경 이력");
+ historyWindow.document.write("");
+ historyWindow.document.write("");
+ historyWindow.document.write("
M-BOM 변경 이력
");
historyWindow.document.write(historyHtml);
historyWindow.document.write("");
historyWindow.document.close();
@@ -618,11 +737,419 @@ function fn_showHistory() {
}
});
}
+
+// 이력 HTML 생성 함수
+function generateHistoryHtml(historyList) {
+ var html = "";
+
+ for(var i = 0; i < historyList.length; i++) {
+ var history = historyList[i];
+ var changeType = history.CHANGE_TYPE || "UNKNOWN";
+ var changeDate = history.CHANGE_DATE || history.REGDATE || "";
+ var changeUser = history.CHANGE_USER || "";
+
+ // 이력 헤더
+ html += "