V20260210 #143
@@ -103,6 +103,7 @@ $(document).ready(function(){
|
||||
// 컬럼 정의 (입고품목 상세 기준) - 신규
|
||||
// =====================================================
|
||||
var columns = [
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection", hozAlign:"center", headerSort:false, width:40, frozen:true},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'검사일', field:'INSPECTION_DATE', frozen: true, sorter: "string"},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:70, widthGrow:1, title:'검사자', field:'INSPECTOR_NAME', frozen: true},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:105, widthGrow:1, title:'품의서 No', field:'PROPOSAL_NO', frozen: true},
|
||||
|
||||
@@ -44,6 +44,8 @@ String connector = person.getUserId();
|
||||
.inspection-ok { color: #28a745; font-weight: bold; }
|
||||
/* 공통에서 추가되는 초기화, Excel Download 버튼 숨기기 */
|
||||
.resetBtn, .excelBtn { display: none !important; }
|
||||
/* select2 드롭다운이 Tabulator 그리드 위에 표시되도록 */
|
||||
.select2-container--open .select2-dropdown { z-index: 99999 !important; }
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -165,6 +167,62 @@ function fn_getPartListByProject(projectNo) {
|
||||
return partList;
|
||||
}
|
||||
|
||||
// select2 기반 Tabulator 커스텀 에디터 (프로젝트/품번용)
|
||||
function fn_select2Editor(cell, onRendered, success, cancel, editorParams) {
|
||||
var cellValue = cell.getValue() || "";
|
||||
var values = (typeof editorParams.values === "function") ? editorParams.values(cell) : editorParams.values;
|
||||
var valueId = editorParams.valueId || "CODE";
|
||||
var labelId = editorParams.labelId || "NAME";
|
||||
var placeholder = editorParams.placeholder || "검색...";
|
||||
|
||||
var container = document.createElement("div");
|
||||
container.style.width = "100%";
|
||||
container.style.position = "relative";
|
||||
|
||||
var select = document.createElement("select");
|
||||
select.style.width = "100%";
|
||||
|
||||
// 옵션 생성
|
||||
if(values && values.length > 0) {
|
||||
values.forEach(function(item) {
|
||||
var option = document.createElement("option");
|
||||
option.value = item[valueId];
|
||||
option.text = item[labelId];
|
||||
if(item[valueId] == cellValue) option.selected = true;
|
||||
select.appendChild(option);
|
||||
});
|
||||
}
|
||||
|
||||
container.appendChild(select);
|
||||
|
||||
onRendered(function() {
|
||||
$(select).select2({
|
||||
dropdownParent: $("body"),
|
||||
placeholder: placeholder,
|
||||
allowClear: true,
|
||||
width: "100%"
|
||||
});
|
||||
$(select).select2("open");
|
||||
|
||||
$(select).on("select2:select select2:clear", function(e) {
|
||||
var selectedVal = $(select).val() || "";
|
||||
|
||||
// 콜백 호출 (프로젝트 변경 시 연동 처리 등)
|
||||
if(typeof editorParams.onSelect === "function") {
|
||||
editorParams.onSelect(cell, selectedVal);
|
||||
}
|
||||
|
||||
success(selectedVal);
|
||||
});
|
||||
|
||||
$(select).on("select2:close", function() {
|
||||
setTimeout(function() { success($(select).val() || ""); }, 100);
|
||||
});
|
||||
});
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
// 그리드 초기화 및 조회
|
||||
function fn_search(){
|
||||
// 파일 팝업이 열려있는 동안에는 새로고침 방지
|
||||
@@ -190,59 +248,24 @@ function fn_search(){
|
||||
editorParams: {valueId:"CODE", labelId:"NAME", values:_PROCESS_LIST}
|
||||
},
|
||||
{title:'프로젝트번호', field:'PROJECT_OBJID', headerHozAlign:'center', hozAlign:'center', width:130,
|
||||
editor: function(cell, onRendered, success, cancel, editorParams) {
|
||||
var cellValue = cell.getValue();
|
||||
var select = document.createElement("select");
|
||||
select.style.width = "100%";
|
||||
select.style.boxSizing = "border-box";
|
||||
|
||||
// 옵션 생성
|
||||
_PROJECT_LIST.forEach(function(item) {
|
||||
var option = document.createElement("option");
|
||||
option.value = item.CODE;
|
||||
option.text = item.NAME;
|
||||
if(item.CODE == cellValue) option.selected = true;
|
||||
select.appendChild(option);
|
||||
});
|
||||
|
||||
// 선택 변경 시 즉시 적용 및 제품구분 업데이트
|
||||
select.addEventListener("change", function() {
|
||||
var selectedValue = select.value;
|
||||
editor: fn_select2Editor,
|
||||
editorParams: {
|
||||
valueId: "CODE", labelId: "NAME", values: _PROJECT_LIST,
|
||||
placeholder: "프로젝트 검색...",
|
||||
onSelect: function(cell, selectedValue) {
|
||||
var productName = "";
|
||||
|
||||
// 제품구분 찾기
|
||||
for(var i = 0; i < _PROJECT_LIST.length; i++) {
|
||||
if(_PROJECT_LIST[i].CODE == selectedValue) {
|
||||
productName = _PROJECT_LIST[i].PRODUCT_NAME || "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 파트 목록 미리 로드
|
||||
if(selectedValue) {
|
||||
fn_getPartListByProject(selectedValue);
|
||||
}
|
||||
|
||||
// 제품구분 및 파트 초기화
|
||||
if(selectedValue) fn_getPartListByProject(selectedValue);
|
||||
cell.getRow().update({
|
||||
"PART_OBJID": "",
|
||||
"PART_NO": "",
|
||||
"PART_NAME": "",
|
||||
"PART_OBJID": "", "PART_NO": "", "PART_NAME": "",
|
||||
"PRODUCT_NAME": productName
|
||||
});
|
||||
|
||||
success(selectedValue);
|
||||
});
|
||||
|
||||
select.addEventListener("blur", function() {
|
||||
success(select.value);
|
||||
});
|
||||
|
||||
onRendered(function() {
|
||||
select.focus();
|
||||
});
|
||||
|
||||
return select;
|
||||
}
|
||||
},
|
||||
formatter: function(cell) {
|
||||
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values:_PROJECT_LIST});
|
||||
@@ -252,16 +275,19 @@ function fn_search(){
|
||||
editor: false
|
||||
},
|
||||
{title:'품번', field:'PART_OBJID', headerHozAlign:'center', hozAlign:'left', width:250,
|
||||
editor: fnc_customSelectEditor,
|
||||
editor: fn_select2Editor,
|
||||
editorParams: function(cell) {
|
||||
var projectObjid = cell.getData().PROJECT_OBJID;
|
||||
var partList = fn_getPartListByProject(projectObjid);
|
||||
return {
|
||||
valueId: "CODE", labelId: "NAME", values: partList,
|
||||
placeholder: "품번 검색..."
|
||||
};
|
||||
},
|
||||
formatter: function(cell) {
|
||||
var projectObjid = cell.getData().PROJECT_OBJID;
|
||||
var partList = fn_getPartListByProject(projectObjid);
|
||||
return fnc_customSelectFormatter(cell, {valueId:"CODE", labelId:"NAME", values: partList});
|
||||
},
|
||||
editorParams: function(cell) {
|
||||
var projectObjid = cell.getData().PROJECT_OBJID;
|
||||
var partList = fn_getPartListByProject(projectObjid);
|
||||
return {valueId:"CODE", labelId:"NAME", values: partList};
|
||||
}
|
||||
},
|
||||
{title:'품명', field:'PART_NAME', headerHozAlign:'center', hozAlign:'left', width:180,
|
||||
|
||||
@@ -223,6 +223,7 @@ async function fn_createExcelFile(data){
|
||||
|
||||
// 컬럼: 검사일, 검사자, 제품구분, 품명(모델명), 작업지시번호, 부품품번, 부품명, 입고수량 합계, 양품수량 합계, 불량수량 합계, 불량율, 재생수량 합계, 최종양품수량 합계
|
||||
var columns = [
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection", hozAlign:"center", headerSort:false, width:40, frozen:true},
|
||||
{headerHozAlign:'center', hozAlign:'center', minWidth:150, widthGrow:1, title:'검사일', field:'INSPECTION_DATE',
|
||||
formatter:fnc_createGridAnchorTag,
|
||||
cellClick: function(e, cell){
|
||||
@@ -347,25 +348,47 @@ function fn_openInspectionPopUp(rowData){
|
||||
hiddenForm.submit();
|
||||
}
|
||||
|
||||
// 반제품검사 등록 팝업 (신규 등록)
|
||||
// 반제품검사 등록 팝업 (선택된 행이 있으면 기존 데이터, 없으면 신규 등록)
|
||||
function fn_registPopUp(){
|
||||
var selected = _tabulGrid ? _tabulGrid.getSelectedData() : [];
|
||||
|
||||
var popup_width = 1800;
|
||||
var popup_height = 1050;
|
||||
var hiddenForm = document.hiddenForm;
|
||||
var target = "semiProductInspectionPopUp";
|
||||
var url = "/quality/semiProductInspectionFormPopUp.do";
|
||||
|
||||
fn_centerPopup(popup_width, popup_height, "", target);
|
||||
if(selected.length > 1){
|
||||
Swal.fire("한건씩 등록 가능합니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
fn_centerPopup(popup_width, popup_height, "", target);
|
||||
hiddenForm.action = url;
|
||||
hiddenForm.OBJID.value = ''; // 신규 등록이므로 빈값
|
||||
hiddenForm.INSPECTION_GROUP_ID.value = ''; // 신규 등록이므로 빈값
|
||||
hiddenForm.actionType.value = 'new';
|
||||
hiddenForm.MODEL_NAME.value = '';
|
||||
hiddenForm.WORK_ORDER_NO.value = '';
|
||||
hiddenForm.PART_NO.value = '';
|
||||
hiddenForm.PART_NAME.value = '';
|
||||
hiddenForm.INSPECTION_DATE.value = '';
|
||||
|
||||
if(selected.length == 1){
|
||||
// 선택된 행이 있으면 기존 데이터로 열기
|
||||
var rowData = selected[0];
|
||||
hiddenForm.OBJID.value = rowData.OBJID || '';
|
||||
hiddenForm.INSPECTION_GROUP_ID.value = rowData.INSPECTION_GROUP_ID || '';
|
||||
hiddenForm.MODEL_NAME.value = rowData.MODEL_NAME || '';
|
||||
hiddenForm.WORK_ORDER_NO.value = rowData.WORK_ORDER_NO || '';
|
||||
hiddenForm.PART_NO.value = rowData.PART_NO || '';
|
||||
hiddenForm.PART_NAME.value = rowData.PART_NAME || '';
|
||||
hiddenForm.INSPECTION_DATE.value = rowData.INSPECTION_DATE || '';
|
||||
hiddenForm.actionType.value = 'view';
|
||||
} else {
|
||||
// 선택된 행이 없으면 신규 등록
|
||||
hiddenForm.OBJID.value = '';
|
||||
hiddenForm.INSPECTION_GROUP_ID.value = '';
|
||||
hiddenForm.actionType.value = 'new';
|
||||
hiddenForm.MODEL_NAME.value = '';
|
||||
hiddenForm.WORK_ORDER_NO.value = '';
|
||||
hiddenForm.PART_NO.value = '';
|
||||
hiddenForm.PART_NAME.value = '';
|
||||
hiddenForm.INSPECTION_DATE.value = '';
|
||||
}
|
||||
|
||||
hiddenForm.target = target;
|
||||
hiddenForm.submit();
|
||||
}
|
||||
|
||||
@@ -714,7 +714,7 @@ body {
|
||||
<input type="button" value="거래명세서 생성" class="plm_btns" id="btnTransactionStatement" style="background-color: #2196F3; color: white;">
|
||||
--%>
|
||||
<input type="button" value="출하지시/판매등록" class="plm_btns" id="btnBulkRegister" style="background-color: #4CAF50; color: white;">
|
||||
<input type="button" value="분할출하" class="plm_btns" id="btnSplitShipment" style="background-color: #FF9800; color: white;">
|
||||
<!-- <input type="button" value="분할출하" class="plm_btns" id="btnSplitShipment" style="background-color: #FF9800; color: white;"> -->
|
||||
</div>
|
||||
</div>
|
||||
<div id="plmSearchZon">
|
||||
|
||||
@@ -1193,7 +1193,7 @@
|
||||
#{PART_OBJID},
|
||||
REPLACE(#{BOM_QTY}::VARCHAR, ',', ''),
|
||||
REPLACE(#{QTY}::VARCHAR, ',', ''),
|
||||
REPLACE(#{ORDER_QTY}::VARCHAR, ',', ''),
|
||||
COALESCE(NULLIF(REPLACE(#{ORDER_QTY}::VARCHAR, ',', ''), '')::NUMERIC::INTEGER, 0),
|
||||
#{PARTNER_PRICE},
|
||||
#{REMARK},
|
||||
#{WRITER},
|
||||
@@ -1231,7 +1231,7 @@
|
||||
) ON CONFLICT (OBJID) DO
|
||||
UPDATE
|
||||
SET
|
||||
ORDER_QTY = REPLACE(#{ORDER_QTY} ::VARCHAR, ',', '')
|
||||
ORDER_QTY = COALESCE(NULLIF(REPLACE(#{ORDER_QTY}::VARCHAR, ',', ''), '')::NUMERIC::INTEGER, 0)
|
||||
,PARTNER_PRICE = REPLACE(#{PARTNER_PRICE} ::VARCHAR, ',', '')
|
||||
,REMARK = #{REMARK}
|
||||
<!--
|
||||
@@ -1836,8 +1836,7 @@
|
||||
<select id="getPurchaseOrderDeliveryTargetPartList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
P.*,
|
||||
(REAL_ORDER_QTY::NUMERIC -TOTAL_DELIVERY_QTY::NUMERIC) AS NON_ARRIVAL_QTY
|
||||
<!-- (ORDER_QTY::NUMERIC -(TOTAL_DELIVERY_QTY::NUMERIC - TOTAL_DEFECT_QTY::NUMERIC)) AS NON_ARRIVAL_QTY -->
|
||||
(ORDER_QTY::NUMERIC - TOTAL_DELIVERY_QTY::NUMERIC) AS NON_ARRIVAL_QTY
|
||||
FROM(
|
||||
SELECT
|
||||
ROW_NUMBER() OVER(ORDER BY PM.PART_NO, POP.REGDATE DESC) AS RNUM,
|
||||
@@ -1855,7 +1854,7 @@
|
||||
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
|
||||
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
|
||||
END AS PARTNER_NAME,
|
||||
POP.ORDER_QTY,
|
||||
COALESCE(NULLIF(POP.ORDER_QTY::VARCHAR, '')::NUMERIC::INTEGER, 0) AS ORDER_QTY,
|
||||
POP.REAL_ORDER_QTY,
|
||||
POP.OBJID AS ORDER_PART_OBJID,
|
||||
POP.PURCHASE_ORDER_MASTER_OBJID,
|
||||
|
||||
Reference in New Issue
Block a user