제품구분이 Machine 이외인 경우 동일 품번이 수주되었을 경우 저장되어 있는 M-BOM을 자동으로 가져오기!
This commit is contained in:
@@ -107,13 +107,23 @@ $(function(){
|
||||
var sourceBomType = "${info.SOURCE_BOM_TYPE}";
|
||||
var sourceEbomObjId = "${info.SOURCE_EBOM_OBJID}";
|
||||
var sourceMbomObjId = "${info.SOURCE_MBOM_OBJID}";
|
||||
var productCode = "${info.PRODUCT_CODE}";
|
||||
|
||||
console.log("할당된 BOM 정보:", {
|
||||
sourceBomType: sourceBomType,
|
||||
sourceEbomObjId: sourceEbomObjId,
|
||||
sourceMbomObjId: sourceMbomObjId
|
||||
sourceMbomObjId: sourceMbomObjId,
|
||||
productCode: productCode
|
||||
});
|
||||
|
||||
// Machine 이외 제품: M-BOM 템플릿 자동 로드
|
||||
<c:if test="${not empty mbomTemplateDetails}">
|
||||
console.log("M-BOM 템플릿 발견 - 자동 로드 시작");
|
||||
setTimeout(function() {
|
||||
fn_loadMbomTemplate();
|
||||
}, 500);
|
||||
</c:if>
|
||||
|
||||
// Controller에서 이미 데이터를 로드하여 JSP에 전달하므로 자동 조회 불필요
|
||||
// setTimeout(function() {
|
||||
// fn_searchMbom();
|
||||
@@ -197,6 +207,59 @@ function fn_applyBulkDeadline() {
|
||||
}
|
||||
}
|
||||
|
||||
// M-BOM 템플릿 로드 (Machine 이외 제품)
|
||||
function fn_loadMbomTemplate() {
|
||||
console.log("fn_loadMbomTemplate 호출됨");
|
||||
|
||||
// 템플릿 데이터를 JSP에서 받아옴
|
||||
var templateDetails = [];
|
||||
<c:if test="${not empty mbomTemplateDetails}">
|
||||
<c:forEach items="${mbomTemplateDetails}" var="item">
|
||||
templateDetails.push({
|
||||
OBJID: '', // 새로 생성될 ID
|
||||
CHILD_OBJID: '${item.CHILD_OBJID}', // 템플릿의 CHILD_OBJID 유지 (트리 구조용)
|
||||
PARENT_OBJID: '${item.PARENT_OBJID}',
|
||||
SEQ: ${item.SEQ},
|
||||
LEVEL: ${item.LEVEL},
|
||||
PART_OBJID: '${item.PART_OBJID}',
|
||||
PART_NO: '${item.PART_NO}',
|
||||
PART_NAME: '${item.PART_NAME}',
|
||||
QTY: ${item.QTY},
|
||||
ITEM_QTY: ${item.QTY}, // 항목수량
|
||||
QTY_TEMP: ${item.QTY},
|
||||
UNIT: '${item.UNIT}',
|
||||
SUPPLY_TYPE: '${item.SUPPLY_TYPE}',
|
||||
MAKE_OR_BUY: '${item.MAKE_OR_BUY}',
|
||||
RAW_MATERIAL: '${item.RAW_MATERIAL}',
|
||||
RAW_MATERIAL_SPEC: '${item.RAW_MATERIAL_SPEC}',
|
||||
SIZE: '${item.RAW_MATERIAL_SIZE}',
|
||||
RAW_MATERIAL_NO: '${item.RAW_MATERIAL_PART_NO}',
|
||||
PROCESSING_VENDOR: '${item.PROCESSING_VENDOR}',
|
||||
PROCESSING_DEADLINE: '${item.PROCESSING_DEADLINE}',
|
||||
GRINDING_DEADLINE: '${item.GRINDING_DEADLINE}',
|
||||
REQUIRED_QTY: ${item.REQUIRED_QTY != null ? item.REQUIRED_QTY : 0},
|
||||
// ORDER_QTY, PRODUCTION_QTY는 명시적으로 설정하지 않음 (undefined)
|
||||
// 이렇게 하면 formatter에서 자동 계산됨
|
||||
REMARK: '${item.REMARK}',
|
||||
STATUS: 'ACTIVE'
|
||||
});
|
||||
</c:forEach>
|
||||
</c:if>
|
||||
|
||||
console.log("템플릿 데이터 개수:", templateDetails.length);
|
||||
|
||||
// 왼쪽 프레임에 데이터 로드
|
||||
var bottomFrame = parent.frames[1];
|
||||
var leftFrame = bottomFrame ? bottomFrame.frames['leftFrame'] : null;
|
||||
|
||||
if(leftFrame && leftFrame._tabulGrid) {
|
||||
leftFrame._tabulGrid.setData(templateDetails);
|
||||
console.log("템플릿 데이터 로드 완료");
|
||||
} else {
|
||||
console.error("왼쪽 프레임 또는 그리드를 찾을 수 없습니다.");
|
||||
}
|
||||
}
|
||||
|
||||
// M-BOM 조회
|
||||
function fn_searchMbom() {
|
||||
var partNo = $("#search_part_no").val().trim();
|
||||
|
||||
@@ -384,13 +384,26 @@ function fn_checkAssignmentAndOpenMbom(projectObjId) {
|
||||
success: function(response) {
|
||||
console.log("BOM 할당 정보:", response);
|
||||
|
||||
// Machine(0000928) 이외 제품인지 확인
|
||||
var productCode = response ? response.PRODUCT_CODE : null;
|
||||
var partNo = response ? response.PART_NO : null;
|
||||
|
||||
if(!response || !response.SOURCE_BOM_TYPE) {
|
||||
// 할당 정보가 없는 경우
|
||||
Swal.fire({
|
||||
title: '알림',
|
||||
text: 'BOM 할당 정보가 없습니다.\nBOM 복사 버튼을 통해 먼저 BOM을 할당해주세요.',
|
||||
icon: 'info'
|
||||
});
|
||||
|
||||
// Machine 이외 제품이고 품번이 있으면 템플릿 확인
|
||||
if(productCode && productCode !== '0000928' && partNo) {
|
||||
console.log("Machine 이외 제품 - 템플릿 확인 후 팝업 열기");
|
||||
// 템플릿이 있을 수 있으므로 팝업 열기
|
||||
fn_openMBomFormPopup(projectObjId);
|
||||
} else {
|
||||
// Machine 제품이거나 품번이 없으면 할당 필요
|
||||
Swal.fire({
|
||||
title: '알림',
|
||||
text: 'BOM 할당 정보가 없습니다.\nBOM 복사 버튼을 통해 먼저 BOM을 할당해주세요.',
|
||||
icon: 'info'
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -397,6 +397,10 @@ function fn_initGrid() {
|
||||
var data = cell.getRow().getData();
|
||||
var itemQty = parseFloat(data.ITEM_QTY) || 0;
|
||||
var orderQty = itemQty * projectQuantity;
|
||||
|
||||
// 실제 데이터에도 저장 (getMbomTreeData에서 사용)
|
||||
cell.getRow().update({ORDER_QTY: orderQty}, false);
|
||||
|
||||
return orderQty.toLocaleString();
|
||||
}
|
||||
},
|
||||
@@ -421,12 +425,16 @@ function fn_initGrid() {
|
||||
step: 1
|
||||
},
|
||||
formatter: function(cell) {
|
||||
// 초기값은 소재발주수량 (항목수량 × 프로젝트 수주수량)
|
||||
// 초기값은 소재발주수량과 동일
|
||||
var value = cell.getValue();
|
||||
if(!value) {
|
||||
|
||||
if(value === undefined || value === null || value === '' || value === 0) {
|
||||
var data = cell.getRow().getData();
|
||||
var itemQty = parseFloat(data.ITEM_QTY) || 0;
|
||||
value = itemQty * projectQuantity;
|
||||
// ORDER_QTY 값을 그대로 사용
|
||||
value = data.ORDER_QTY || 0;
|
||||
|
||||
// 실제 데이터에도 저장 (getMbomTreeData에서 사용)
|
||||
cell.getRow().update({PRODUCTION_QTY: value}, false);
|
||||
}
|
||||
return Number(value).toLocaleString();
|
||||
}
|
||||
@@ -704,7 +712,15 @@ function fn_searchMbom(searchParams) {
|
||||
console.log("M-BOM 조회 결과:", data);
|
||||
if(data && data.list) {
|
||||
console.log("데이터 개수:", data.list.length);
|
||||
_tabulGrid.setData(data.list);
|
||||
|
||||
// ORDER_QTY, PRODUCTION_QTY 제거하여 formatter에서 재계산되도록
|
||||
var processedData = data.list.map(function(item) {
|
||||
delete item.ORDER_QTY;
|
||||
delete item.PRODUCTION_QTY;
|
||||
return item;
|
||||
});
|
||||
|
||||
_tabulGrid.setData(processedData);
|
||||
} else {
|
||||
console.log("데이터 없음");
|
||||
_tabulGrid.setData([]);
|
||||
|
||||
Reference in New Issue
Block a user