1
0
Fork 0
HANYANG_MES/show_dir/www/ksvc/inout/stock/stock.js

267 lines
10 KiB
JavaScript

//Grid용 클래스. 블록 처리용
class Tb_class {
constructor(){
let _this = this;
_this.tblList = "";
_this.ajax_url = "./stock.ajax.php";
}
//리스트 로드
getMainList (sdata) {
let _this = this;
let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajax_url,
data: {
mode: 'getStockList',
BP_CD: sdata?.BP_CD||'',
IO_DT_ST: sdata?.IO_DT_ST||'',
MNG_SN_ID: sdata?.MNG_SN_ID||'',
IO_DT_ED: sdata?.IO_DT_ED||'',
WH_LOC: sdata?.WH_LOC||'',
OFLD: sdata?.OFLD||'',
OASC: sdata?.OASC||'',
LINE_NUM: sdata?.LINE_NUM||'',
NOW_PAGE: sdata?.NOW_PAGE||'',
},
success: function (data) {
if (data.code) {
_this.tblList.setData(data.data);
//page
putPagiNation({
...sdata,
TARGET: ".tabulator-footer-contents",
PREB_PAGE: data?.data[0]?.PREB_PAGE,
NEXB_PAGE: data?.data[0]?.NEXB_PAGE,
LAST_PAGE: data?.data[0]?.LAST_PAGE,
PAGE_LISTS: data?.data[0]?.PAGE_LISTS?.split('|'),
callback: (conf)=>{
_this.getMainList({
BP_CD: conf?.BP_CD||'',
MNG_SN_ID: sdata?.MNG_SN_ID||'',
IO_DT_ST: conf?.IO_DT_ST||'',
IO_DT_ED: conf?.IO_DT_ED||'',
WH_LOC: conf?.WH_LOC||'',
OFLD: conf?.OFLD||'',
OASC: conf?.OASC||'',
LINE_NUM: conf?.LINE_NUM||'',
NOW_PAGE: conf?.NOW_PAGE||'',
});
}
});
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
window.clearTimeout(talert);
_this.tblList.clearAlert();
_this.setFilter();
}
});
return true;
};
//검색 조건 Clear
clearInput (){
let _this = this;
_this.setFilter();
};
setFilter () {
return false;
let _this = this;
let stdate = document.getElementById("S_IO_DT_ST").value;
let endate = document.getElementById("S_IO_DT_ED").value;
_this.tblList.setFilter(function(data){ //필터링
return (
true
&& ( !document.getElementById("S_BP_NM") || ( (data.DLVY_BP_CD+"|"+data.DLVY_BP_NM).search(document.getElementById("S_BP_NM").value) !== -1 ) )
&& ( (!stdate || stdate <= data['IO_DT']) && (!endate || endate >= data['IO_DT']) )
// && ( !document.getElementById("S_IN_TYPE") || ( (data.IO_KIND).search(document.getElementById("S_IN_TYPE").value) !== -1 ) )
)
}, '=', true);
};
//Cell 변경 콜백
cellEdited (cell){
let _this = this;
cell.getData()._STATUS_ = cell.getData()._STATUS_||'U';
};
popBP () {
let _this = this;
popPartnerList({tgt_id:'#S_BP_CD',tgt_name:'#S_BP_NM'});
};
//sort
columnSort(e,tgt) {
let _this = this;
let sorters = tgt.getTable().getSorters()[0];
_this.getMainList({..._this.searchData,OFLD:sorters?.field,OASC:sorters?.dir});
};
//등록
putStockList (){
let _this = this;
let postdata = {
'mode': 'putStockList',
'reqdata': JSON.stringify(_this.tblList.getData().filter(row=> row._STATUS_)),
};
ajax_json({
url: _this.ajax_url,
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("적용 되었습니다.");
_this.getMainList(_this.searchData);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
shGFormatter ( cell ) {
let _this = this;
return varsSHAPE_GRP[cell.getValue()]?.Code_Exp;
};
//시작 실행
init () {
let _this = this;
const fields = [
{ formatter: "rownum", title: "No", width: "4%", },
{ field: "DLVY_BP_NM", title: "거래처", width: "13%", },
{ field: "MNG_SN_ID", title: "S/N", width: "13%", },
{ field: "IO_DT", title: "입고일", width: "10%", },
{ field: "ITEM_CD", title: "품명", width: "12%", formatter:_this.shGFormatter, },
{ field: "ITEM_STATUS", title: "상태", width: "10%", formatter: tb_common_funtions.formatterSelect, formatterParams:{ values: varsITEN_STATUS }, },
{ field: "CUR_OP_CD", title: "현공정상태", width: "12%", formatter: tb_common_funtions.formatterSelect, formatterParams: {values: varOPGRP.reduce( (r,v) => {
return Object.assign(r, v.OPTIONS.reduce( (rev,vo) => {
rev[vo.OP_CD]=vo.OP_NM; return rev;
}, {} ) );
}, {} ),}, },
{ field: "WH_CD", title: "창고", width: "13%", formatter:(tgt)=>{ let s = varLOCGRP.filter(r=>r['WH_CD']===tgt.getValue())[0]; return s?.WH_NM }, },
{ field: "LOC_CD", title: "로케이션", width: "13%",
editor: tb_common_funtions.editorGrpSelect,
editorParams:{values:varLOCGRP.map( v => {
return { name: v.WH_NM, code: v.WH_CD, options: v.OPTIONS.reduce( (retv,vo) => {
retv[vo.LOC_CD+'|'+vo.WH_CD]=vo.LOCATION_NM; return retv;
}, {} ) };
} ), cfunc:(cell,value)=>{let spval = value.split('|'); cell.getRow().update({WH_CD:spval[1]}); return value;} },
formatter: tb_common_funtions.formatterSelect,
formatterParams: {values:varLOCGRP.reduce( (r,v) => {
return Object.assign(r, v.OPTIONS.reduce( (rev,vo) => {
rev[vo.LOC_CD+'|'+vo.WH_CD]=vo.LOCATION_NM; return rev;
}, {} ) );
}, {} ),},
},
];
_this.tblList = new Tabulator("#tblStockList",{
layout: "fitColumns",
height: "100%",
data: [], //기본 데이터
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
sorter:()=>{},
headerSort: false,
vertAlign: "middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
},
footerElement:'<ul class="pagination justify-content-center align-items-center mb-1"><li><a class="pn_link npage btn btn-light"><span class="f_page">1</span></a></li></ul>',
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
});
_this.tblList.on("tableBuilt", () => { //Tabulator 초기 데이터 불러오기 이벤트
_this.getMainList();
});
_this.tblList.on("cellEdited", (cell) => { //Tabulator cell Edited
_this.cellEdited && Tb_funcs.cellEdited(cell);
});
_this.tblList.on("headerClick", (e,tgt) => { //Tabulator cell Edited
_this.columnSort && _this.columnSort(e,tgt);
});
['click','keypress'].forEach(evt => document.querySelector("#bntListSearch").addEventListener(evt,()=>{
_this.searchData = {
BP_CD: document.querySelector('#S_BP_CD').value||'',
MNG_SN_ID: document.querySelector('#S_MNG_SN_ID').value||'',
IO_DT_ST: document.querySelector('#S_IO_DT_ST').value||'',
IO_DT_ED: document.querySelector('#S_IO_DT_ED').value||'',
WH_LOC: document.querySelector('#S_WH_LOC').value||'',
LINE_NUM: document.querySelector('#S_LINE_NUM').value||'',
NOW_PAGE: 1,
}; // _this.searchData 는 전체적으로 이용되므로 간략화 금지
_this.getMainList(_this.searchData);
}));
['click','keypress'].forEach(evt => document.querySelector("#btnPutStock").addEventListener(evt,()=>{_this.putStockList()}));
['click','keypress'].forEach(evt => document.querySelector("#S_BP_NM").addEventListener(evt,()=>{_this.popBP()}));
['click','keypress'].forEach(evt => document.querySelector("#btnExcelDown").addEventListener(evt,()=>{_this.excelDataLoad(_this.tblList,'재고 리스트')}));
['change','keydown','keyup'].forEach(evt => document.querySelectorAll("#S_BP_CD, #S_BP_NM, #S_MNG_SN_ID, #S_IO_DT_ST, #S_IO_DT_ED, #S_WH_LOC").forEach(tgt=>tgt.addEventListener(evt,()=>{Tb_funcs.setFilter()})));
};
excelDataLoad(table_block, title) { //페이징 처리된 리스트에서 엑셀 전체 다운
let _this = this;
let filename = title + "_"+luxon.DateTime.now().toFormat('yyyyMMdd')+".xlsx";
let itemlist = varOPGRP.reduce( (r,v) => {
return Object.assign(r, v.OPTIONS.reduce( (rev,vo) => {
rev[vo.OP_CD]=vo.OP_NM; return rev;
}, {} ) );
}, {} );
let whlist = varLOCGRP.reduce( (ret,row) => { ret[row.WH_CD] = row.WH_NM; return ret; }, {} );
let lolist = varLOCGRP.reduce( (ret,row) => { let op = row.OPTIONS.reduce( (rt,ro) => { rt[ro.LOC_CD+'|'+ro.WH_CD] = ro.LOCATION_NM; return rt; }, {} ); ret = {...ret, ...op }; return ret; }, {} );
ajax_json({
url: _this.ajax_url,
data: {..._this.searchData, mode: 'getStockList', LINE_NUM: 999999999 },
success: function (data) {
if (data.code) {
tb_common_funtions.tabu2xls(table_block, filename, title, data.data.map( row => {
row.ITEM_CD = varsSHAPE_GRP[row.ITEM_CD]?.Code_Exp;
row.ITEM_STATUS = varsITEN_STATUS[row.ITEM_STATUS];
row.CUR_OP_CD = itemlist[row.CUR_OP_CD];
row.WH_CD = whlist[row.WH_CD];
row.LOC_CD = lolist[row.LOC_CD];
row.OUT_DIA = Math.round(row.OUT_DIA*10)/10;
row.IN_DIA = Math.round(row.IN_DIA*10)/10;
row.THICK = Math.round(row.THICK*10)/10;
row.WIDTH = Math.round(row.WIDTH*10)/10;
row.LENGTH = Math.round(row.LENGTH*10)/10;
return row;
} ));
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {}
});
};
}
const Tb_funcs = new Tb_class();
Tb_funcs.init();