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> </style>
<script> <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 헬퍼 함수 // confirm/alert 헬퍼 함수
function showConfirm(options) { function showConfirm(options) {
if(typeof options === 'string') { if(typeof options === 'string') {
@@ -50,6 +76,9 @@ $(function(){
$('.select2').select2(); $('.select2').select2();
// 가공업체 목록 로드
loadVendorList();
// 페이지 로드 시 프로젝트 정보로 검색 필드 자동 입력 // 페이지 로드 시 프로젝트 정보로 검색 필드 자동 입력
<c:if test="${not empty info}"> <c:if test="${not empty info}">
$("#search_part_no").val("${info.PART_NO}"); $("#search_part_no").val("${info.PART_NO}");
@@ -610,9 +639,18 @@ function generateUpdateHistoryTable(beforeData, afterData) {
for(var j = 0; j < fieldChanges.length; j++) { for(var j = 0; j < fieldChanges.length; j++) {
var fc = fieldChanges[j]; var fc = fieldChanges[j];
var fieldNameKr = getFieldNameKorean(fc.field); 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 += "<strong>" + fieldNameKr + ":</strong> ";
html += "<span class='before-value'>" + (fc.before || "(없음)") + "</span> → "; html += "<span class='before-value'>" + (beforeVal || "(없음)") + "</span> → ";
html += "<span class='after-value'>" + (fc.after || "(없음)") + "</span>"; html += "<span class='after-value'>" + (afterVal || "(없음)") + "</span>";
if(j < fieldChanges.length - 1) html += "<br>"; if(j < fieldChanges.length - 1) html += "<br>";
} }
@@ -706,7 +744,7 @@ function oldGenerateUpdateHistoryTable(beforeData, afterData) {
html += "<td>" + (item.rawMaterialSize || "") + "</td>"; html += "<td>" + (item.rawMaterialSize || "") + "</td>";
html += "<td>" + (item.rawMaterialPartNo || "") + "</td>"; html += "<td>" + (item.rawMaterialPartNo || "") + "</td>";
html += "<td>" + (item.requiredQty || "") + "</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.processingDeadline || "") + "</td>";
html += "<td>" + (item.grindingDeadline || "") + "</td>"; html += "<td>" + (item.grindingDeadline || "") + "</td>";
html += "<td>" + (item.orderQty || "") + "</td>"; html += "<td>" + (item.orderQty || "") + "</td>";
@@ -728,7 +766,7 @@ function oldGenerateUpdateHistoryTable(beforeData, afterData) {
html += "<td>" + (item.rawMaterialSize || "") + "</td>"; html += "<td>" + (item.rawMaterialSize || "") + "</td>";
html += "<td>" + (item.rawMaterialPartNo || "") + "</td>"; html += "<td>" + (item.rawMaterialPartNo || "") + "</td>";
html += "<td>" + (item.requiredQty || "") + "</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.processingDeadline || "") + "</td>";
html += "<td>" + (item.grindingDeadline || "") + "</td>"; html += "<td>" + (item.grindingDeadline || "") + "</td>";
html += "<td>" + (item.orderQty || "") + "</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['rawMaterialSize'] ? " class='field-changed'" : "") + ">" + (mod.after.rawMaterialSize || "") + "</td>";
html += "<td" + (changedFields['rawMaterialPartNo'] ? " class='field-changed'" : "") + ">" + (mod.after.rawMaterialPartNo || "") + "</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['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['processingDeadline'] ? " class='field-changed'" : "") + ">" + (mod.after.processingDeadline || "") + "</td>";
html += "<td" + (changedFields['grindingDeadline'] ? " class='field-changed'" : "") + ">" + (mod.after.grindingDeadline || "") + "</td>"; html += "<td" + (changedFields['grindingDeadline'] ? " class='field-changed'" : "") + ">" + (mod.after.grindingDeadline || "") + "</td>";
html += "<td" + (changedFields['orderQty'] ? " class='field-changed'" : "") + ">" + (mod.after.orderQty || "") + "</td>"; html += "<td" + (changedFields['orderQty'] ? " class='field-changed'" : "") + ">" + (mod.after.orderQty || "") + "</td>";

View File

@@ -137,11 +137,11 @@ function fn_loadSupplyVendorList() {
dataType: 'json', dataType: 'json',
success: function(data) { success: function(data) {
if(data && data.length > 0) { 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) { supplyVendorList = data.map(function(item) {
return { return {
id: item.CODE_NAME, id: item.CODE_ID,
text: item.CODE_NAME text: item.NAME
}; };
}); });
console.log("가공업체 목록 로드 완료:", supplyVendorList.length + "개"); console.log("가공업체 목록 로드 완료:", supplyVendorList.length + "개");
@@ -172,13 +172,13 @@ function createSelect2Editor(options) {
options.forEach(function(opt) { options.forEach(function(opt) {
var option = document.createElement("option"); var option = document.createElement("option");
if(typeof opt === 'object') { if(typeof opt === 'object') {
option.value = opt.id || opt.value || opt; option.value = opt.id || opt.value || '';
option.text = opt.text || opt.label || opt; option.text = opt.text || opt.label || '';
} else { } else {
option.value = opt; option.value = opt;
option.text = opt; option.text = opt;
} }
if(option.value === cellValue) { if(option.value == cellValue) {
option.selected = true; option.selected = true;
} }
select.appendChild(option); select.appendChild(option);
@@ -192,7 +192,13 @@ function createSelect2Editor(options) {
dropdownAutoWidth: true, dropdownAutoWidth: true,
placeholder: '선택', placeholder: '선택',
allowClear: true, 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) { $(select).on('select2:select select2:clear', function(e) {
@@ -647,6 +653,23 @@ function fn_initGrid() {
editor: function(cell, onRendered, success, cancel, editorParams) { editor: function(cell, onRendered, success, cancel, editorParams) {
// 가공업체 목록 Select2 에디터 // 가공업체 목록 Select2 에디터
return createSelect2Editor(supplyVendorList)(cell, onRendered, success, cancel, editorParams); 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 상세 리스트 조회 (이력용) --> <!-- M-BOM 상세 리스트 조회 (이력용) -->
<select id="getMbomDetailList" parameterType="map" resultType="com.pms.common.UpperKeyMap"> <select id="getMbomDetailList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT SELECT
OBJID, MD.OBJID,
MBOM_HEADER_OBJID, MD.MBOM_HEADER_OBJID,
PARENT_OBJID, MD.PARENT_OBJID,
CHILD_OBJID, MD.CHILD_OBJID,
SEQ, MD.SEQ,
LEVEL, MD.LEVEL,
PART_OBJID, MD.PART_OBJID,
PART_NO, MD.PART_NO,
PART_NAME, MD.PART_NAME,
QTY, MD.QTY,
UNIT, MD.UNIT,
SUPPLY_TYPE, MD.SUPPLY_TYPE,
MAKE_OR_BUY, MD.MAKE_OR_BUY,
RAW_MATERIAL_PART_NO, MD.RAW_MATERIAL_PART_NO,
RAW_MATERIAL_SPEC, MD.RAW_MATERIAL_SPEC,
RAW_MATERIAL, MD.RAW_MATERIAL,
RAW_MATERIAL_SIZE, MD.RAW_MATERIAL_SIZE,
PROCESSING_VENDOR, MD.PROCESSING_VENDOR,
PROCESSING_DEADLINE, COALESCE(CM.CLIENT_NM, MD.PROCESSING_VENDOR) AS PROCESSING_VENDOR_NAME,
GRINDING_DEADLINE, MD.PROCESSING_DEADLINE,
REQUIRED_QTY, MD.GRINDING_DEADLINE,
ORDER_QTY, MD.REQUIRED_QTY,
PRODUCTION_QTY, MD.ORDER_QTY,
STOCK_QTY, MD.PRODUCTION_QTY,
SHORTAGE_QTY, MD.STOCK_QTY,
NET_QTY, MD.SHORTAGE_QTY,
PO_QTY, MD.NET_QTY,
VENDOR, MD.PO_QTY,
UNIT_PRICE, MD.VENDOR,
TOTAL_PRICE, MD.UNIT_PRICE,
CURRENCY, MD.TOTAL_PRICE,
LEAD_TIME, MD.CURRENCY,
MIN_ORDER_QTY, MD.LEAD_TIME,
PROPOSAL_DATE, MD.MIN_ORDER_QTY,
STATUS, MD.PROPOSAL_DATE,
REMARK MD.STATUS,
MD.REMARK
FROM FROM
MBOM_DETAIL MBOM_DETAIL MD
LEFT JOIN CLIENT_MNG CM ON MD.PROCESSING_VENDOR = CM.OBJID::VARCHAR
WHERE WHERE
MBOM_HEADER_OBJID = #{mbomHeaderObjid} MD.MBOM_HEADER_OBJID = #{mbomHeaderObjid}
AND STATUS = 'ACTIVE' AND MD.STATUS = 'ACTIVE'
ORDER BY SEQ ORDER BY MD.SEQ
</select> </select>
<!-- 저장된 M-BOM 트리 조회 (MBOM_DETAIL 테이블) --> <!-- 저장된 M-BOM 트리 조회 (MBOM_DETAIL 테이블) -->