winmode = typeof (winmode) === "undefined" ? '' : winmode; //팝업창용
let clipCondData = {}; //복사 데이터 전역
let updateMode = false;
//Grid용 클래스. 블록 처리용
class Tb_class_Detail {
constructor() {
let _this = this;
_this.tblList = "";
_this.ajax_url = "./condition.ajax.php";
_this.sdata = {};
_this.sodata = {};
}
//리스트 로드
getMainList(sdata) {
let _this = this;
_this.sdata = sdata;
let talert = window.setTimeout(function () {
_this.tblList.alert("Loading ...")
}, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajax_url,
data: {
mode: 'getDetailList',
BP_CD: sdata?.BP_CD || '',
SO_DT_ST: sdata?.SO_DT_ST || '',
SO_DT_ED: sdata?.SO_DT_ED || '',
MNG_NO: sdata?.MNG_NO || '',
SO_NO: sdata?.SO_NO || '',
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 || '',
SO_DT_ST: conf?.SO_DT_ST || '',
SO_DT_ED: conf?.SO_DT_ED || '',
MNG_NO: conf?.MNG_NO || '',
SO_NO: conf?.SO_NO || '',
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;
};
//Row 클릭 콜백
rowClick (e, tgt){
let _this = this;
let data_old = _this.sodata;
let rowData = tgt.getData();
if( e?.target?.classList?.contains("btnfile") ) return; //첨부파일시 Row클릭금지
// 확정이벤트
if(data_old.MNG_NO) {
if(data_old.MNG_NO != rowData.MNG_NO) {
if( updateMode ) {
kuls_confirm("저장되지 않은 내용이 존재합니다.", "
작성중인 내용이 사라집니다. 진행하시겠습니까?", ()=>{
_this.getAllData(tgt, rowData);
});
return;
}
}
}
_this.getAllData(tgt, rowData);
};
getAllData (tgt, rowData) {
let _this = this;
let gb = $("#S_GB").val();
_this.sodata = rowData;
jQuery(tgt.getElement()).siblings().removeClass("user-checked");
tgt.getElement().classList.add("user-checked");
if(rowData.MNG_NO){
//$("#btnPutPlan").attr("disabled", false); //수정시 변경으로 바꿈.
Tb_funcs_Spec.getMainList(rowData.MNG_NO);
$("#btnDelSpec").attr("disabled", false);
$("#btnPutSpec").attr("disabled", false);
if( Tb_funcs_Spec.win_pt ){
Tb_funcs_Spec.win_pt.PSpecLoad(rowData.MNG_NO);
}
Tb_funcs_Route.getMainList(rowData.MNG_NO, rowData.SHAPE_TYPE);
$("#btnDelRoute").attr("disabled", false);
$("#btnPutRoute").attr("disabled", false);
if( Tb_funcs_Route.win_pt ){
Tb_funcs_Route.win_pt.PRouteLoad(rowData.MNG_NO, rowData.SHAPE_TYPE);
}
Tb_funcs_Cond.getAllList(rowData.MNG_NO);
if( Tb_funcs_Cond.win_pt ){
Tb_funcs_Cond.win_pt.PCondLoad('','',rowData.MNG_NO);
}
Tb_funcs_Insp.getAllList(rowData.MNG_NO, gb);
if( Tb_funcs_Insp.win_pt ){
Tb_funcs_Insp.win_pt.PInspLoad('','',rowData.MNG_NO, gb);
}
//Tb_funcs_Route.mcTime();
} else {
$("#btnDelSpec").attr("disabled", true);
$("#btnPutSpec").attr("disabled", true);
$("#btnDelRoute").attr("disabled", true);
$("#btnPutRoute").attr("disabled", true);
}
uptCheck(false); //수정 체크
}
setFilter () {
return false;
let _this = this;
let stdate = document.getElementById("S_SO_DT_ST").value;
let endate = document.getElementById("S_SO_DT_ED").value;
_this.tblList.setFilter(function(data){ //필터링
return (
true
&& ( !document.getElementById("S_BP_NM") || ( (data.ORDR_BP_CD+"|"+data.ORDR_BP_NM).search(document.getElementById("S_BP_NM").value) !== -1 ) )
&& ( (!stdate || stdate <= data['SO_DT']) && (!endate || endate >= data['SO_DT']) )
)
}, '=', true);
};
setPrecision (val) {
let unit = val.getRow().getData().SO_UNIT;
let num = 0;
switch (unit) {
case "TN":
num = 3;
break;
case "EA":
num = 0;
break;
}
return {'precision':num};
};
//Cell 변경 콜백
cellEdited (cell){
let _this = this;
cell.getData()._STATUS_ = cell.getData()._STATUS_||'U';
};
//sort
columnSort(e,tgt) {
let _this = this;
let sorters = tgt.getTable().getSorters()[0];
_this.getMainList({..._this.searchData,OFLD:sorters?.field,OASC:sorters?.dir});
};
popBP () {
let _this = this;
popPartnerList({tgt_id:'#S_BP_CD',tgt_name:'#S_BP_NM'});
};
popDrawList ( cell ){
let _this = this;
//팝업 템플릿 로드 후 모달 출력
Tb_funcs_draw.init(cell.getComponent().getRow());
};
shGFormatter ( cell ) {
let _this = this;
return varsSHAPE_GRP[cell.getValue()]?.Code_Exp;
};
shFormatter ( cell ) {
let _this = this;
return varsSHAPE_TYPE[cell.getValue()];
};
stFmtParams( cell ){
let _this = this;
return tb_common_funtions.precs(cell.getData()['ITEM_CD'] === "F", 3,1);
}
stOutFmtParams( cell ){
let ITEM_CD = '';
let mngno = Tb_funcs_Detail.sodata.ITEM_CD;
if( mngno ){
ITEM_CD = mngno;
}
return tb_common_funtions.precs(ITEM_CD === "F", 3,1);
}
winOpen (){
let _this = this;
if( winmode ) return;
_this.win_pt = window.open('./condition_win.php?winmode=detail','detail', 'width=1024,height=800');
}
// 스펙정보 등록
putDetail (){
let _this = this;
let pdata = _this.tblList.getData();
let dupdata = pdata.map( data => data.MNG_NO );
if( dupdata.filter( (data,idx) => dupdata.indexOf(data) !== idx ).length > 0 ){
kuls_alert("계획번호가 중복됩니다.");
return false;
}
let postdata = {
'mode': 'putDetailList',
'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();
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
// 라우팅 등록
putPlan ( draft ){
let _this = this;
let specDIAMETER = Tb_funcs_Spec.tblList.getData().reduce( (a, v) => {
if(!v.DIAMETER) { a.push(v.DIAMETER); } return a;
}, []);
if(specDIAMETER.length > 0) {
kuls_alert("치수를 입력하세요.");
return;
}
let postdata = {
'mode' : 'putPlanList',
'draft' : draft||'',
'sodata' : JSON.stringify(_this.sodata),
'specdata' : JSON.stringify(Tb_funcs_Spec.tblList.getData()),
'routedata': JSON.stringify(Tb_funcs_Route.tblList.getData()),
'conddata' : JSON.stringify(Tb_funcs_Cond.tblList.getData()),
'inspdata' : JSON.stringify(Tb_funcs_Insp.tblList.getData()),
};
ajax_json({
url: _this.ajax_url,
data: postdata,
success: function (data) {
if (data.code) {
//let rowPos = _this.tblList.getRowPosition(_this.tblList.searchRows('MNG_NO','=',_this.sodata.MNG_NO)[0]);
if( draft ){
kuls_success("임시저장 되었습니다.");
}else{
kuls_success("지시 되었습니다.");
}
//_this.getMainList(_this.mn);
uptCheck(false);
//let lrow = _this.tblList.getRowFromPosition(rowPos);
//lrow._row.dispatch('row-click',{},lrow._row); //다시 로드하기 이전 선택항목 재선택. //앞쪽 _row는 의미없고 뒷쪽이 선택 row
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
copyPlan () { //수주내용 복사
let _this = this;
_this.clipCondData = {
SHAPE_TYPE : _this.sodata.SHAPE_TYPE,
MNG_NO : _this.sodata.MNG_NO,
specData : Tb_funcs_Spec.tblList.getData(),
routeData : Tb_funcs_Route.tblList.getData(),
condData : Tb_funcs_Cond.tblList.getData(),
inspData : Tb_funcs_Insp.tblList.getData(),
};
kuls_alert("
복사되었습니다.
※ 주의1 : 동일한 형상에서만 붙여넣기가 가능합니다.
※ 주의2 : 붙여넣기 후 저장시 기존 데이터는 초기화 됩니다.
" );
//kuls_success("복사 되었습니다.
※주의 : 동일한 형상에서만 붙여넣기가 가능합니다.");
};
pastePlan () {
let _this = this;
if( _this.clipCondData.SHAPE_TYPE !== _this.sodata.SHAPE_TYPE ){
kuls_alert("다른 형상은 붙여넣기 할 수 없습니다");
return;
}
let specPdata = _this.clipCondData.specData .map( row => { return {...row, MNG_NO:_this.sodata.MNG_NO, _STATUS_:'I'} } );
let routePdata = _this.clipCondData.routeData.map( row => { return {...row, MNG_NO:_this.sodata.MNG_NO, _STATUS_:'I'} } );
let condPdata = _this.clipCondData.condData .map( row => { return {...row, MNG_NO:_this.sodata.MNG_NO, _STATUS_:'I'} } );
let inspPdata = _this.clipCondData.inspData .map( row => { return {...row, MNG_NO:_this.sodata.MNG_NO, _STATUS_:'I'} } );
Tb_funcs_Spec.tblList .setData(specPdata);
Tb_funcs_Route.tblList.setData(routePdata);
Tb_funcs_Cond.tblList .setData(condPdata);
Tb_funcs_Insp.tblList .setData(inspPdata);
_this.sodata.pasteMode = 'Y'; //붙여넣기 Flag (regacy)
uptCheck(true);
};
//시작 실행
init () {
let _this = this;
let currow = Object.keys(varsCurrency).reduce( (param,key) => {param[key] = `${key} (${varsCurrency[key]})`; return param;}, {});
const fields = [
//{ formatter: "rownum", title: "No", width: "4%", },
{ field: "LIST_NUM", title: "No", width: "4%", },
{ field: "MNG_NO", title: "수주번호", width: "10%", },
// { field: "SO_NO", title: "관리번호", width: "10%", },
{ field: "ITEM_CD", title: "수주품명", width: "8%", formatter:_this.shGFormatter, },
{ field: "", title: "규격", width: "25%",
columns:[
{ field:"OUT_DIA", title:"OD", width:"5%", formatter: tb_common_funtions.formatterNumber, formatterParams: _this.stFmtParams, },
{ field:"IN_DIA", title:"ID", width:"5%", formatter: tb_common_funtions.formatterNumber, formatterParams: _this.stFmtParams, },
{ field:"THICK", title:"TH", width:"5%", formatter: tb_common_funtions.formatterNumber, formatterParams: _this.stFmtParams, },
{ field:"WIDTH", title:"W", width:"5%", formatter: tb_common_funtions.formatterNumber, formatterParams: _this.stFmtParams, },
{ field:"LENGTH", title:"L", width:"5%", formatter: tb_common_funtions.formatterNumber, formatterParams: _this.stFmtParams, },
],
},
{ field: "MATR_TYPE", title: "재질", width: "10%", },
{ field: "", title: "도면", width: "12%",
columns:[
{ field:"ASS_DRAW", title:"도면번호", width:"10%", },
{ field:"ASS_FILE", title:"", width:"2%",
formatter: tb_common_funtions.formatterButton,
formatterParams:{
btnTitle:'',
btnClass:'btn btn-sm btn-nobd fa-regular fa-image btnfile',
cfunc: (cell)=> { _this.popDrawList(cell) },
event: ['click', 'keyup'],
},
},
],
},
{ field: "REQ_DLVY_DT", title: "납기요청일", width: "7%", },
{ field: "ITEM_NRULE", title: "일품번호
기준", width: "6%", visible:false, formatter: (tgt)=>tgt.getValue()=="Y"?"번호":"수량" },
{ field: "SO_QTY", title: "수량", width: "5%", formatter: tb_common_funtions.formatterNumber, formatterParams: function(cell) { return _this.setPrecision(cell); }, },
{ field: "SO_UNIT", title: "단위", width: "5%", formatter: tb_common_funtions.formatterSelect, formatterParams: { values: varsUNIT }, },
{ field: "CURRENCY_CD", title: "화폐", width: "6%", formatter: tb_common_funtions.formatterSelect, formatterParams: { values: currow }, },
{ field: "PWR_WGT", title: "분철단가", width: "10%", formatter:"money", },
{ field: "UNIT_WGT", title: "단중단가", width: "10%", formatter:"money", },
{ field: "", title: "가공단가", width: "10%", formatter:"money", },
{ field: "SO_NET_AMT_LOC", title: "수주금액", width: "10%", formatter: tb_common_funtions.formatterNumber, /*formatter:"money",*/ },
{ field: "SIZE_CD", title: "사이즈", width: "10%", },
{ field: "SHAPE_TYPE", title: "형태(형상)", width: "10%",formatter:_this.shFormatter, },
{ field: "TOP_TAP", title: "탑탭", width: "10%", editor:"input", },
{ field: "SID_TAP", title: "사이드탭", width: "10%", editor:"input", },
{ field: "GROV_TYPE", title: "그루브", width: "10%", editor:"input", },
{ field: "TILT_FLG", title: "틸트", width: "5%", formatter: tb_common_funtions.formatterCheckboxViewIcon2, },
{ field: "HOLE_SIZE", title: "홀크기", width: "10%", formatter: tb_common_funtions.formatterNumber, editor:"input", },
{ field: "PL_HD_TYPE", title: "접시머리", width: "10%", editor:"input", },
{ field: "REMK", title: "비고", width: "10%", },
];
_this.tblList = new Tabulator("#tblDetailList",{
//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("rowClick", (e,tgt) => { //Tabulator Row Click
_this.rowClick && _this.rowClick(e,tgt);
});
_this.tblList.on("cellEdited", (cell) => { //Tabulator cell Edited
_this.cellEdited && Tb_funcs_Detail.cellEdited(cell);
});
_this.tblList.on("headerClick", (e,tgt) => { //Tabulator cell Edited
_this.columnSort && _this.columnSort(e,tgt);
});
['click','keypress'].forEach(evt => document.querySelector("#bntListSearch") && document.querySelector("#bntListSearch").addEventListener(evt,()=>{
_this.searchData = {
BP_CD: document.querySelector('#S_BP_CD').value||'',
SO_DT_ST: document.querySelector('#S_SO_DT_ST').value||'',
SO_DT_ED: document.querySelector('#S_SO_DT_ED').value||'',
MNG_NO: document.querySelector('#S_MNG_NO').value||'',
SO_NO: '',//document.querySelector('#S_SO_NO').value||'',
LINE_NUM: document.querySelector('#S_LINE_NUM').value||'',
NOW_PAGE: 1,
}; // _this.searchData 는 전체적으로 이용되므로 간략화 금지
_this.getMainList(_this.searchData)
}));
['click','keypress'].forEach(evt => document.querySelector("#btnPutDetail").addEventListener(evt,()=>{_this.putDetail()}));
['click','keypress'].forEach(evt => document.querySelector("#S_BP_NM") && document.querySelector("#S_BP_NM").addEventListener(evt,()=>{_this.popBP()}));
['change','keydown','keyup'].forEach(evt => document.querySelectorAll("#S_BP_NM, #S_SO_DT_ST, #S_SO_DT_ED").forEach(tgt=>tgt.addEventListener(evt,()=>{_this.setFilter()})));
['click','keypress'].forEach(evt => document.querySelector("#btnDraftPlan") && document.querySelector("#btnDraftPlan").addEventListener(evt,()=>{_this.putPlan(1)}));
['click','keypress'].forEach(evt => document.querySelector("#btnPutPlan") && document.querySelector("#btnPutPlan").addEventListener(evt,()=>{_this.putPlan()}));
['click','keypress'].forEach(evt => document.querySelector("#btnCopyPlan") && document.querySelector("#btnCopyPlan").addEventListener(evt,()=>{_this.copyPlan()}));
['click','keypress'].forEach(evt => document.querySelector("#btnPastePlan") && document.querySelector("#btnPastePlan").addEventListener(evt,()=>{
//kuls_confirm("붙여넣기","
붙여넣기 후 저장시 기존 데이터는 초기화 됩니다.
진행 하시겠습니까?", ()=>{_this.pastePlan();} );
_this.pastePlan();
kuls_success("붙여넣기 되었습니다.");
}));
};
}
//Grid용 클래스. 블록 처리용
class Tb_class_Spec {
constructor(){
let _this = this;
_this.tblList = "";
_this.ajax_url = "./condition.ajax.php";
_this.mn = "";
}
//리스트 로드
getMainList (mn) {
let _this = this;
_this.mn = mn;
let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajax_url,
data: { mode: 'getSpecList', MNG_NO: _this.mn },
success: function (data) {
if (data.code) {
for(let i = 0; i{
// Tb_funcs_Insp.getStdTotal( row.getData() );
// row.update(row.getData());
// });
// }
}
switch (cell.getField()) {
case "DIAMETER":
Tb_funcs_Route?.mcTime('m');
break;
}
uptCheck(true); //수정 체크
};
delSpec (){
let _this = this;
let postdata = {
'mode': 'delSpecList',
'MNG_NO': _this.mn,
};
ajax_json({
url: _this.ajax_url,
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("초기화 되었습니다.");
_this.getMainList(_this.mn);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
// 등록
putSpec (){
let _this = this;
let postdata = {
'mode': 'putSpecList',
'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.mn);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
winOpen (){
let _this = this;
if( winmode ) return;
_this.win_pt = window.open('./condition_win.php?winmode=spec','spec', 'width=1024,height=800');
}
init () {
let _this = this;
const fields = [
{ formatter: "rownum", title: "No", width: "5%", },
{ field: "SPEC_ITEM", title: "항목", width: "16%", formatter: tb_common_funtions.formatterSelect, formatterParams: {values: varsITEM_SPEC,}, },
// { field: "QTY", title: "수량", width: "11%", editor:'input', formatter: tb_common_funtions.formatterNumber, },
{ field: "DIAMETER", title: "치수", width: "17%", editor:'number', formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "STD_TOL_UPPER", title: "공차
상한", width: "12%", editor:'number', formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "STD_TOL_LOWER", title: "공차
하한", width: "12%", editor:'number', formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "TOL_UPPER", title: "상한값", width: "17%", formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "TOL_LOWER", title: "하한값", width: "17%", formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
];
_this.tblList = new Tabulator("#tblSpecList",{
//layout: "fitColumns",
height: "100%",
maxHeight: "100%",
data: [], //기본 데이터
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign: "middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
_this.tblList.on("rowClick", (e,tgt) => { //Tabulator cell Click
_this.rowClick && _this.rowClick(e,tgt);
});
_this.tblList.on("cellClick", (e,tgt) => { //Tabulator cell Click
_this.cellClick && _this.cellClick(e,tgt);
});
_this.tblList.on("cellEdited", (cell) => { //Tabulator cell Edited
_this.cellEdited && _this.cellEdited(cell);
});
['click','keypress'].forEach(evt => document.querySelector("#btnDelSpec") && document.querySelector("#btnDelSpec").addEventListener(evt,()=>{
kuls_confirm("규격정보 초기화", "규격정보를 초기화 하시겠습니까?", ()=>{ _this.delSpec(); }) }
));
['click','keypress'].forEach(evt => document.querySelector("#btnPutSpec") && document.querySelector("#btnPutSpec").addEventListener(evt,()=>{_this.putSpec()}));
};
}
//Grid용 클래스. 블록 처리용
class Tb_class_Route {
constructor(){
let _this = this;
_this.tblList = "";
_this.ajax_url = "./condition.ajax.php";
_this.upload_ajax_url = "../registration/attfile.ajax.php";
_this.download_url = "/include/getFile.php";
_this.mn = "";
_this.st = "";
}
//리스트 로드
getMainList (mn, st) {
let _this = this;
_this.mn = mn;
_this.st = st;
let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajax_url,
data: { mode: 'getRouteList', MNG_NO: _this.mn },
success: function (data) {
if (data.code) {
_this.tblList.setData(data.data);
//_this.mcTime();
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
window.clearTimeout(talert);
_this.tblList.clearAlert();
//멀티파일 업로더
if (!_this.uploader) {
_this.uploader = FilePond.create(document.getElementById("rdrawfilepond"), {
...filepond_ko_KR,
name: 'upfile',
allowMultiple: false,
maxParallelUploads: 1,
allowProcess: false,
instantUpload: true,
server: {
url: _this.upload_ajax_url + "?mode=putTempFile",
process: {
onload: function (data) {
data = JSON.parse(data);
let fdata = data.data;
let file_name = fdata['file_name'];
let tmp_name = fdata['tmp_name'];
let file_size = fdata['file_size'];
let file_type = fdata['file_type'];
let oldstt = _this.uploader.cell.getData()['_STATUS_'];
_this.uploader.cell.getRow().update({
file_name,
tmp_name,
file_size,
file_type,
gubun:'temp',
RDRAW: new Date(), //포매터 작동용
_STATUS_: (oldstt!=="I"?oldstt:"U"),
_FSTATUS_: 'I'
});
},
},
},
allowFileSizeValidation: true,
maxFileSize: 100000000,
credits: {},
});
document.addEventListener('FilePond:addfilestart', (e) => {
_this.tblList.alert("미리보기 작성중...");
});
document.addEventListener('FilePond:processfiles', (e) => {
_this.tblList.clearAlert();
});
}
}
});
return true;
};
mcTime (val_change) { //라우팅에 의한 가공시간 계산. val_change -> 규격이 바뀌면 보이는 가공조건 뿐만아니라 숨어있는 가공조건까지 다 바꿔야 한다.
let _this = this;
_this.sdm = {}; //SPEC DIAMETER
_this.ptime = {}; //공정별 시간
_this.cdata = { //가공조건별 데이터
ctime: {}, //가공조건별 시간
cfeed: {}, //가공조건별 feed
crpms: {}, //가공조건별 RPM 회전수
cillu: {}, //가공조건별 조도
clens: {}, //가공조건별 가공길이
cdepth: {}, //가공조건별 가공깊이
ccount: {}, //가공조건별 횟수
};
Tb_funcs_Spec.tblList.getData().forEach(v => {
_this.sdm['S.'+v['SPEC_ITEM']] = v['DIAMETER']||0;
});
_this.calc_rst = JSON.parse(JSON.stringify(Tb_funcs_Cond.tblList.getData()));
console.log(JSON.parse(JSON.stringify(Tb_funcs_Cond.tblList.getData())));
_this.mcLoop(_this.calc_rst, 'CALC_FEED', _this.sdm, val_change);
console.log(JSON.parse(JSON.stringify(Tb_funcs_Cond.tblList.getData())));
_this.mcLoop(_this.calc_rst, 'PROC_CNT', _this.sdm, val_change);
console.log(JSON.parse(JSON.stringify(Tb_funcs_Cond.tblList.getData())));
_this.mcLoop(_this.calc_rst, 'CALC_TIME', _this.sdm, val_change);
console.log(JSON.parse(JSON.stringify(Tb_funcs_Cond.tblList.getData())));
let crst = _this.calc_rst;
Object.keys(crst)
.forEach( k => {
let tm_tmp = Number(crst[k].CALC_TIME) * (Number(crst[k].OP_COUNT)||0) + Number(crst[k].EXTRA_TM);
if( typeof _this.cdata.ctime[crst[k].OP_CD] === "undefined" ) _this.cdata.ctime[crst[k].OP_CD] = {};
if( typeof _this.cdata.cfeed[crst[k].OP_CD] === "undefined" ) _this.cdata.cfeed[crst[k].OP_CD] = {};
if( typeof _this.cdata.crpms[crst[k].OP_CD] === "undefined" ) _this.cdata.crpms[crst[k].OP_CD] = {};
if( typeof _this.cdata.cillu[crst[k].OP_CD] === "undefined" ) _this.cdata.cillu[crst[k].OP_CD] = {};
if( typeof _this.cdata.clens[crst[k].OP_CD] === "undefined" ) _this.cdata.clens[crst[k].OP_CD] = {};
if( typeof _this.cdata.cdepth[crst[k].OP_CD] === "undefined" ) _this.cdata.cdepth[crst[k].OP_CD] = {};
if( typeof _this.cdata.ccount[crst[k].OP_CD] === "undefined" ) _this.cdata.ccount[crst[k].OP_CD] = {};
_this.cdata.ctime[crst[k].OP_CD][crst[k].PART_CD] = tm_tmp;
_this.cdata.cfeed[crst[k].OP_CD][crst[k].PART_CD] = crst[k].FEED;
_this.cdata.crpms[crst[k].OP_CD][crst[k].PART_CD] = crst[k].RPMS;
_this.cdata.cillu[crst[k].OP_CD][crst[k].PART_CD] = crst[k].ILLU;
_this.cdata.cdepth[crst[k].OP_CD][crst[k].PART_CD] = crst[k].DEPTH;
_this.cdata.ccount[crst[k].OP_CD][crst[k].PART_CD] = crst[k].OP_COUNT;
_this.cdata.clens[crst[k].OP_CD][crst[k].PART_CD] = crst[k].CALC_FEED;
if( !['PIL','POL','PBL'].includes(crst[k].PART_CD) ){
_this.ptime[crst[k].OP_CD] = (_this.ptime[crst[k].OP_CD]||0) + tm_tmp;
}
} );
_this.setRouteTime(); //공정별 가공시간 적용
_this.setCondValue(); //가공조건별 계산된 정보 적용
};
mcLoop (calc_rst, fld, sdmrow, val_change) {
let _this = this;
let loop_en = calc_rst.length;
let max_loop = 10;
while( loop_en > 0 && max_loop > 0 ){
loop_en = calc_rst.length;
calc_rst.forEach(sikr => {
let calf = (sikr[fld]||"").toString(); //fv[0] 는 {S.} {P.} {V.} 이거... sikr 의 소속을 확인해서 fv[1] 앞에 소속 pre 를 붙이고 해당 sdmrow 값을 치환하면... 그전에 sdmrow 가 pre 를 붙이고 있어야 한다.
[...calf.matchAll(/{(.*?)}/g)].forEach( fv => {
let nvars = '';
if( Array.isArray(fv[1].match(/^S\./)) ){
nvars = fv[1];
}else{
nvars = sikr.OP_GRP+'_'+fv[1];
}
if( typeof(sdmrow[nvars]) !== "undefined" ){
sikr[fld] = sikr[fld].replaceAll(fv[0],sdmrow[nvars]||0);
}else{
switch( fv[1] ){
case "MO":
sikr[fld] = sikr[fld].replaceAll(fv[0],sikr['EXTRA_OD']||0);
break;
case "MI":
sikr[fld] = sikr[fld].replaceAll(fv[0],sikr['EXTRA_ID']||0);
break;
case "MT":
sikr[fld] = sikr[fld].replaceAll(fv[0],sikr['EXTRA_TH']||0);
break;
}
}
let feed = sikr.OP_FEED||'';
let rpms = sikr.OP_RPMS||0;
sikr.ILLU = sikr.OP_ILLU||'';
sikr.DEPTH = sikr.OP_DEPTH||0;
switch( sikr['OP_GRP'] ){ //FEED 및 RPM 구하기
case "FIN": //정삭 기준
if( sdmrow['S.OD'] ){
if( val_change ){
feed = _this.getFeed('TURN', sikr['SHAPE_TYPE'], sdmrow['S.OD'], 'FF');
rpms = _this.getFeed('TURN', sikr['SHAPE_TYPE'], sdmrow['S.OD'], 'FT');
sikr.ILLU = 12.5;
}
sikr[fld] = sikr[fld].replaceAll("{FEED}",feed||1);
sikr.FEED = feed||'';
sikr.RPMS = rpms||'';
}
break;
case "AAS": //투공 기준
if( sdmrow['S.IT'] ){
if( val_change ){
feed = _this.getFeed('HOLE', sikr['SHAPE_TYPE'], sdmrow['S.IT'], '');
}
sikr[fld] = sikr[fld].replaceAll("{FEED}",feed||1);
sikr.FEED = feed||'';
sikr.RPMS = rpms||'';
}
break;
case "SAM": //시편 기준
if( val_change ){
feed = 0.3; //시편 샘플링 표준치
}
sikr[fld] = sikr[fld].replaceAll("{FEED}",feed||1);
sikr.FEED = feed||'';
sikr.RPMS = rpms||'';
break;
default : //기타 황삭 단황삭등 기준
if( sdmrow['S.OD'] ){
if( val_change ){
feed = _this.getFeed('TURN', sikr['SHAPE_TYPE'], sdmrow['S.OD'], 'RF');
if( sikr['OP_GRP'] === "PRG" ){ //Depth
switch( sikr['PART_CD'] ){
case "PIH":
case "POH":
case "PBH":
feed = '';
sikr.DEPTH = 15;
break;
}
}else if( sikr['OP_GRP'] === "RGH" ){
sikr.DEPTH = 10;
}
rpms = _this.getFeed('TURN', sikr['SHAPE_TYPE'], sdmrow['S.OD'], 'RT');
}
sikr[fld] = sikr[fld].replaceAll("{FEED}",feed||1);
sikr.VC = sikr[fld];
sikr.FEED = feed||'';
sikr.RPMS = rpms||'';
sikr.ILLU = 12.5;
}
}
sikr[fld] = sikr[fld].replaceAll("{DEPTH}",sikr.DEPTH||0);
});
if( [...calf.matchAll(/{(.*?)}/g)].length === 0 ){
if( fld === "CALC_TIME" ){
if( !sikr['evtdone'] ){
sikr[fld] = eval(sikr[fld])||0// * Number(sikr['OP_COUNT']||1) + Number(sikr['EXTRA_TM']||0);
sikr['evtdone'] = true;
sdmrow['T.'+sikr.PART_CD] = sikr[fld];
sdmrow[sikr.OP_GRP+'_T.'+sikr.PART_CD] = sikr[fld];
/* 산식 미입력시 */
if( sikr['OP_GRP'] !== "SAM" ){
let cond = "";
let mode = "";
if( sikr['OP_GRP'] === "AAS" ){
cond = "HOLE";
mode = "";
}else{
cond = "TURN";
if( sikr['OP_GRP'] === "FIN" ){
mode = "F"; //정삭
}else{
mode = "R"; //정삭 외 -> 황삭
}
}
let sdmrow = {};
Tb_funcs_Spec.tblList.getData().forEach(v => {
sdmrow['S.'+v['SPEC_ITEM']] = v['DIAMETER']||0;
});
if( !sikr['RPMS'] ){
sikr['RPMS'] = parseInt(Tb_funcs_Route.getFeed(cond, sikr['SHAPE_TYPE'], sdmrow['S.OD'], mode?mode+'T':''));
}
if( !sikr['FEED'] ){
sikr['FEED'] = Tb_funcs_Route.getFeed(cond, sikr['SHAPE_TYPE'], sdmrow['S.OD'], mode?mode+'F':'');
}
}
}
}else if( fld === "PROC_CNT" ){
if( !sikr['evcdone'] ){
sikr[fld] = eval(sikr[fld])||0// * Number(sikr['OP_COUNT']||1) + Number(sikr['EXTRA_TM']||0);
sikr['OP_COUNT'] = sikr[fld];
sikr['evcdone'] = true;
sdmrow['C.'+sikr.PART_CD] = sikr[fld];
sdmrow[sikr.OP_GRP+'_C.'+sikr.PART_CD] = sikr[fld];
}
}else{
if( !sikr['evddone'] ){
//console.log(sikr.OP_GRP+'_P.'+sikr.PART_CD + ' => ' + sikr[fld]);
sikr[fld] = eval(sikr[fld])||0;
sikr['evddone'] = true;
sdmrow['P.'+sikr.PART_CD] = sikr[fld];
sdmrow[sikr.OP_GRP+'_P.'+sikr.PART_CD] = sikr[fld];
}
}
loop_en--;
}
});
max_loop--;
}
}
getFeed (cond, shape, val, mode){
let _this = this;
let fdata = varsProcCond[cond][shape].filter( bf => Number(val) >= Number(bf.START_SIZE) && Number(val) <= Number(bf.END_SIZE) );
if( fdata.length ){
fdata = fdata[0];
switch( cond ){
case "HOLE":
if( mode ){
return [fdata.HOLE_TURN_ST,HOLE_TURN_ED];
}else{
return fdata.HOLE_FEED;
}
case "RATE":
//추후에
return false;
case "SHARE":
//추후에
return false;
case "TURN":
switch( mode ){
case "FF":
return fdata.FINISH_FEED;
case "RF":
return fdata.ROUGH_FEED;
case "FT":
return fdata.FINISH_TURN;
case "RT":
return fdata.ROUGH_TURN;
}
if( mode == "FF" ){
}else{
}
case "WTAMT":
//후추에
return false;
}
}else{
return false;
}
}
setRouteTime(){
let _this = this;
let Rdata = Tb_funcs_Route.tblList.getData();
Rdata.forEach( row => {
//row['STD_TACT_TM'] = _this.ptime[row['OP_CD']]?(Math.round(_this.ptime[row['OP_CD']]*1000)/1000):'';
row['STD_TACT_TM'] = _this.ptime[row['OP_CD']]?Math.round(_this.ptime[row['OP_CD']]):'';
} );
Tb_funcs_Route.tblList.replaceData(Rdata);
}
setCondValue(){
let _this = this;
let Cdata = Tb_funcs_Cond.tblList.getData();
Cdata.forEach( row => {
row['SPEC_SIZE'] = _this.cdata.clens[row.OP_CD][row.PART_CD];
row['OP_SIZE'] = Number(_this.cdata.clens[row.OP_CD][row.PART_CD]) + Number(row.EXTRA_OD) + Number(row.EXTRA_ID) + Number(row.EXTRA_TH);
row['OP_FEED'] = _this.cdata.cfeed[row.OP_CD][row.PART_CD];
row['OP_RPMS'] = _this.cdata.crpms[row.OP_CD][row.PART_CD]?parseInt(_this.cdata.crpms[row.OP_CD][row.PART_CD]):'';
row['OP_ILLU'] = _this.cdata.cillu[row.OP_CD][row.PART_CD];
row['OP_DEPTH'] = _this.cdata.cdepth[row.OP_CD][row.PART_CD];
row['OP_COUNT'] = _this.cdata.ccount[row.OP_CD][row.PART_CD];
row['TACT_TM'] = Math.round(_this.cdata.ctime[row.OP_CD][row.PART_CD]);
} );
Tb_funcs_Cond.tblList.replaceData(Cdata);
}
//등록
uploadFile (cell){
let _this = this;
_this.uploader.cell = cell;
_this.uploader.browse();
};
formatterRemk (cell, formatterParams) {
let _this = formatterParams._this;
let rowData = cell.getData();
let icon = document.createElement("a");
icon.className = "btn btn-sm btn-nobd bi bi-justify-left btnfile btnPopover";
['click','keyup'].forEach(evt => icon.addEventListener(evt, function(){
Tb_funcs_remk.init(cell);
}));
return icon;
}
formatterPopover (cell, formatterParams) {
let _this = formatterParams._this;
let icon = document.createElement("a");
let rowData = cell.getData();
if( rowData['file_name'] ){
icon.className = "btn btn-sm btn-nobd fa-solid fa-ellipsis btnfile btnPopover";
let popover = new bootstrap.Popover(icon, {
content: "",
html: true,
trigger: "manual",
});
['mouseenter','focus'].forEach(evt => popover._element.addEventListener(evt,()=>{
if( !popover._isShown() ){
document.querySelectorAll(".btnPopover").forEach(tgt => {
let inst = bootstrap.Popover.getInstance(tgt);
inst && inst.hide();
});
popover.show(); //tip 보이기 (tip은 매번 새로 만들어진다)
['mouseleave','blur'].forEach(e => popover.tip.addEventListener(e,()=>popover.hide())); //tip 숨기기 (삭제한다)
['click','keyup'].forEach(e => {
popover.tip.querySelector(".btn-rview").addEventListener(e,()=>{ //조회
let file_url = _this.download_url+"?gubun="+rowData['gubun']+"&nid="+rowData['MNG_NO']+"&sid="+rowData['OP_CD']+"&file_id="+rowData['file_id']+"&tmp_name="+rowData['tmp_name']+"&name="+rowData['file_name']+"&size="+rowData['file_size'];
pop_filedown(file_url, rowData['file_name'].split(".").pop());
})
popover.tip.querySelector(".btn-rmod").addEventListener(e,()=>{ //수정
_this.uploadFile(cell);
})
popover.tip.querySelector(".btn-rdel").addEventListener(e,()=>{ //삭제
let oldstt = cell.getData()['_STATUS_'];
cell.getRow().update({_STATUS_: (oldstt!=="I"?oldstt:"U"), _FSTATUS_:'D', file_name:'', RDRAW: new Date()});
popover.hide();
})
});
}
}));
}else{
icon.className = "btn btn-sm btn-nobd fa-regular fa-image btnfile btnfiles";
['click','keyup'].forEach(evt => icon.addEventListener(evt, function(){
_this.uploadFile(cell);
}));
}
return icon;
}
//Row 클릭 콜백
rowClick (e, tgt){
let _this = this;
let gb = $("#S_GB").val();
if( e.target.classList.contains("btnfile") ) return; //첨부파일시 Row클릭금지
jQuery(tgt.getElement()).siblings().removeClass("user-checked");
tgt.getElement().classList.add("user-checked");
Tb_funcs_Cond.getMainList(_this.st, tgt.getData().OP_SEQ, _this.mn);
if( Tb_funcs_Cond.win_pt ){
Tb_funcs_Cond.win_pt.PCondLoad(_this.st, tgt.getData().OP_SEQ, _this.mn);
}
$("#btnDelCond").attr("disabled", false);
$("#btnPutCond").attr("disabled", false);
Tb_funcs_Insp.getMainList(_this.st, tgt.getData().OP_SEQ, _this.mn, gb);
if( Tb_funcs_Insp.win_pt ){
Tb_funcs_Insp.win_pt.PInspLoad(_this.st, tgt.getData().OP_SEQ, _this.mn, gb);
}
$("#btnDelInsp").attr("disabled", false);
$("#btnPutInsp").attr("disabled", false);
};
//Cell 클릭 콜백
cellClick (e, tgt){
let _this = this;
_this.tgt = tgt;
let rowData = tgt.getData();
switch( tgt.getField() ){
case "RDRAW":
//_this.uploadFile(tgt);
break;
case "file_url":
location.href = _this.download_url+"?gubun="+rowData['gubun']+"&nid="+rowData['nid']+"&sid="+rowData['sid']+"&file_id="+rowData['file_id']+"&tmp_name="+rowData['tmp_name']+"&name="+rowData['file_name']+"&size="+rowData['file_size'];
break;
}
};
//Cell 변경 콜백
cellEdited (cell){
let _this = this;
let data = cell.getData();
let row = cell.getRow();
row.update({'_STATUS_':'U'});
uptCheck(true); //수정 체크
};
delRoute (){
let _this = this;
let postdata = {
'mode': 'delRouteList',
'MNG_NO': _this.mn,
};
ajax_json({
url: _this.ajax_url,
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("초기화 되었습니다.");
_this.getMainList(_this.mn);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
// 라우팅 등록
putRoute (){
let _this = this;
let postdata = {
'mode': 'putRouteList',
'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.mn);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
winOpen (){
let _this = this;
if( winmode ) return;
_this.win_pt = window.open('./condition_win.php?winmode=route','route', 'width=1024,height=800');
}
init () {
let _this = this;
const fields = [
//{ field: "OP_SEQ", title: "공순", width: "10%", },
{ field: "ORD_SEQ", formatter: "rownum", title: "공순", width: "10%", },
{ field: "OP_CD", title: "공정명", width: "26%", 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: "STD_SETUP_TM", title: "SET UP
(분)", width: "16%", editor:'number', },
{ field: "STD_TACT_TM", title: "가공시간
(분)", width: "20%", /*editor:'input',*/ },
{ field: "REMK", title: "지시
사항", width: "14%", formatter: _this.formatterRemk, formatterParams: { _this }, },
{ field: "RDRAW", title: "도면", width: "14%", formatter: _this.formatterPopover, formatterParams: { _this } },
];
_this.tblList = new Tabulator("#tblRouteList",{
//layout: "fitColumns",
height: "100%",
maxHeight: "100%",
data: [], //기본 데이터
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign: "middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
_this.tblList.on("rowClick", (e,tgt) => { //Tabulator cell Click
_this.rowClick && _this.rowClick(e,tgt);
});
_this.tblList.on("cellClick", (e,tgt) => { //Tabulator cell Click
_this.cellClick && _this.cellClick(e,tgt);
});
_this.tblList.on("cellEdited", (cell) => { //Tabulator cell Edited
_this.cellEdited && _this.cellEdited(cell);
});
['click','keypress'].forEach(evt => document.querySelector("#btnDelRoute") && document.querySelector("#btnDelRoute").addEventListener(evt,()=>{
kuls_confirm("공정정보 초기화", "공정정보를 초기화 하시겠습니까?", ()=>{ _this.delRoute(); }) }
));
['click','keypress'].forEach(evt => document.querySelector("#btnPutRoute") && document.querySelector("#btnPutRoute").addEventListener(evt,()=>{_this.putRoute()}));
};
}
//Grid용 클래스. 블록 처리용
class Tb_class_Cond {
constructor(){
let _this = this;
_this.tblList = "";
_this.ajax_url = "./condition.ajax.php";
_this.st = "";
_this.seq = 0;
_this.mn = "";
}
getAllList (mn) {
let _this = this;
_this.mn = mn;
let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajax_url,
data: { mode: 'getCondList', MNG_NO:mn },
success: function (data) {
if (data.code) {
_this.tblList.setData(data.data);
// _this.tblList.setData(data.data.map( crow => {
// if( crow.OP_GRP === "SAM" ){
// return crow;
// }
// let cond = "";
// let mode = "";
// if( crow.OP_GRP === "AAS" ){
// cond = "HOLE";
// mode = "";
// }else{
// cond = "TURN";
// if( crow.OP_GRP === "FIN" ){
// mode = "F"; //정삭
// }else{
// mode = "R"; //정삭 외 -> 황삭
// }
// }
// let sdmrow = {};
// Tb_funcs_Spec.tblList.getData().forEach(v => {
// sdmrow['S.'+v['SPEC_ITEM']] = v['DIAMETER']||0;
// });
// if( !crow.OP_RPMS ){
// crow.OP_RPMS = parseInt(Tb_funcs_Route.getFeed(cond, crow['SHAPE_TYPE'], sdmrow['S.OD'], mode?mode+'T':''));
// }
// if( !crow.OP_FEED ){
// crow.OP_FEED = Tb_funcs_Route.getFeed(cond, crow['SHAPE_TYPE'], sdmrow['S.OD'], mode?mode+'F':'');
// }
// return crow;
// } ));
_this.getMainList('','');
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
window.clearTimeout(talert);
_this.tblList.clearAlert();
}
});
return true;
}
//리스트 로드
getMainList (st, seq, mn) {
let _this = this;
_this.st = st;
_this.seq = seq;
_this.mn = mn;
_this.tblList.setFilter(function(data){ //필터링
return data.SHAPE_TYPE === st && data.OP_SEQ === seq
}, '=', true);
// let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
// ajax_json({
// url: _this.ajax_url,
// data: { mode: 'getCondList', SHAPE_TYPE:_this.st, OP_SEQ:_this.seq, MNG_NO:mn },
// success: function (data) {
// if (data.code) {
// _this.tblList.setData(data.data);
// }else{
// kuls_alert(data.mesg);
// }
// },
// error: function (request, status, error) {
// kuls_alert(error.message);
// },
// complete: function () {
// window.clearTimeout(talert);
// _this.tblList.clearAlert();
// }
// });
return true;
};
//Row 클릭 콜백
rowClick (e, tgt){
let _this = this;
jQuery(tgt.getElement()).siblings().removeClass("user-checked");
tgt.getElement().classList.add("user-checked");
};
//Cell 클릭 콜백
cellClick (e, tgt){
let _this = this;
_this.tgt = tgt;
//switch( tgt.getField() ){
// case "DLVY_BP_NM":
// popPartnerList({tgt_id:'DLVY_BP_CD', tgt_name:'DLVY_BP_NM', tgt_currency:'CURRENCY_CD'}, tgt.getRow()._row);
// break;
//}
};
//Cell 변경 콜백
cellEdited (cell){
let _this = this;
let data = cell.getData();
let row = cell.getRow();
row.update({'_STATUS_':'U'});
Tb_funcs_Route.mcTime();
uptCheck(true); //수정 체크
};
delCond (){
let _this = this;
let postdata = {
'mode': 'delCondList',
'MNG_NO': _this.mn,
'OP_SEQ': _this.seq,
};
ajax_json({
url: _this.ajax_url,
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("초기화 되었습니다.");
_this.getMainList(_this.st, _this.seq, _this.mn);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
// 라우팅 등록
putCond (){
let _this = this;
let postdata = {
'mode': 'putCondList',
'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.st, _this.seq, _this.mn);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
winOpen (){
let _this = this;
if( winmode ) return;
_this.win_pt = window.open('./condition_win.php?winmode=cond','cond', 'width=1024,height=800');
};
init () {
let _this = this;
const fields = [
{ formatter: "rownum", title: "No", width: "5%", },
{ field: "PART_CD", title: "가공부위", width: "16%", formatter: tb_common_funtions.formatterSelect, formatterParams: { values: varsOP_PART }, },
{ field: "SPEC_SIZE", title: "도면
치수", width: "7%", formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "", title: "가공여유",
columns:[
{ field: "EXTRA_OD", title: "외경", width: "5%", editor:"number", cssClass:"font09 p-0", formatter: tb_common_funtions.formatterNumber, formatterParams: function() { return {'precision':0}; }, },
{ field: "EXTRA_ID", title: "내경", width: "5%", editor:"number", cssClass:"font09 p-0", formatter: tb_common_funtions.formatterNumber, formatterParams: function() { return {'precision':0}; }, },
{ field: "EXTRA_TH", title: "두께", width: "5%", editor:"number", cssClass:"font09 p-0", formatter: tb_common_funtions.formatterNumber, formatterParams: function() { return {'precision':0}; }, },
],
},
{ field: "OP_SIZE", title: "가공
치수", width: "7%", formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "", title: "가공조건",
columns:[
{ field: "OP_ILLU", title: "조도", width: "7%",
editor:'number', editable:(cell)=>{ let val = cell.getData(); return val.OP_GRP === 'FIN' },
formatter: tb_common_funtions.formatterNumber, formatterParams: function() { return {'precision':1}; },
},
{ field: "OP_RPMS", title: "회전수", width: "7%", /*editor:"number"*/},
{ field: "OP_FEED", title: "FEED", width: "6%",
editor:'number', editable:(cell)=>{ let val = cell.getData(); return !(val.OP_GRP === 'PRG' && ['PIH','POH','PBH'].includes(val.PART_CD)) },
formatter: tb_common_funtions.formatterNumber, formatterParams: function() { return {'precision':1}; },
},
{ field: "OP_DEPTH", title: "깊이", width: "6%",
editor:'number', editable:(cell)=>{ let val = cell.getData(); return val.OP_GRP === 'PRG' && ['PIH','POH','PBH'].includes(val.PART_CD) },
formatter: tb_common_funtions.formatterNumber, formatterParams: function() { return {'precision':0}; },
},
{ field: "OP_COUNT", title: "횟수", width: "6%",
editor:'number', editable:(cell)=>{ let val = cell.getData(); return !(val.OP_GRP === 'PRG' && ['PIH','POH','PBH'].includes(val.PART_CD)) },
formatter: tb_common_funtions.formatterNumber, formatterParams: function(cell) { let val = cell.getData(); return {'precision': (val.OP_GRP === 'PRG' && ['PIH','POH','PBH'].includes(val.PART_CD))?1:0 }; },
},
]
},
{ field: "EXTRA_TM", title: "추가시간
(분)", width: "9%", editor:'number', },
{ field: "TACT_TM", title: "가공시간
(분)", width: "9%", /*editor:'input',*/ },
];
_this.tblList = new Tabulator("#tblCondList",{
//layout: "fitColumns",
height: "100%",
maxHeight: "100%",
data: [], //기본 데이터
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign: "middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
_this.tblList.on("rowClick", (e,tgt) => { //Tabulator cell Click
_this.rowClick && _this.rowClick(e,tgt);
});
_this.tblList.on("cellClick", (e,tgt) => { //Tabulator cell Click
_this.cellClick && _this.cellClick(e,tgt);
});
_this.tblList.on("cellEdited", (cell) => { //Tabulator cell Edited
_this.cellEdited && _this.cellEdited(cell);
});
['click','keypress'].forEach(evt => document.querySelector("#btnDelCond") && document.querySelector("#btnDelCond").addEventListener(evt,()=>{
kuls_confirm("가공조건 초기화", "가공조건을 초기화 하시겠습니까?", ()=>{ _this.delCond(); }) }
));
['click','keypress'].forEach(evt => document.querySelector("#btnPutCond") && document.querySelector("#btnPutCond").addEventListener(evt,()=>{_this.putCond()}));
};
}
//Grid용 클래스. 블록 처리용
class Tb_class_Insp {
constructor(){
let _this = this;
_this.tblList = "";
_this.ajax_url = "./condition.ajax.php";
_this.st = "";
_this.seq = 0;
_this.mn = "";
}
getStdTotal(dt){
let _this = this;
let diameter = Tb_funcs_Spec.tblList.searchData("SPEC_ITEM", "=", dt.INSP_ITEM_CD)[0].DIAMETER;
if(diameter) {
dt.SPEC_UPPER = Number(diameter) + Number(dt.STD_TOL_UPPER);
dt.SPEC_LOWER = Number(diameter) + Number(dt.STD_TOL_LOWER);
}
};
getAllList (mn, gb) {
let _this = this;
_this.mn = mn;
let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajax_url,
data: { mode: 'getInspList', MNG_NO:mn },
success: function (data) {
if (data.code) {
_this.tblList.setData(data.data);
_this.getMainList('','',mn,gb);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
window.clearTimeout(talert);
_this.tblList.clearAlert();
}
});
return true;
}
// 리스트 로드
getMainList (st, seq, mn, gb) {
let _this = this;
_this.st = st;
_this.seq = seq;
_this.mn = mn;
gb = $("#S_GB").val();
_this.tblList.setFilter(function(data){ //필터링
return data.SHAPE_TYPE === st && data.OP_SEQ === seq && data.GB === gb
}, '=', true);
// let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
// ajax_json({
// url: _this.ajax_url,
// data: { mode: 'getInspList', SHAPE_TYPE:_this.st, OP_SEQ:_this.seq, MNG_NO:mn },
// success: function (data) {
// if (data.code) {
// for(let i=0; i row._STATUS_)),
};
ajax_json({
url: _this.ajax_url,
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("저장되었습니다.");
_this.getMainList(_this.st, _this.seq, _this.mn);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
winOpen (){
let _this = this;
if( winmode ) return;
_this.win_pt = window.open('./condition_win.php?winmode=insp','insp', 'width=1024,height=800');
};
init () {
let _this = this;
const fields = [
{ formatter: "rownum", title: "No", width: "8%", },
{ field: "INSP_ITEM_CD", title: "검사항목", width: "17%", formatter: tb_common_funtions.formatterSelect, formatterParams: { values: varsITEM_SPEC }, },
{ field: "INSP_METH", title: "검사방법", width: "16%", formatter: tb_common_funtions.formatterSelect, formatterParams: { values: varsINSP_ITEM }, },
{ field: "CP", title: "공차
복사
", width: "5%", formatter: tb_common_funtions.formatterButton, formatterParams: {btnClass:'btn btn-sm btn_info fa-regular fa-copy pl-2 pr-2',btnTitle:'',event:['click','keypress'],cfunc:(cell)=>{
let data = cell.row.data;
let tspec = Tb_funcs_Spec.tblList.getData().filter( row => row.SPEC_ITEM === data.INSP_ITEM_CD );
if( tspec && tspec.length ){
cell.row.updateData({
STD_TOL_UPPER: tspec[0].STD_TOL_UPPER,
STD_TOL_LOWER: tspec[0].STD_TOL_LOWER,
});
}else{
kuls_warning("해당하는 규격이 존재하지 않습니다.");
}
}}},
{ field: "STD_TOL_UPPER", title: "공차상한", width: "14%", editor:'number', formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "STD_TOL_LOWER", title: "공차하한", width: "14%", editor:'number', formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "SPEC_UPPER", title: "상한값", width: "13%", formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
{ field: "SPEC_LOWER", title: "하한값", width: "13%", formatter: tb_common_funtions.formatterNumber, formatterParams: Tb_funcs_Detail.stOutFmtParams, },
];
_this.tblList = new Tabulator("#tblInspList",{
//layout: "fitColumns",
height: "100%",
maxHeight: "100%",
data: [], //기본 데이터
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign: "middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
_this.tblList.on("rowClick", (e,tgt) => { //Tabulator cell Click
_this.rowClick && _this.rowClick(e,tgt);
});
_this.tblList.on("cellClick", (e,tgt) => { //Tabulator cell Click
_this.cellClick && _this.cellClick(e,tgt);
});
_this.tblList.on("cellEdited", (cell) => { //Tabulator cell Edited
_this.cellEdited && _this.cellEdited(cell);
});
['click','keypress'].forEach(evt => document.querySelector("#btnDelInsp") && document.querySelector("#btnDelInsp").addEventListener(evt,()=>{
kuls_confirm("검사규격 초기화", "검사규격을 초기화 하시겠습니까?", ()=>{ _this.delInsp(); }) }
));
['change','keydown','keyup'].forEach(evt => document.querySelectorAll("#S_GB").forEach(tgt=>tgt.addEventListener(evt,()=>{Tb_funcs_Insp.getMainList(_this.st,_this.seq,_this.mn,'')})));
//['click','keypress'].forEach(evt => document.querySelector("#btnPutInsp") && document.querySelector("#btnPutInsp").addEventListener(evt,()=>{_this.putInsp()}));
};
}
const uptCheck = function(status){
$("#btnCopyPlan").attr("disabled", status);
$("#btnPutPlan").attr("disabled", !status);
$("#btnDraftPlan").attr("disabled", !status);
if(
Tb_funcs_Detail.clipCondData &&
Tb_funcs_Detail.clipCondData.MNG_NO !== Tb_funcs_Detail.sodata.MNG_NO &&
Tb_funcs_Detail.clipCondData.SHAPE_TYPE === Tb_funcs_Detail.sodata.SHAPE_TYPE
){
$("#btnPastePlan").attr("disabled", false);
}else{
$("#btnPastePlan").attr("disabled", true);
}
updateMode = status;
}
let varParent = "";
//let varChild = {};
const Load_Instance = function(){ //창에서 사용할 부모 변수
return {
Tb_funcs_Detail,
Tb_funcs_Spec,
Tb_funcs_Route,
Tb_funcs_Cond,
Tb_funcs_Insp
}
}
if( winmode ){ //부모변수 받기
varParent = window.opener.Load_Instance();
}else{
// varChild = window.child.Load_Instance();
}
let Tb_funcs_Detail = varParent ? varParent.Tb_funcs_Detail : new Tb_class_Detail() ;
let Tb_funcs_Spec = varParent ? varParent.Tb_funcs_Spec : new Tb_class_Spec() ;
let Tb_funcs_Route = varParent ? varParent.Tb_funcs_Route : new Tb_class_Route() ;
let Tb_funcs_Cond = varParent ? varParent.Tb_funcs_Cond : new Tb_class_Cond() ;
let Tb_funcs_Insp = varParent ? varParent.Tb_funcs_Insp : new Tb_class_Insp() ;
let Tb_funcs_remk = new conditionRemkManager();
let Tb_funcs_draw = new drawManager();
switch( winmode ){
case "detail":
Tb_funcs_Detail = new Tb_class_Detail();
document.getElementById('blockDetailList').classList.remove('d-none');
Tb_funcs_Detail.init();
Tb_funcs_Detail.tblList.on("tableBuilt",function() { //창에서 수정금지
Tb_funcs_Detail.tblList.getColumns().forEach( v => v.updateDefinition({editable:false}) );
Tb_funcs_Detail.getMainList(varParent.Tb_funcs_Detail.sdata);
});
break;
case "spec":
Tb_funcs_Spec = new Tb_class_Spec();
document.getElementById('blockSpecList').classList.remove('d-none');
Tb_funcs_Spec.init();
Tb_funcs_Spec.tblList.on("tableBuilt",function() { //창에서 수정금지
Tb_funcs_Spec.tblList.getColumns().forEach(v => v.updateDefinition({editable: false}));
Tb_funcs_Spec.getMainList(varParent.Tb_funcs_Spec.mn);
});
break;
case "route":
Tb_funcs_Route = new Tb_class_Route();
document.getElementById('blockRouteList').classList.remove('d-none');
Tb_funcs_Route.init();
Tb_funcs_Route.tblList.on("tableBuilt",function() { //창에서 수정금지
Tb_funcs_Route.tblList.getColumns().forEach(v => v.updateDefinition({editable: false}));
Tb_funcs_Route.getMainList(varParent.Tb_funcs_Route.mn,varParent.Tb_funcs_Route.st);
});
break;
case "cond":
Tb_funcs_Cond = new Tb_class_Cond();
document.getElementById('blockCondList').classList.remove('d-none');
Tb_funcs_Cond.init();
Tb_funcs_Cond.tblList.on("tableBuilt",function(){ //창에서 수정금지
Tb_funcs_Cond.tblList.getColumns().forEach( v => v.updateDefinition({editable:false}) );
Tb_funcs_Cond.getMainList(varParent.Tb_funcs_Cond.st,varParent.Tb_funcs_Cond.seq,varParent.Tb_funcs_Cond.mn);
});
break;
case "insp":
Tb_funcs_Insp = new Tb_class_Insp();
document.getElementById('blockInspList').classList.remove('d-none');
Tb_funcs_Insp.init();
Tb_funcs_Insp.tblList.on("tableBuilt",function(){ //창에서 수정금지
Tb_funcs_Insp.tblList.getColumns().forEach( v => v.updateDefinition({editable:false}) );
Tb_funcs_Insp.getMainList(varParent.Tb_funcs_Insp.st,varParent.Tb_funcs_Insp.seq,varParent.Tb_funcs_Insp.mn);
});
break;
default:
Tb_funcs_Detail.init();
Tb_funcs_Spec.init();
Tb_funcs_Route.init();
Tb_funcs_Cond.init();
Tb_funcs_Insp.init();
}
//아래는 팝업창 기능용
const PDetailLoad = function (mn){
Tb_funcs_Detail.getMainList(mn);
};
const PSpecLoad = function (mn){
Tb_funcs_Spec.getMainList(mn);
};
const PRouteLoad = function(mn,st){
Tb_funcs_Route.getMainList(mn,st);
};
const PCondLoad = function(st,os,mn){
if( st ){
Tb_funcs_Cond.getMainList(st,os,mn);
}else{
Tb_funcs_Cond.getAllList(mn);
}
};
const PInspLoad = function(st,os,mn,gb){
if( st ){
Tb_funcs_Insp.getMainList(st,os,mn,gb);
}else{
Tb_funcs_Insp.getAllList(mn,gb);
}
};
window.addEventListener("beforeunload", function(event) { //새로고침이나 페이지 이동시 창강제 닫기
Tb_funcs_Detail?.win_pt?.close();
Tb_funcs_Spec?.win_pt?.close();
Tb_funcs_Route?.win_pt?.close();
Tb_funcs_Cond?.win_pt?.close();
Tb_funcs_Insp?.win_pt?.close();
});