mbom 가공업체 RPS 기본 선택

This commit is contained in:
2025-12-12 15:09:58 +09:00
parent 9e4d0d5c1a
commit fb15fcc647
3 changed files with 115 additions and 52 deletions

View File

@@ -21,6 +21,32 @@ body, html {
}
</style>
<script>
// 가공업체 목록 (OBJID -> 업체명 변환용)
var vendorMap = {};
// 가공업체 목록 로드
function loadVendorList() {
$.ajax({
url: '/common/getClientMngList.do',
method: 'POST',
async: false,
dataType: 'json',
success: function(data) {
if(data && data.length > 0) {
data.forEach(function(item) {
vendorMap[item.CODE_ID] = item.NAME;
});
}
}
});
}
// OBJID를 업체명으로 변환
function getVendorName(objid) {
if(!objid) return '';
return vendorMap[objid] || objid;
}
// confirm/alert 헬퍼 함수
function showConfirm(options) {
if(typeof options === 'string') {
@@ -50,6 +76,9 @@ $(function(){
$('.select2').select2();
// 가공업체 목록 로드
loadVendorList();
// 페이지 로드 시 프로젝트 정보로 검색 필드 자동 입력
<c:if test="${not empty info}">
$("#search_part_no").val("${info.PART_NO}");
@@ -610,9 +639,18 @@ function generateUpdateHistoryTable(beforeData, afterData) {
for(var j = 0; j < fieldChanges.length; j++) {
var fc = fieldChanges[j];
var fieldNameKr = getFieldNameKorean(fc.field);
// 가공업체 필드는 OBJID를 업체명으로 변환
var beforeVal = fc.before;
var afterVal = fc.after;
if(fc.field === 'PROCESSING_VENDOR' || fc.field === 'processingVendor') {
beforeVal = beforeVal ? getVendorName(beforeVal) : null;
afterVal = afterVal ? getVendorName(afterVal) : null;
}
html += "<strong>" + fieldNameKr + ":</strong> ";
html += "<span class='before-value'>" + (fc.before || "(없음)") + "</span> → ";
html += "<span class='after-value'>" + (fc.after || "(없음)") + "</span>";
html += "<span class='before-value'>" + (beforeVal || "(없음)") + "</span> → ";
html += "<span class='after-value'>" + (afterVal || "(없음)") + "</span>";
if(j < fieldChanges.length - 1) html += "<br>";
}
@@ -706,7 +744,7 @@ function oldGenerateUpdateHistoryTable(beforeData, afterData) {
html += "<td>" + (item.rawMaterialSize || "") + "</td>";
html += "<td>" + (item.rawMaterialPartNo || "") + "</td>";
html += "<td>" + (item.requiredQty || "") + "</td>";
html += "<td>" + (item.processingVendor || "") + "</td>";
html += "<td>" + (item.processingVendorName || item.processingVendor || "") + "</td>";
html += "<td>" + (item.processingDeadline || "") + "</td>";
html += "<td>" + (item.grindingDeadline || "") + "</td>";
html += "<td>" + (item.orderQty || "") + "</td>";
@@ -728,7 +766,7 @@ function oldGenerateUpdateHistoryTable(beforeData, afterData) {
html += "<td>" + (item.rawMaterialSize || "") + "</td>";
html += "<td>" + (item.rawMaterialPartNo || "") + "</td>";
html += "<td>" + (item.requiredQty || "") + "</td>";
html += "<td>" + (item.processingVendor || "") + "</td>";
html += "<td>" + (item.processingVendorName || item.processingVendor || "") + "</td>";
html += "<td>" + (item.processingDeadline || "") + "</td>";
html += "<td>" + (item.grindingDeadline || "") + "</td>";
html += "<td>" + (item.orderQty || "") + "</td>";
@@ -755,7 +793,7 @@ function oldGenerateUpdateHistoryTable(beforeData, afterData) {
html += "<td" + (changedFields['rawMaterialSize'] ? " class='field-changed'" : "") + ">" + (mod.after.rawMaterialSize || "") + "</td>";
html += "<td" + (changedFields['rawMaterialPartNo'] ? " class='field-changed'" : "") + ">" + (mod.after.rawMaterialPartNo || "") + "</td>";
html += "<td" + (changedFields['requiredQty'] ? " class='field-changed'" : "") + ">" + (mod.after.requiredQty || "") + "</td>";
html += "<td" + (changedFields['processingVendor'] ? " class='field-changed'" : "") + ">" + (mod.after.processingVendor || "") + "</td>";
html += "<td" + (changedFields['processingVendor'] ? " class='field-changed'" : "") + ">" + (mod.after.processingVendorName || mod.after.processingVendor || "") + "</td>";
html += "<td" + (changedFields['processingDeadline'] ? " class='field-changed'" : "") + ">" + (mod.after.processingDeadline || "") + "</td>";
html += "<td" + (changedFields['grindingDeadline'] ? " class='field-changed'" : "") + ">" + (mod.after.grindingDeadline || "") + "</td>";
html += "<td" + (changedFields['orderQty'] ? " class='field-changed'" : "") + ">" + (mod.after.orderQty || "") + "</td>";

View File

@@ -137,11 +137,11 @@ function fn_loadSupplyVendorList() {
dataType: 'json',
success: function(data) {
if(data && data.length > 0) {
// {id: CODE_NAME, text: CODE_NAME} 형태로 변환 (Select2용)
// {id: CODE_ID(OBJID), text: NAME(CLIENT_NM)} 형태로 변환
supplyVendorList = data.map(function(item) {
return {
id: item.CODE_NAME,
text: item.CODE_NAME
id: item.CODE_ID,
text: item.NAME
};
});
console.log("가공업체 목록 로드 완료:", supplyVendorList.length + "개");
@@ -172,13 +172,13 @@ function createSelect2Editor(options) {
options.forEach(function(opt) {
var option = document.createElement("option");
if(typeof opt === 'object') {
option.value = opt.id || opt.value || opt;
option.text = opt.text || opt.label || opt;
option.value = opt.id || opt.value || '';
option.text = opt.text || opt.label || '';
} else {
option.value = opt;
option.text = opt;
}
if(option.value === cellValue) {
if(option.value == cellValue) {
option.selected = true;
}
select.appendChild(option);
@@ -192,7 +192,13 @@ function createSelect2Editor(options) {
dropdownAutoWidth: true,
placeholder: '선택',
allowClear: true,
dropdownParent: $('body') // 드롭다운이 셀 밖으로 나오도록
dropdownParent: $('body'), // 드롭다운이 셀 밖으로 나오도록
templateResult: function(data) {
return data.text;
},
templateSelection: function(data) {
return data.text;
}
});
$(select).on('select2:select select2:clear', function(e) {
@@ -647,6 +653,23 @@ function fn_initGrid() {
editor: function(cell, onRendered, success, cancel, editorParams) {
// 가공업체 목록 Select2 에디터
return createSelect2Editor(supplyVendorList)(cell, onRendered, success, cancel, editorParams);
},
formatter: function(cell) {
var value = cell.getValue();
// 저장된 값이 없으면 기본값 '5001'(RPS) 설정
if(value === undefined || value === null || value === '') {
value = '5001';
cell.getRow().update({PROCESSING_VENDOR: value}, false);
}
// OBJID로 업체명 조회하여 표시
for(var i = 0; i < supplyVendorList.length; i++) {
if(supplyVendorList[i].id == value) {
return supplyVendorList[i].text;
}
}
return value;
}
},
/* 주석처리: 가공납기, 연삭납기 컬럼

View File

@@ -3960,48 +3960,50 @@
<!-- M-BOM 상세 리스트 조회 (이력용) -->
<select id="getMbomDetailList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
OBJID,
MBOM_HEADER_OBJID,
PARENT_OBJID,
CHILD_OBJID,
SEQ,
LEVEL,
PART_OBJID,
PART_NO,
PART_NAME,
QTY,
UNIT,
SUPPLY_TYPE,
MAKE_OR_BUY,
RAW_MATERIAL_PART_NO,
RAW_MATERIAL_SPEC,
RAW_MATERIAL,
RAW_MATERIAL_SIZE,
PROCESSING_VENDOR,
PROCESSING_DEADLINE,
GRINDING_DEADLINE,
REQUIRED_QTY,
ORDER_QTY,
PRODUCTION_QTY,
STOCK_QTY,
SHORTAGE_QTY,
NET_QTY,
PO_QTY,
VENDOR,
UNIT_PRICE,
TOTAL_PRICE,
CURRENCY,
LEAD_TIME,
MIN_ORDER_QTY,
PROPOSAL_DATE,
STATUS,
REMARK
MD.OBJID,
MD.MBOM_HEADER_OBJID,
MD.PARENT_OBJID,
MD.CHILD_OBJID,
MD.SEQ,
MD.LEVEL,
MD.PART_OBJID,
MD.PART_NO,
MD.PART_NAME,
MD.QTY,
MD.UNIT,
MD.SUPPLY_TYPE,
MD.MAKE_OR_BUY,
MD.RAW_MATERIAL_PART_NO,
MD.RAW_MATERIAL_SPEC,
MD.RAW_MATERIAL,
MD.RAW_MATERIAL_SIZE,
MD.PROCESSING_VENDOR,
COALESCE(CM.CLIENT_NM, MD.PROCESSING_VENDOR) AS PROCESSING_VENDOR_NAME,
MD.PROCESSING_DEADLINE,
MD.GRINDING_DEADLINE,
MD.REQUIRED_QTY,
MD.ORDER_QTY,
MD.PRODUCTION_QTY,
MD.STOCK_QTY,
MD.SHORTAGE_QTY,
MD.NET_QTY,
MD.PO_QTY,
MD.VENDOR,
MD.UNIT_PRICE,
MD.TOTAL_PRICE,
MD.CURRENCY,
MD.LEAD_TIME,
MD.MIN_ORDER_QTY,
MD.PROPOSAL_DATE,
MD.STATUS,
MD.REMARK
FROM
MBOM_DETAIL
MBOM_DETAIL MD
LEFT JOIN CLIENT_MNG CM ON MD.PROCESSING_VENDOR = CM.OBJID::VARCHAR
WHERE
MBOM_HEADER_OBJID = #{mbomHeaderObjid}
AND STATUS = 'ACTIVE'
ORDER BY SEQ
MD.MBOM_HEADER_OBJID = #{mbomHeaderObjid}
AND MD.STATUS = 'ACTIVE'
ORDER BY MD.SEQ
</select>
<!-- 저장된 M-BOM 트리 조회 (MBOM_DETAIL 테이블) -->