1
0
Fork 0
HANYANG_MES/home_dir/www/ksvc_old/inout/stock/stock.js

385 lines
11 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();