//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: '
', headerSortElement: "", //정렬 아이콘 }); _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();