mbom 가공업체 RPS 기본 선택
This commit is contained in:
@@ -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>";
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/* 주석처리: 가공납기, 연삭납기 컬럼
|
/* 주석처리: 가공납기, 연삭납기 컬럼
|
||||||
|
|||||||
@@ -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 테이블) -->
|
||||||
|
|||||||
Reference in New Issue
Block a user