/*
* 로그아웃
* */
const logout = function(){
ajax_json({
url: "/inc/common.ajax.php",
type: "POST",
data: {mode: 'memberLogout'},
success: function (data) {
if ( data.code ) {
kuls_alert("로그아웃 되었습니다.",function(){
location.href="/ksvc/";
});
}
},
error: function (request, status, error) {
kuls_alert(error.message);
}
});
};
const side_menu_load = function( menu_code ){
ajax_json({
url: "/inc/common.ajax.php",
type: "POST",
data: {
mode:'getSiteMenuList',
menu_code:menu_code
},
success: function(data){
if( data.code ){
jQuery('#side-nav .side_menu').fancytree({
activeVisible: true,
clickFolderMode: 3,
source : data.data,
// activate: function(e, data){
// if( !data.node.folder ){
// location.href = data.node.data.href || '###';
// }
// },
click: function(event, data) {
if( !data.node.folder ){
location.href = data.node.data.href || '###';
}
},
});
}
},
error: function(request, status, error) {
},
complete: function(request, status){
jQuery("#side-nav").on("click","a",function(e){
e.preventDefault();
});
jQuery("#side-nav").on("click",".node-side-nav",function(e){
if( jQuery(this).find(".expand-icon").length == 0 ){
let href = jQuery(this).find("> a").attr("href");
href && (location.href = href);
}
});
}
});
};
const cont_hfix = function(){
jQuery(".cont_hfix").css('height',0);
let win_h = jQuery(window).outerHeight();
jQuery(".cont_hfix").toArray().forEach( tgt => {
let cont_y = jQuery(tgt).offset().top;
let cont_height = win_h - cont_y - 20;
jQuery(tgt).css('height',cont_height);
});
};
const cont_hfix_page = function(){
jQuery(".cont_hfix_page").css('height',0);
let win_h = jQuery(window).outerHeight();
jQuery(".cont_hfix_page").toArray().forEach( tgt => {
let cont_y = jQuery(tgt).offset().top;
let cont_height = win_h - cont_y - 20;
jQuery(tgt).css('height',cont_height);
});
};
const show_spinner = function(){
document.getElementById("loading_div").classList.remove("d-none");
};
const hide_spinner = function(){
document.getElementById("loading_div").classList.add("d-none");
};
const pop_filedown = function( file_url, file_ext ){
let preview_type = ['pdf','jpg','jpeg','png','gif','tiff','jfif','bmp'];
if( preview_type.indexOf(file_ext) !== -1 ){
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_file_preview', function(loadHtml){
previewModal = kuls_modal(loadHtml, {resizable:true, dontclose:true,});
if( file_ext == "pdf" ){
document.querySelector("#preview_frame").src = "/include/vendor/pdfjs/web/viewer.html?file="+encodeURIComponent(file_url);
}else{
document.querySelector("#preview_frame").src = "/include/vendor/pdfjs/web/imgviewer.php?file="+encodeURIComponent(file_url);
}
});
}else{
location.href = file_url;
}
};
jQuery(document).ready(function(){
if( jQuery("#side-nav").length ){
side_menu_load(menu_code);
}
cont_hfix();
cont_hfix_page();
});
jQuery(window).on("resize",function(){
cont_hfix();
cont_hfix_page();
});
jQuery("#btnLogout").on("click",function(){
kuls_confirm("로그아웃", "정말 로그아웃 하시겠습니까?", ()=>{
logout();
})
});
jQuery(document).on('focus','.timepicker',function(e){
jQuery(e.target).timepicker({
show2400: true,
timeFormat: 'H:i',
showOn: ['click']
});
});
if( document.getElementById("hamburger_icon") ){
document.getElementById("hamburger_icon").addEventListener("click",()=>{
if( document.getElementById("frame_main").classList.contains("full_width") ){
document.getElementById("frame_main").classList.remove("full_width");
}else{
document.getElementById("frame_main").classList.add("full_width");
}
});
}
/* tabulator 페이징 처리
* 1. sp 변경
* 2.1 ajax.php 에 $params 내 page 변수 추가,
* 2.2 ajax.php 에 $row['LIST_NUM'] 추가
* 3.1 tabulator 옵션에 footerElement 추가
* 3.2 filter 무효화
* 3.3 #bntListSearch 조회버튼 및 이벤트 추가
* 3.4 getMainList ajax 에 page 옵션추가
* 3.5 success에 putPagiNation({}) 실행추가
* 4. sort 기능
* 4.1 columnDefaults //컬럼 공통 규칙에 sorter:()=>{}, headerSort: false, 속성부여
* 4.2 columnSort 함수 추가 확인
* 4.3 headerClick 이벤트에 columnSort 함수 설정
* 4.4 sort 가능한 컬럼에 headerSort: true 속성 부여
* */
const putPagiNation = function( conf ){
if( !conf.TARGET ) return false;
conf.NOW_PAGE = conf.NOW_PAGE||1;
conf.PREB_PAGE = conf.PREB_PAGE||1;
conf.NEXB_PAGE = conf.NEXB_PAGE||1;
conf.LAST_PAGE = conf.LAST_PAGE||1;
conf.PAGE_LISTS = conf.PAGE_LISTS||[1];
let ul = document.createElement("ul");
ul.className = "pagination justify-content-center align-items-center";
ul.appendChild(putPageButton({
...conf,
NOW_PAGE: 1,
text : '',
}));
ul.appendChild(putPageButton({
...conf,
NOW_PAGE: conf.PREB_PAGE,
class : 'mr-3',
text : '',
}));
for( let i=0 ; i',
}));
ul.appendChild(putPageButton({
...conf,
NOW_PAGE: conf.LAST_PAGE,
text : '',
}));
document.querySelector(conf.TARGET).innerHTML = '';
document.querySelector(conf.TARGET).appendChild(ul);
}
const putPageButton = function(conf){
let li = document.createElement("li");
let a = document.createElement("a");
let span = document.createElement("span");
span.className = "f_page";
a.className = "pn_link npage btn btn-outline-secondary";
['click','keypress'].forEach(evt => a.addEventListener(evt,()=>{
conf.callback(conf);
}));
if( conf.active ){
a.classList.add("active");
}
span.innerHTML = conf.text;
a.appendChild(span);
li.appendChild(a);
conf.class && li.classList.add(conf.class);
return li;
}
const popPartnerList = function( columns, tabrow ){ //tabrow 존재하면 (tabulator 필드명), 그외는 거래처코드 selector=>tgt_id, 거래처명 selector => 거래처명
//팝업 템플릿 로드 후 모달 출력
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_partner_search', function(loadHtml){
let partnerModal = kuls_modal(loadHtml);
let selecttag = document.querySelector("#sgrp");
selecttag.options.length = 0;
let opt = document.createElement("option");
opt.value = '';
opt.text = '- 전 체 -';
selecttag.add(opt);
Object.keys(varsSALES_GRP).forEach(key => {
opt = document.createElement("option");
opt.value = key;
opt.text = varsSALES_GRP[key];
selecttag.add(opt);
});
const fields = [
{ formatter:"rownum", title: "No", width: 40, headerSort: false, hozAlign:'center', },
{ field: "SALES_GRP", title: "영업구분", width: 80, formatter: (cell)=> varsSALES_GRP[cell.getValue()] },
{ field: "BP_CD", title: "거래처", width: 80, },
{ field: "BP_NM", title: "거래처명", width: 150,},
{ field: "REPRESN_NM", title: "대표자명", width: 100,},
{ field: "CURRENCY_CD", title: "거래화폐", width: 90, },
{ field: "PUR_FLG", title: "매입처", width: 70, formatter: tb_common_funtions.formatterSelCircleIcon, },
{ field: "SAL_FLG", title: "매출처", width: 70, formatter: tb_common_funtions.formatterSelCircleIcon, },
];
const table_pop_partner_search = new Tabulator("#pop_partner_list", {
layout:"fitColumns",
data: [], //기본 데이터
height: "100%",
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign:"middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate:true, //정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
const getPopPartnerList = function(){//리스트 불러오기
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode:"getPartnerList"},
success: function( data ){
if( data.code ){
table_pop_partner_search.setData(data.data);
if( columns.tgt_filter && columns.txt_filter ){
document.querySelector(columns.tgt_filter).value = columns.txt_filter;
setTableFilter();
}
}
},
error: function (request, status, error) {
//kuls_alert(error.message);
},
});
};
const setTableFilter = function(){ //검색어 필터 적용
let stxt = trim(document.querySelector("#awn-popup-wrapper input[name=stxt]").value);
let sgrp = trim(document.querySelector("#awn-popup-wrapper select[name=sgrp]").value);
table_pop_partner_search.setFilter(function(data){
return (!sgrp || data['SALES_GRP'] === sgrp) && (!stxt || data['BP_CD'].search(RegExp(stxt,"is")) !== -1 || data['BP_NM'].search(RegExp(stxt,"is")) !== -1 || data['BP_FULL_NM'].search(RegExp(stxt,"is")) !== -1) }, '=', true);
};
const setPopPartnerData = function(e,tgt){ //Row 더블클릭 실행
let row = tgt._row;
if( tabrow ){
let uptjson = {_STATUS_:tabrow.getData()['_STATUS_']||'U'};
Object.keys(columns).forEach( key => {
switch( key ){
case "tgt_id": uptjson[columns[key]] = row.data['BP_CD']; break;
case "tgt_name": uptjson[columns[key]] = row.data['BP_NM']; break;
case "tgt_full_name": uptjson[columns[key]] = (row.data['BP_FULL_NM']||row.data['BP_NM']); break;
case "tgt_addr": uptjson[columns[key]] = row.data['ADDR1']; break;
case "tgt_currency": uptjson[columns[key]] = row.data['CURRENCY_CD']; break;
case "tgt_chid": uptjson[columns[key]] = row.data['BP_PRSN_ID']; break;
case "tgt_chname": uptjson[columns[key]] = row.data['BP_PRSN_NM']; break;
case "tgt_chmail": uptjson[columns[key]] = row.data['BP_PRSN_EMAIL']; break;
case "tgt_chtel": uptjson[columns[key]] = row.data['BP_PRSN_TEL_NO']; break;
case "tgt_chcell": uptjson[columns[key]] = row.data['BP_PRSN_CELL_NO']; break;
case "tgt_chfax": uptjson[columns[key]] = row.data['BP_PRSN_FAX_NO']; break;
case "tgt_portnm": uptjson[columns[key]] = row.data['PORT_NM']; break;
case "tgt_sales_grp": uptjson[columns[key]] = row.data['SALES_GRP']; break;
}
} );
tabrow.updateData(uptjson);
// if( tgt_id && tabrow.getCell(tgt_id) ) tabrow.getCell(tgt_id).setValue(row.data['BP_CD']);
// if( tgt_name && tabrow.getCell(tgt_name)) tabrow.getCell(tgt_name).setValue(row.data['BP_NM']);
// if( tgt_addr && tabrow.getCell(tgt_addr)) tabrow.getCell(tgt_addr).setValue(row.data['ADDR1']);
// if( tgt_currency && tabrow.getCell(tgt_currency)) tabrow.getCell(tgt_currency).setValue(row.data['CURRENCY_CD']);
}else{
if( document.querySelector(columns.tgt_id) ) document.querySelector(columns.tgt_id).value = row.data['BP_CD'];
if( document.querySelector(columns.tgt_name) ) document.querySelector(columns.tgt_name).value = row.data['BP_NM'];
if( document.querySelector(columns.tgt_full_name)) document.querySelector(columns.tgt_full_name).value = row.data['BP_FULL_NM']||row.data['BP_NM'];
if( document.querySelector(columns.tgt_addr) ) document.querySelector(columns.tgt_addr).value = row.data['ADDR1'];
if( document.querySelector(columns.tgt_currency) ) document.querySelector(columns.tgt_currency).value = row.data['CURRENCY_CD'];
if( document.querySelector(columns.tgt_chid) ) document.querySelector(columns.tgt_chid).value = row.data['BP_PRSN_ID'];
if( document.querySelector(columns.tgt_chname) ) document.querySelector(columns.tgt_chname).value = row.data['BP_PRSN_NM'];
if( document.querySelector(columns.tgt_chmail) ) document.querySelector(columns.tgt_chmail).value = row.data['BP_PRSN_EMAIL'];
if( document.querySelector(columns.tgt_chtel) ) document.querySelector(columns.tgt_chtel).value = row.data['BP_PRSN_TEL_NO'];
if( document.querySelector(columns.tgt_chcell) ) document.querySelector(columns.tgt_chcell).value = row.data['BP_PRSN_CELL_NO'];
if( document.querySelector(columns.tgt_chfax) ) document.querySelector(columns.tgt_chfax).value = row.data['BP_PRSN_FAX_NO'];
if( document.querySelector(columns.tgt_portnm) ) document.querySelector(columns.tgt_portnm).value = row.data['PORT_NM'];
if( document.querySelector(columns.tgt_sales_grp) ) document.querySelector(columns.tgt_sales_grp).value = row.data['SALES_GRP'];
document.querySelector(columns.tgt_name) && document.querySelector(columns.tgt_name).dispatchEvent(new Event('change'));
}
partnerModal.delete();
};
const initPopPartnerData = function(){ //Row 더블클릭 실행
if( tabrow ){
kuls_warning("거래처는 필수항목 입니다.");
}else{
if( document.querySelector(columns.tgt_id) ) document.querySelector(columns.tgt_id).value = "";
if( document.querySelector(columns.tgt_name) ) document.querySelector(columns.tgt_name).value = "";
if( document.querySelector(columns.tgt_addr) ) document.querySelector(columns.tgt_addr).value = "";
if( document.querySelector(columns.tgt_currency) ) document.querySelector(columns.tgt_addr).value = "";
if( document.querySelector(columns.tgt_chname) ) document.querySelector(columns.tgt_chname).value = "";
if( document.querySelector(columns.tgt_chmail) ) document.querySelector(columns.tgt_chmail).value = "";
if( document.querySelector(columns.tgt_chtel) ) document.querySelector(columns.tgt_chtel).value = "";
if( document.querySelector(columns.tgt_chcell) ) document.querySelector(columns.tgt_chcell).value = "";
if( document.querySelector(columns.tgt_chfax) ) document.querySelector(columns.tgt_chfax).value = "";
if( document.querySelector(columns.tgt_portnm) ) document.querySelector(columns.tgt_portnm).value = "";
}
partnerModal.delete();
};
//document.querySelector("#awn-popup-wrapper .btnPopSearch").addEventListener("click",function() { //조회버튼 클릭 이벤트
// getPopPartnerList();
//});
//document.querySelector("#awn-popup-wrapper .btnPopInit").addEventListener("click",function() { //조회버튼 클릭 이벤트
// initPopPartnerData();
//});
document.querySelector("#awn-popup-wrapper [name=stxt]").addEventListener("keyup",function() { //검색어 입력 이벤트
setTableFilter();
});
document.querySelector("#awn-popup-wrapper [name=sgrp]").addEventListener("change",function() { //영업분류 변경 이벤트
setTableFilter();
});
['click','keypress'].forEach(evt => document.querySelector("#awn-popup-wrapper #ptReset").addEventListener(evt,function() { //검색어 입력 이벤트
initPopPartnerData();
}));
table_pop_partner_search.on("rowDblClick", setPopPartnerData); //Row 더블클릭 이벤트
table_pop_partner_search.on("tableBuilt", function(){ //초기 데이터 불러오기 이벤트
getPopPartnerList();
});
});
};
const popBizareaList = function( tgt_id, tgt_name, tabrow ){ //tabrow 존재하면 (tabulator 필드명), 그외는 거래처코드 selector=>tgt_id, 거래처명 selector => 거래처명
//팝업 템플릿 로드 후 모달 출력
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_bizarea_search', function(loadHtml){
let bizareaModal = kuls_modal(loadHtml);
const fields = [
{ formatter:"rownum", title: "No", width: 50, headerSort: false, hozAlign:'center', },
{ field: "BIZ_AREA_CD", title: "사업장코드", width: 100, },
{ field: "BIZ_AREA_NM", title: "사업장명", width: 160, },
{ field: "HQ_FLG", title: "본사구분", width: 90, },
{ field: "WORK_STD_TIME", title: "기준시간", width: 90, },
{ field: "STD_CURRENCY_CD", title: "기준화폐", width: 90, },
];
const table_pop_bizarea_search = new Tabulator("#pop_bizarea_list", {
layout:"fitColumns",
data: [], //기본 데이터
height: "100%",
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign:"middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate:true, //정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
const getPopBizareaList = function(){//리스트 불러오기
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode:"getBizareaList"},
success: function( data ){
if( data.code ){
table_pop_bizarea_search.setData(data.data);
}
},
error: function (request, status, error) {
//kuls_alert(error.message);
},
});
};
const setTableFilter = function(){ //검색어 필터 적용
let stxt = trim(document.querySelector("#awn-popup-wrapper input[name=stxt]").value);
table_pop_bizarea_search.setFilter(function(data){
return !stxt || data['BP_CD'].search(RegExp(stxt,"is")) !== -1 || data['BP_NM'].search(RegExp(stxt,"is")) !== -1 || data['BP_FULL_NM'].search(RegExp(stxt,"is")) !== -1 }, '=', true);
};
const setPopBizareaData = function(e,tgt){ //Row 더블클릭 실행
let row = tgt._row;
if( tabrow ){
tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}else{
if( document.querySelector(tgt_id) ) document.querySelector(tgt_id).value = row.data['BIZ_AREA_CD'];
if( document.querySelector(tgt_name) ) document.querySelector(tgt_name).value = row.data['BIZ_AREA_NM'];
}
bizareaModal.delete();
};
const initPopBizareaData = function(){ //Row 더블클릭 실행
if( tabrow ){
kuls_warning("Bizarea is neccessary field!");
}else{
if( document.querySelector(tgt_id) ) document.querySelector(tgt_id).value = "";
if( document.querySelector(tgt_name) ) document.querySelector(tgt_name).value = "";
}
bizareaModal.delete();
};
//document.querySelector("#awn-popup-wrapper .btnPopSearch").addEventListener("click",function() { //조회버튼 클릭 이벤트
// getPopBizareaList();
//});
//document.querySelector("#awn-popup-wrapper .btnPopInit").addEventListener("click",function() { //조회버튼 클릭 이벤트
// initPopBizareaData();
//});
document.querySelector("#awn-popup-wrapper [name=stxt]").addEventListener("keyup",function() { //검색어 입력 이벤트
setTableFilter();
});
table_pop_bizarea_search.on("rowDblClick", setPopBizareaData); //Row 더블클릭 이벤트
table_pop_bizarea_search.on("tableBuilt", function(){ //초기 데이터 불러오기 이벤트
getPopBizareaList();
});
});
};
const popMemberList = function( tgt_id, tgt_name, tabrow ){ //tabrow 존재하면 (tabulator 필드명), 그외는 거래처코드 selector=>tgt_id, 거래처명 selector => 거래처명
//팝업 템플릿 로드 후 모달 출력
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_member_search', function(loadHtml){
let bizareaModal = kuls_modal(loadHtml);
const fields = [
{ formatter:"rownum", title: "No", width: 50, headerSort: false, hozAlign:'center', },
{ field: "EMP_NO", title: "사 번", width: 100, },
{ field: "EMP_NM", title: "이 름", width: 160, },
{ field: "DEPT_NM", title: "부서명", width: 90, },
{ field: "BIZ_AREA_NM", title: "사업장", width: 90, },
];
const table_pop_bizarea_search = new Tabulator("#pop_bizarea_list", {
layout:"fitColumns",
data: [], //기본 데이터
height: "100%",
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign:"middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate:true, //정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
const getPopBizareaList = function(){//리스트 불러오기
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode:"getBizareaList"},
success: function( data ){
if( data.code ){
table_pop_bizarea_search.setData(data.data);
}
},
error: function (request, status, error) {
//kuls_alert(error.message);
},
});
};
const setTableFilter = function(){ //검색어 필터 적용
let stxt = trim(document.querySelector("#awn-popup-wrapper input[name=stxt]").value);
table_pop_bizarea_search.setFilter(function(data){
return !stxt || data['BP_CD'].search(RegExp(stxt,"is")) !== -1 || data['BP_NM'].search(RegExp(stxt,"is")) !== -1 || data['BP_FULL_NM'].search(RegExp(stxt,"is")) !== -1 }, '=', true);
};
const setPopBizareaData = function(e,tgt){ //Row 더블클릭 실행
let row = tgt._row;
if( tabrow ){
tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}else{
if( document.querySelector(tgt_id) ) document.querySelector(tgt_id).value = row.data['BIZ_AREA_CD'];
if( document.querySelector(tgt_name) ) document.querySelector(tgt_name).value = row.data['BIZ_AREA_NM'];
}
bizareaModal.delete();
};
const initPopBizareaData = function(){ //Row 더블클릭 실행
if( tabrow ){
kuls_warning("Bizarea is neccessary field!");
}else{
if( document.querySelector(tgt_id) ) document.querySelector(tgt_id).value = "";
if( document.querySelector(tgt_name) ) document.querySelector(tgt_name).value = "";
}
bizareaModal.delete();
};
//document.querySelector("#awn-popup-wrapper .btnPopSearch").addEventListener("click",function() { //조회버튼 클릭 이벤트
// getPopBizareaList();
//});
//document.querySelector("#awn-popup-wrapper .btnPopInit").addEventListener("click",function() { //조회버튼 클릭 이벤트
// initPopBizareaData();
//});
document.querySelector("#awn-popup-wrapper [name=stxt]").addEventListener("keyup",function() { //검색어 입력 이벤트
setTableFilter();
});
table_pop_bizarea_search.on("rowDblClick", setPopBizareaData); //Row 더블클릭 이벤트
table_pop_bizarea_search.on("tableBuilt", function(){ //초기 데이터 불러오기 이벤트
getPopBizareaList();
});
});
};
const popDeptListLive = function( tgt_id, tgt_name, tab ){
//팝업 템플릿 로드 후 모달 출력
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_dept_search', function(loadHtml){
let bizareaModal = kuls_modal(loadHtml);
document.querySelector(".awn-popup-confirm.awn-dept .s_fld").innerHTML = "";//사업장 Select 태그 제거
let row = tab._row;
let tree_data = tab.getTable().getData();
let row_data = row.getData();
let BIZ_AREA_CD = row_data['BIZ_AREA_CD'];
if( !BIZ_AREA_CD ){
kuls_alert( "사업장 코드를 선택하지 않았습니다." );
return;
}
jQuery('#pop_dept_tree').fancytree({
clickFolderMode: 3,
source : tree_by_parent( tree_data, 'DEPT_CD', 'PAR_DEPT_CD', ''),
dblclick: function(event, data) {
let node = data.node;
if( ('|'+node.data['DEPT_PATH_CD']+'|').indexOf('|'+row.data['DEPT_CD']+'|') !== -1 ){
kuls_alert("해당부서 또는 하위부서를 상위부서로 선택하였습니다.");
return false;
}
row.updateData({[tgt_id]:node.data['DEPT_CD'],[tgt_name]:node.data['DEPT_NM'],_STATUS_:row.getData()['_STATUS_']||'U'});
bizareaModal.delete();
}
});
});
};
/* 위는 수정/추가가 반영되는 라이브 상태로 진행되며, 아래 코드는 DB 내용만 가져오는것. */
const popDeptList = function( tgt_id, tgt_name, tgt_intnl, BIZ_AREA_CD, tab ){
//팝업 템플릿 로드 후 모달 출력
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_dept_search', function(loadHtml){
let bizareaModal = kuls_modal(loadHtml);
let row = tab._row;
const cfunc = function(data) {
let node = data.node;
row.updateData({[tgt_id]:node.data['DEPT_CD'],[tgt_name]:node.data['DEPT_NM'],[tgt_intnl]:node.data['INTNL_DEPT_CD'],_STATUS_:row.getData()['_STATUS_']||'U'});
bizareaModal.delete();
};
ajax_json({
url: "/inc/common.ajax.php",
type: "POST",
data: {
mode:'getBizareaList',
},
success: function(data){
if( data.code ){
let selecttag = document.querySelector(".s_fld select[name=BIZ_AREA_CD]");
selecttag.options.length = 0;
data.data.forEach(row => {
let opt = document.createElement("option");
opt.value = row['BIZ_AREA_CD'];
opt.text = row['BIZ_AREA_NM'];
selecttag.add(opt);
});
selecttag.value = BIZ_AREA_CD;
}
},
error: function(request, status, error) {
},
complete: function(request, status){
getDeptList(tgt_id, tgt_name, BIZ_AREA_CD, cfunc);
}
});
document.querySelector(".s_fld select[name=BIZ_AREA_CD]").addEventListener("change", function(){
getDeptList(tgt_id, tgt_name, this.value, cfunc);
});
});
};
const getDeptList = function (tgt_id, tgt_name, BIZ_AREA_CD, cfunc) {
document.querySelector(".awn-popup-confirm.awn-dept .awn-popup-content").innerHTML = "";
ajax_json({
url: "/inc/common.ajax.php",
type: "POST",
data: {
mode:'getDeptTree',
BIZ_AREA_CD,
},
success: function(data){
if( data.code ){
jQuery('#pop_dept_tree').fancytree({
clickFolderMode: 3,
source : tree_by_parent( data.data, 'DEPT_CD', 'PAR_DEPT_CD', ''),
dblclick: function(event, data) {
cfunc && cfunc(data);
}
});
}
},
error: function(request, status, error) {
},
complete: function(request, status){
}
});
}
const popEmployeeList = function( tgt_id, tgt_name, BIZ_AREA_CD, tabrow ){
//팝업 템플릿 로드 후 모달 출력
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_employee_search', function(loadHtml){
let bizareaModal = kuls_modal(loadHtml);
const cfunc = function(e, tgt) {
let row = tgt._row;
if( tabrow ){
tabrow.updateData({[tgt_id]:row.data['EMP_NO'],[tgt_name]:row.data['EMP_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}else{
if( document.querySelector(tgt_id) ) document.querySelector(tgt_id).value = row.data['EMP_NO'];
if( document.querySelector(tgt_name) ) document.querySelector(tgt_name).value = row.data['EMP_NM'];
}
bizareaModal.delete();
};
ajax_json({
url: "/inc/common.ajax.php",
type: "POST",
data: {
mode:'getBizareaList',
},
success: function(data){
if( data.code ){
let selecttag = document.querySelector(".s_fld select[name=BIZ_AREA_CD]");
selecttag.options.length = 0;
data.data.forEach(row => {
let opt = document.createElement("option");
opt.value = row['BIZ_AREA_CD'];
opt.text = row['BIZ_AREA_NM'];
selecttag.add(opt);
});
selecttag.value = BIZ_AREA_CD;
}
},
error: function(request, status, error) {
},
complete: function(request, status){
getEmployeeList(tgt_id, tgt_name, BIZ_AREA_CD, cfunc);
}
});
document.querySelector(".s_fld select[name=BIZ_AREA_CD]").addEventListener("change", function(){
getEmployeeList(tgt_id, tgt_name, this.value, cfunc);
});
});
};
const getEmployeeList = function (tgt_id, tgt_name, BIZ_AREA_CD, cfunc) {
const fields = [
{ formatter:"rownum", title: "No", width: 50, headerSort: false, hozAlign:'center', },
{ field: "EMP_NO", title: "사 번", width: 100, },
{ field: "EMP_NM", title: "이 름", width: 160, },
{ field: "DEPT_NM", title: "부서명", width: 120, },
{ field: "BIZ_AREA_NM", title: "사업장", width: 150, },
];
const table_pop_employee_search = new Tabulator("#pop_employee_list", {
layout:"fitColumns",
data: [], //기본 데이터
height: "100%",
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign:"middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate:true, //정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
const getPopEmployeeList = function(){//리스트 불러오기
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode:"getEmployeeList", BIZ_AREA_CD},
success: function( data ){
if( data.code ){
table_pop_employee_search.setData(data.data);
}
},
error: function (request, status, error) {
//kuls_alert(error.message);
},
});
};
table_pop_employee_search.on("rowDblClick", (e,tgt)=>{
cfunc && cfunc(e,tgt);
}); //Row 더블클릭 이벤트
table_pop_employee_search.on("tableBuilt", function(){ //초기 데이터 불러오기 이벤트
getPopEmployeeList();
});
['change','keyup'].forEach(evt => document.querySelector(".s_fld input[name=stxt]").addEventListener(evt, function(){
table_pop_employee_search.setFilter(function(data){ //필터링
return (
true
&& ( data.EMP_NM.indexOf(document.querySelector(".s_fld input[name=stxt]").value) !== -1 )
)
}, '=', true);
}));
}
const popBasecodeList = function( tgt_id, tgt_name, Bran_Uid, tabrow, rtgt ){
//팝업 템플릿 로드 후 모달 출력
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_basecode_search', function(loadHtml){
let basecodeModal = kuls_modal(loadHtml);
if( rtgt ) { //Routing 전용
let basecodes = [
//{Bran_Uid: 'SHAPE_TYPE', Code_Exp: '형상관리'},
{Bran_Uid: 'ITEM_SPEC', Code_Exp: '스펙항목관리'},
{Bran_Uid: 'OP_PART', Code_Exp: '가공부위관리'},
{Bran_Uid: 'INSP_ITEM', Code_Exp: '검사항목관리'},
];
let selecttag = document.querySelector(".s_fld select[name=BASECODE]");
selecttag.options.length = 0;
basecodes.forEach(row => {
let opt = document.createElement("option");
opt.value = row['Bran_Uid'];
opt.text = row['Code_Exp'];
selecttag.add(opt);
});
Bran_Uid = Bran_Uid || basecodes[0].Bran_Uid;
selecttag.value = Bran_Uid;
document.querySelector(".s_fld select[name=BASECODE]").addEventListener("change", function () {
getPopBasecodeList(this.value);
switch(this.value){
case "SHAPE_TYPE":
tabrow = Tb_funcs_Spec.arefunc;
break;
case "ITEM_SPEC":
tabrow = Tb_funcs_Spec.brefunc;
break;
case "OP_PART":
tabrow = Tb_funcs_Cond.refunc;
break;
case "INSP_ITEM":
tabrow = Tb_funcs_Insp.refunc;
break;
}
});
}
const fields = [
{ formatter:"rownum", title: "No", width:'10%', minWidth: 50, headerSort: false, hozAlign:'center', },
{ field: "Code_Uid", title: "코드", width:'30%', minWidth: 100, editor:'input', editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' }, },
{ field: "Code_Val", title: "명칭", width:'40%', minWidth: 160, editor:'input', },
{ field: "Code_Active", title: "사용", width:'20%', minWidth: 60, cssClass:'user-editable', formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: {checkval:'Y'}, },
];
const table_pop_basecode_search = new Tabulator("#pop_basecode_list", {
layout:"fitColumns",
data: [], //기본 데이터
height: "100%",
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign:"middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate:true, //정렬 => 정/역/초기화
},
movableRows: true,
headerSortElement: "", //정렬 아이콘
});
const getPopBasecodeList = function(Bran_Uid){//리스트 불러오기
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode:"getBasecodeList", Bran_Uid},
success: function( data ){
if( data.code ){
table_pop_basecode_search.setData(data.data);
}
},
error: function (request, status, error) {
//kuls_alert(error.message);
},
complete: function(){
setFilter();
}
});
};
const setFilter = () => {
table_pop_basecode_search.setFilter(function(data){ //필터링
return (
true
&& ( !document.getElementById("P_USE_FLG") || ( !document.getElementById("P_USE_FLG").checked || data.Code_Active === 'Y' ) )
)
}, '=', true);
};
//Row 추가
const addRow = () => {
table_pop_basecode_search.addRow({_STATUS_:'I', Bran_Uid, Group_Uid:Bran_Uid, Code_Active:'Y'});
}
//Cell 클릭 콜백
const cellClick = (e, tgt) => {
switch( tgt.getField() ){
case "Code_Active":
tgt.setValue( tgt.getValue() == "Y"?"N":"Y" );
break;
}
};
//Cell 변경 콜백
const cellEdited = (cell) => {
let _this = this;
cell.getData()._STATUS_ = cell.getData()._STATUS_||'U';
};
const putItem = () => {
let pdata = table_pop_basecode_search.getData();
let dupdata = pdata.map( data => data['Code_Uid'] );
if( dupdata.filter( (data,idx) => dupdata.indexOf(data) !== idx ).length > 0 ){
kuls_alert("코드가 중복됩니다.");
return false;
}
let postdata = {
'mode': 'putBasecode',
'reqdata': JSON.stringify(table_pop_basecode_search.getData().filter(row=> row._STATUS_)),
};
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("적용 되었습니다.");
if( typeof(tabrow) == 'function' ){
tabrow(pdata, null);
basecodeModal.delete();
}
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
});
return true;
};
table_pop_basecode_search.on("rowDblClick", (e,tgt)=>{
return false;
let row = tgt._row;
document.ttt = tgt;
if( typeof(tabrow) == 'function' ){
tabrow(tgt.getTable().getData(), tgt.getData());
}else if( tabrow ){
tabrow.updateData({[tgt_id]:row.data['Code_Uid'],[tgt_name]:row.data['Code_Val'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}else{
if( document.querySelector(tgt_id) ) document.querySelector(tgt_id).value = row.data['Code_Uid'];
if( document.querySelector(tgt_name) ) document.querySelector(tgt_name).value = row.data['Code_Val'];
}
basecodeModal.delete();
}); //Row 더블클릭 이벤트
table_pop_basecode_search.on("cellClick", (e,tgt) => { //Tabulator cell Click
cellEdited && cellClick(e,tgt);
})
table_pop_basecode_search.on("cellEdited", (cell) => { //Tabulator cell Edited
cellEdited && cellEdited(cell);
});
table_pop_basecode_search.on("rowMoved", (row,a,b) => { //Tabulator Row Moved
let Code_Uid = row.getData()['Code_Uid'];
let n_idx = row.getTable().getData().findIndex( v => v.Code_Uid === Code_Uid );
do{ //현재 이하 순서 변경
row._row.updateData({Code_Idx: ++n_idx, _STATUS_:(row.getData()['_STATUS_']||'U')});
}while( row = row.getNextRow() );
});
['click','keypress'].forEach(evt => document.querySelector("#btnAddBcode").addEventListener(evt,()=>{addRow()}));
['click','keypress'].forEach(evt => document.querySelector("#btnPutBcode").addEventListener(evt,()=>{putItem()}));
['change','keydown','keyup'].forEach(evt => document.querySelectorAll("#P_USE_FLG").forEach(tgt=>tgt.addEventListener(evt,()=>{setFilter()})));
table_pop_basecode_search.on("tableBuilt", function(){ //초기 데이터 불러오기 이벤트
getPopBasecodeList(Bran_Uid);
});
});
};
const popBasegroupList = function( tgt_id, tgt_name, Bran_Uid, Group_Uid, refunc, rtgt ){
//팝업 템플릿 로드 후 모달 출력
vnLoad('','/ksvc/inc/popup.inc.php', '#pop_basecode_search', function(loadHtml){
let basegroupModal = kuls_modal(loadHtml);
if( rtgt ) { //Routing 전용
let basegroups = Object.keys(varsSHAPE_GRP).map(key => {return{Group_Uid:key, Code_Exp:varsSHAPE_GRP[key].Code_Exp}});
let selecttag = document.querySelector(".s_fld select[name=BASECODE]");
selecttag.options.length = 0;
basegroups.forEach(row => {
let opt = document.createElement("option");
opt.value = row['Group_Uid'];
opt.text = row['Code_Exp'];
selecttag.add(opt);
});
Group_Uid = Group_Uid || basegroups[0].Group_Uid;
selecttag.value = Group_Uid;
document.querySelector(".s_fld select[name=BASECODE]").addEventListener("change", function () {
getPopBasegroupList(this.value);
});
}
const fields = [
{ formatter:"rownum", title: "No", width:'10%', minWidth: 50, headerSort: false, hozAlign:'center', },
{ field: "Code_Uid", title: "코드", width:'30%', minWidth: 100, editor:'input', editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' }, },
{ field: "Code_Val", title: "명칭", width:'40%', minWidth: 160, editor:'input', },
{ field: "Code_Active", title: "사용", width:'20%', minWidth: 60, cssClass:'user-editable', formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: {checkval:'Y'}, },
];
const table_pop_basegroup_search = new Tabulator("#pop_basecode_list", {
layout:"fitColumns",
data: [], //기본 데이터
height: "100%",
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign:"middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate:true, //정렬 => 정/역/초기화
},
movableRows: true,
headerSortElement: "", //정렬 아이콘
});
const getPopBasegroupList = function(G_Uid){//리스트 불러오기
Group_Uid = G_Uid || Group_Uid;
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode:"getBasecodeList", Bran_Uid, Group_Uid:Group_Uid},
success: function( data ){
if( data.code ){
table_pop_basegroup_search.setData(data.data);
}
},
error: function (request, status, error) {
//kuls_alert(error.message);
},
complete: function(){
setFilter();
}
});
};
const setFilter = () => {
table_pop_basegroup_search.setFilter(function(data){ //필터링
return (
true
&& ( !document.getElementById("P_USE_FLG") || ( !document.getElementById("P_USE_FLG").checked || data.Code_Active === 'Y' ) )
)
}, '=', true);
};
//Row 추가
const addRow = () => {
table_pop_basegroup_search.addRow({_STATUS_:'I', Bran_Uid, Group_Uid:Group_Uid, Code_Active:'Y'});
}
//Cell 클릭 콜백
const cellClick = (e, tgt) => {
switch( tgt.getField() ){
case "Code_Active":
tgt.setValue( tgt.getValue() == "Y"?"N":"Y" );
break;
}
};
//Cell 변경 콜백
const cellEdited = (cell) => {
let _this = this;
cell.getData()._STATUS_ = cell.getData()._STATUS_||'U';
};
const putItem = () => {
let pdata = table_pop_basegroup_search.getData();
let dupdata = pdata.map( data => data['Code_Uid'] );
if( dupdata.filter( (data,idx) => dupdata.indexOf(data) !== idx ).length > 0 ){
kuls_alert("코드가 중복됩니다.");
return false;
}
let postdata = {
'mode': 'putBasecode',
'reqdata': JSON.stringify(table_pop_basegroup_search.getData().filter(row=> row._STATUS_)),
};
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("적용 되었습니다.");
if( typeof(tabrow) == 'function' ){
tabrow(pdata, null);
basegroupModal.delete();
}
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
});
return true;
};
table_pop_basegroup_search.on("rowDblClick", (e,tgt)=>{
return false;
let row = tgt._row;
document.ttt = tgt;
if( typeof(tabrow) == 'function' ){
tabrow(tgt.getTable().getData(), tgt.getData());
}else if( tabrow ){
tabrow.updateData({[tgt_id]:row.data['Code_Uid'],[tgt_name]:row.data['Code_Val'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}else{
if( document.querySelector(tgt_id) ) document.querySelector(tgt_id).value = row.data['Code_Uid'];
if( document.querySelector(tgt_name) ) document.querySelector(tgt_name).value = row.data['Code_Val'];
}
basegroupModal.delete();
}); //Row 더블클릭 이벤트
table_pop_basegroup_search.on("cellClick", (e,tgt) => { //Tabulator cell Click
cellEdited && cellClick(e,tgt);
})
table_pop_basegroup_search.on("cellEdited", (cell) => { //Tabulator cell Edited
cellEdited && cellEdited(cell);
});
table_pop_basegroup_search.on("rowMoved", (row,a,b) => { //Tabulator Row Moved
let Code_Uid = row.getData()['Code_Uid'];
let n_idx = row.getTable().getData().findIndex( v => v.Code_Uid === Code_Uid );
do{ //현재 이하 순서 변경
row._row.updateData({Code_Idx: ++n_idx, _STATUS_:(row.getData()['_STATUS_']||'U')});
}while( row = row.getNextRow() );
});
['click','keypress'].forEach(evt => document.querySelector("#btnAddBcode").addEventListener(evt,()=>{addRow()}));
['click','keypress'].forEach(evt => document.querySelector("#btnPutBcode").addEventListener(evt,()=>{putItem()}));
['change','keydown','keyup'].forEach(evt => document.querySelectorAll("#P_USE_FLG").forEach(tgt=>tgt.addEventListener(evt,()=>{setFilter()})));
table_pop_basegroup_search.on("tableBuilt", function(){ //초기 데이터 불러오기 이벤트
getPopBasegroupList();
});
});
};
class drawManager {
constructor(){
let _this = this;
_this.tblList = "";
_this.prow = "";
_this.ajax_url = "/order/registration/registration.ajax.php";
_this.upload_ajax_url = "/order/registration/attfile.ajax.php";
_this.download_url = "/include/getFile.php";
_this.drawModal = null;
}
init(row) {
let _this = this;
_this.prow = row;
_this.parData = Object.assign({},row.getData());
if( !_this.parData.SO_SEQ ) {
kuls_alert("저장되지 않은 수주상세입니다.
수주상세 저장 후 도면등록이 가능합니다.");
return;
}
vnLoad('','/order/registration/draw.pop.inc.php', '', function(loadHtml){
_this.drawModal = kuls_modal(loadHtml);
_this.initload();
});
}
//리스트 로드
getMainList () {
let _this = this;
let introw = ['ORD_QTY','SO_QTY'];
let fltrow = ['OUT_DIA','IN_DIA','THICK','WIDTH','LENGTH'];
Object.keys(_this.parData).forEach( key => {
if( introw.indexOf(key) !== -1 ){
_this.parData[key] = parseInt(_this.parData[key]);
}
if( fltrow.indexOf(key) !== -1 ){
_this.parData[key] = currency(_this.parData[key], { precision: 3 });
}
if( key === "SHAPE_TYPE" ) _this.parData[key] = varsSHAPE_TYPE[_this.parData[key]];
if( key === "ITEM_CD" ) _this.parData[key] = varsSHAPE_GRP[_this.parData[key]]?.Code_Exp;
if( document.getElementById('pop_'+key) ) document.getElementById('pop_'+key).innerHTML = _this.parData[key];
} );
let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.upload_ajax_url,
data: { mode: 'getDrawList', nid:_this.parData['SO_NO']||'', sid:_this.parData['SO_SEQ']||'' },
success: function (data) {
if (data.code) {
if( data.data.length ){
_this.tblList.setData(data.data.map(sd=>{return {...sd,_OLD_STATUS_:sd._STATUS_};}));
_this.prow.update({ASS_DRAW: data.data.sort( (a,b) => a.file_id < b.file_id ? 1 : -1 )[0].file_exp});
}
}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("drawfilepond"),{
...filepond_ko_KR,
name:'upfile',
allowMultiple:true,
maxParallelUploads:3,
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'];
_this.tblList.addRow({
_STATUS_:'I',
nid:_this.parData['SO_NO'],
sid:_this.parData['SO_SEQ'],
file_name,
tmp_name,
file_size,
file_type,
gubun:'temp',
});
},
},
},
allowFileSizeValidation: true,
maxFileSize: 100000000,
credits:{},
});
// document.addEventListener('FilePond:processfile', (e)=>{
// let data = e.detail.file;
// let name = data.filename;
// let ext = data.fileExtension;
// let size = data.fileSize;
// let type = data.fileType;
// let file_url = _this.download_url+"?gubun=temp&tmp_name="+1+"&name="+name+"&size="+size;
//
// _this.tblList.addRow({_STATUS_:'I', file_name:name, url:file_url});
// });
document.getElementById("drawfilepond").addEventListener('FilePond:addfilestart', (e)=>{
_this.tblList.alert("미리보기 작성중...");
document.querySelector("#pop_draw_search .btn_prim").disabled = true;
});
document.getElementById("drawfilepond").addEventListener('FilePond:processfiles', (e)=>{
_this.tblList.clearAlert();
document.querySelector("#pop_draw_search .btn_prim").disabled = false;
});
}
}
});
return true;
};
setFilter () {
let _this = this;
};
//Row 추가
addRow(){
let _this = this;
}
//Cell 클릭 콜백
cellClick (e, tgt){
let _this = this;
let rowData = tgt.getData();
switch( tgt.getField() ){
case "file_url":
let file_url = _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'];
pop_filedown(file_url, rowData['file_name'].split(".").pop());
break;
case "DEL_FLG":
tgt.setValue( tgt.getValue() == "Y"?"N":"Y" );
break;
}
};
//Cell 변경 콜백
cellEdited (cell){
let _this = this;
cell.getData()._STATUS_ = cell.getData()._STATUS_||'U';
};
//등록
uploadDraw (){
let _this = this;
_this.uploader.browse();
};
//등록
putDraw (){
let _this = this;
/* 삭제를 토글로 처리시, 복구를 위해 DEL_FLG가 추가될 경우에 사용.
let rowData = _this.tblList.getData().map( row => {
if( row['DEL_FLG'] === "Y" ){
row['_STATUS_'] = "D";
}
return row;
}).filter(row => row['_STATUS_'] && (row['_STATUS_'] !== "D" || row['file_id']) );
*/
let rowData = _this.tblList.getData().filter(row => row['_STATUS_']);
ajax_json({
url: _this.upload_ajax_url,
data: { mode: 'putDraw', reqdata: JSON.stringify(rowData) },
success: function (data) {
if (data.code) {
kuls_success("저장되었습니다.");
//Tb_funcs_Detail.drawModal.delete();
_this.getMainList();
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
};
rowDelete (){
let _this = this;
_this.tblList.getSelectedRows().forEach( row => {
row.getData()['_STATUS_'] = 'D';
row.getElement().classList.add("del-row");
} );
};
revokeData(row){
let _this = this;
row.update({_STATUS_:row.getData()['_OLD_STATUS_']});
row.getElement().classList.remove("del-row");
};
//시작 실행
initload () {
let _this = this;
const fields = [
//{ formatter: "rownum", title: "No", width: "8%", minWidth:80, },
{ formatter:"rowSelection", title: "No", width: "10%", headerSort: false, },
{ field: "file_exp", title: "도면번호", width: "40%", minWidth:200, editor:"input" },
{ field: "file_name", title: "도면파일", width: "40%", minWidth:200, },
{ field: "file_url", title: "", width: "10%", minWidth:80, formatter: ()=>'', },
//{ field: "DEL_FLG", title: "삭제", width: "8%", minWidth:80, cssClass:'user-editable', formatter: tb_common_funtions.formatterToggleboxRedIcon, formatterParams: {checkval:'Y'}},
];
_this.tblList = new Tabulator("#pop_draw",{
layout: "fitColumns",
height: "100%",
data: [], //기본 데이터
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
vertAlign: "middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
});
_this.tblList.on("tableBuilt", () => { //Tabulator 초기 데이터 불러오기 이벤트
_this.getMainList();
});
_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);
});
_this.tblList.on("rowDeselected", (row) => { //Tabulator cell Deslected
_this.revokeData && _this.revokeData(row);
});
['click','keypress'].forEach(evt => document.querySelector("#pop_draw_search #btnAddDraw").addEventListener(evt,()=>{_this.uploadDraw()}));
['click','keypress'].forEach(evt => document.querySelector("#pop_draw_search #btnDelDraw").addEventListener(evt,()=>{_this.rowDelete()}));
['click','keypress'].forEach(evt => document.querySelector("#pop_draw_search .btn_prim").addEventListener(evt,()=>{_this.putDraw()}));
['click','keypress'].forEach(evt => document.querySelector("#pop_draw_search .btn_close").addEventListener(evt,()=>{_this.drawModal.delete();}));
};
}
class planrouteManager {
constructor(){
let _this = this;
_this.tblList = "";
_this.ajax_url = "/order/planing/planing_ready.ajax.php";
}
init(row) {
let _this = this;
vnLoad('','/order/planing/planing_ready.pop.inc.php', '', function(loadHtml){
_this.routeModal = kuls_modal(loadHtml);
_this.initload(row);
});
}
//리스트 로드
getMainList (row) {
let _this = this;
let introw = ['ORD_QTY','SO_QTY'];
let fltrow = ['OUT_DIA','IN_DIA','THICK','WIDTH','LENGTH'];
let rowData = Object.assign({},row);
Object.keys(rowData).forEach( key => {
switch( key ){
case "SHAPE_TYPE" :
rowData[key] = varsSHAPE_TYPE[rowData[key]];
break;
case "ITEM_CD" :
rowData[key] = varsSHAPE_GRP[rowData[key]]?.Code_Exp;
break;
case "ORD_QTY":
case "SO_QTY":
rowData[key] = parseInt(rowData[key]);
break;
case "OUT_DIA":
case "IN_DIA":
case "THICK":
case "WIDTH":
case "LENGTH":
rowData[key] = currency(rowData[key], { precision: 1 });
break;
}
if( document.getElementById('pop_'+key) ) document.getElementById('pop_'+key).innerHTML = rowData[key];
} );
let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajax_url,
data: { mode: 'getRouteList', MNG_NO: rowData['MNG_NO'] },
success: function (data) {
if (data.code) {
_this.tblList.setData(data.data.map(r=>{ r['ORD_QTY'] = parseInt(r['ORD_QTY']); return r; }));
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
window.clearTimeout(talert);
_this.tblList.clearAlert();
//Tb_funcs.setFilter();
}
});
return true;
};
setFilter () {
let _this = this;
};
//Row 추가
addRow(){
let _this = this;
};
//Cell 클릭 콜백
cellClick (e, tgt){
let _this = this;
let row = tgt.getRow();
let rowData = row.getData();
//if( rowData['ORD_STATUS'] === "Y" ) return; //작업지시가 내려진 상태에서는 클릭 불가
if( varsOPSTATUS['WORK'].includes(rowData['PLN_STATUS']) ) return; //작업지시가 내려진 상태에서는 클릭 불가
switch( tgt.getField() ){
case "btn_branch": //분할
if( rowData['REL'] === "S" ){
if( rowData['_STATUS_'] === "D" ){ //STATUS 토글
row.update({_STATUS_: tgt.getData()['_OLD_STATUS_']}).then(()=>_this.callbackRowPartitial(row));
}else{
row.update({_OLD_STATUS_: tgt.getData()['_STATUS_']});
row.update({_STATUS_: "D"}).then(()=>_this.callbackRowPartitial(row));
}
}else{
let childRow = [];
let childData = {...rowData, REL:'S', _children: null, ORD_QTY:0, CT:rowData['CT'], PLN_TERM_TM:"", WO_FACLT_NO:"" };
if( rowData['_children'] ){
childRow = rowData['_children'];
childData['_STATUS_'] = 'I'; //추가 분할 값
}
childRow.push(childData);
row.update({_children: childRow});
row.treeExpand();
}
_this.callbackPatitial( _this.tblList, row );
break;
}
};
//Cell 변경 콜백
cellEditing (cell){
let _this = this;
//let per_period = 6; //10분단위
let per_period = 1; //1시간 단위
switch( cell.getField() ){
case "PLN_ST_TM":
if( !jQuery(cell.getElement()).find(".dtime_picker").length ){
jQuery(cell.getElement()).off().on('focus','input',function(e){
jQuery(e.target).datetimepicker({
allowTimes: [...Array(24*per_period).keys()].map(idx=>Math.floor(idx/per_period).toString().padStart(2,'0')+':'+(idx%per_period).toString().padEnd(2,'0')),
format: "Y-m-d H:i",
defaultTime: luxon.DateTime.now().toFormat("HH:")+Math.floor(luxon.DateTime.now().toFormat("mm")/10).toString().padEnd(2,'0'),
}).addClass("dtime_picker");
jQuery(cell.getElement())
// .on('change',function(){
// _this.setTimeCalc(cell);
// })
.before().on("click focus",function(){
jQuery(cell.getElement()).find('input').datetimepicker('show');
});
});
}
break;
}
};
//Cell 변경 콜백
cellEdited (cell){
let _this = this;
switch( cell.getField() ){
case "PLN_ST_TM":
_this.setTimeCalc(cell);
break;
case "ORD_QTY":
_this.setTimeCalc(cell);
break;
}
_this.callbackPatitial( _this.tblList );
cell.getData()._STATUS_ = cell.getData()._STATUS_||'U';
};
//등록
putPlanRoute (){
let _this = this;
let tblData = _this.tblList.getData().filter( row => row['WO_MAKE_FLG'] === 'Y' );
let scs = tblData.reduce( (chk, row) => {
if( chk && row['_children'] && row['_children'].length ){
let subSum = row['_children'].reduce( (rev, r) => rev + (r['_STATUS_']==="D"?0:r['ORD_QTY']), 0 );
if( row['ORD_QTY'] !== subSum ){
chk = false;
}
}
return chk;
}, true );
if( !scs ){
kuls_alert("작업분할된 수량이 일치하지 않습니다.");
return false;
}
let postdata = {
'mode': 'putPlanRoute',
'reqdata': JSON.stringify(tblData),
};
ajax_json({
url: _this.ajax_url,
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("적용 되었습니다.");
//닫기처리
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
setTimeCalc(cell) { //종료시간 계산
let rowData = cell.getData();
let sutime = Number(rowData['ST'])||0; //셋업시간
let dgtime = Number(rowData['CT'])||0; //단위가공시간
let pnum = Number(rowData['ORD_QTY'])||0; //수량
let pcnt = Number(rowData['OP_COUNT'])||1; //가공횟수
let termtm = dgtime*pnum*pcnt + sutime;
let fdate = luxon.DateTime.fromFormat(rowData['PLN_ST_TM'],'y-MM-dd HH:mm').plus({minutes: termtm });
if( fdate.c ) cell.getRow().update({PLN_ED_TM: fdate.toFormat('y-MM-dd HH:mm'), PLN_TERM_TM:termtm});
};
formatterExpaned( tgt, params ){ //분할 formatter
let rowData= tgt.getData();
if( rowData['REL'] === "S" ){
return "";
}else{
return "";
}
};
formatterSelect( tgt, params ){
let rowData= tgt.getData();
if( rowData['REL'] === "S" || ( !rowData['_children'] || rowData['_children'].filter( sr => sr['_STATUS_'] !== "D" ).length === 0 ) ){
return tb_common_funtions.formatterSelect( tgt, params );
}else{
return "";
}
};
formatterHiddenMVal( tgt, params ){ //값 숨김 formatter
let rowData= tgt.getData();
if( rowData['REL'] === "S" || ( !rowData['_children'] || rowData['_children'].filter( sr => sr['_STATUS_'] !== "D" ).length === 0 ) ){
if( params.func ){
return params.func(tgt, params);
}else{
return tgt.getValue();
}
}else{
return "";
}
};
formatterHiddenSVal( tgt, params ){ //값 숨김 formatter
let rowData= tgt.getData();
if( rowData['REL'] === "S" ){
return "";
}else{
if( params.func ){
return params.func(tgt, params);
}else{
return tgt.getValue();
}
}
};
formatterTotNum( tgt ){ //수량 formatter
let rowData = tgt.getData();
let childRowData = rowData['_children'] ? rowData['_children'].filter( sr => sr['_STATUS_'] !== "D" ) : [];
let theVal = rowData['ORD_QTY'];
if( rowData['REL'] !== "S" ){
let subSum = childRowData.length ? childRowData.reduce( (rev, r) => rev + r['ORD_QTY'], 0) : theVal;
if( theVal != subSum ){
tgt.getElement().classList.add('warn-cell');
}else{
tgt.getElement().classList.remove('warn-cell');
}
}
return theVal;
};
formatterRow( row ){ //Row formatter
let rowData = row.getData();
if ( rowData['_STATUS_'] === "D" ){
row.getElement().classList.add('del-row');
}else{
row.getElement().classList.remove('del-row');
}
//if( rowData['WO_MAKE_FLG'] !== 'Y' || rowData['ORD_STATUS'] === 'Y' ){
if( rowData['WO_MAKE_FLG'] !== 'Y' || varsOPSTATUS['WORK'].includes(rowData['PLN_STATUS']) ){
row.getElement().classList.add('text-secondary');
row.getElement().classList.add('bg-light');
row.selectable = false;
}
};
callbackPatitial( tbl, trow ){ //테이블 전체 수량 formmater
tbl.getRows().forEach( row => {
let rowData = row.getData();
let fld = ['FACLT_CD','PLN_ST_TM'];
if( !rowData['_children'] || rowData['_children'].filter( sr => sr['_STATUS_'] !== 'D' ).length === 0 ){
fld.forEach( tgt => row.getCell(tgt).setValue(rowData[tgt]) );
fld.forEach( tgt => row.getCell(tgt).getElement().classList.add('tabulator-editable') );
}else{
fld.forEach( tgt => row.getCell(tgt).setValue("") );
fld.forEach( tgt => row.getCell(tgt).getElement().classList.remove('tabulator-editable') );
}
row.getCell('ORD_QTY').setValue(rowData['ORD_QTY']); //수량 트리거
rowData = row.getData();
row.getCell('PLN_TERM_TM').setValue( rowData['_children'] ? rowData['_children'].filter( sr => sr['_STATUS_'] !== 'D' ).reduce((subsum,r)=>subsum+Number(r.PLN_TERM_TM),0) : rowData['PLN_TERM_TM'] ); //가공시간 트리거
} );
};
callbackRowPartitial( row ){
let rowData = row.getData();
let fld = ['FACLT_CD','PLN_ST_TM','ORD_QTY'];
if( rowData['_STATUS_'] !== "D" ){
fld.forEach( tgt => row.getCell(tgt).getElement().classList.add('tabulator-editable') );
}else{
fld.forEach( tgt => row.getCell(tgt).getElement().classList.remove('tabulator-editable') );
}
};
chkEditable( tgt ) { //수정 가능여부 체크
let rowData = tgt.getData();
//return rowData['WO_MAKE_FLG'] === 'Y' && rowData['_STATUS_'] !== "D" && rowData['ORD_STATUS'] !== "Y" && (!rowData['_children'] || rowData['_children'].filter( sr => sr['_STATUS_'] !== 'D' ).length === 0 );
return (
rowData['WO_MAKE_FLG'] === 'Y' &&
rowData['_STATUS_'] !== "D" &&
//rowData['ORD_STATUS'] !== "Y" &&
!varsOPSTATUS['WORK'].includes(rowData['PLN_STATUS']) &&
(!rowData['_children'] || rowData['_children'].filter( sr => sr['_STATUS_'] !== 'D' ).length === 0 )
);
};
chkEditable2( tgt ) { //수정 가능여부 체크2
let rowData = tgt.getData();
return (
rowData['REL'] === "S" &&
rowData['_STATUS_'] !== "D" &&
//rowData['ORD_STATUS'] !== "Y"
!varsOPSTATUS['WORK'].includes(rowData['PLN_STATUS'])
);
};
//시작 실행
initload (row) {
let _this = this;
let factlist = varsFactInfo.reduce((nval, val) => { nval[val.FACLT_CD] = val.FACLT_NM; return nval; }, {});
const fields = [
{ field: "OP_SEQ", title: "공순", width: "5%", minWidth:50, formatter: _this.formatterHiddenSVal },
{ field: "OP_CD", title: "공정명", width: "15%", minWidth:100, formatter: _this.formatterHiddenSVal, formatterParams: {values: varOPGRP.reduce( (r,v) => {
return Object.assign(r, v.OPTIONS.reduce( (rev,vo) => {
rev[vo.OP_CD]=vo.OP_NM; return rev;
}, {} ) );
}, {} ), func:tb_common_funtions.formatterSelect, },},
{ field: "FACLT_CD", title: "설비", width: "16%", minWidth:100, editor:'list', editorParams:{clearable:true, values: factlist}, formatter: _this.formatterSelect, formatterParams:{ values: factlist}, editable: _this.chkEditable, },
{ field: "PLN_ST_TM", title: "시작시간", width: "18%", minWidth:150, editor:'input', editable: _this.chkEditable, formatter: _this.formatterHiddenMVal},
{ field: "PLN_ED_TM", title: "종료시간", width: "16%", minWidth:120, visible:false, formatter: _this.formatterHiddenMVal },
{ field: "ORD_QTY", title: "수량", width: "6%", minWidth:50, editor:'number', editorParams:{min:0,}, editable: _this.chkEditable2, formatter: _this.formatterTotNum},
{ field: "ST", title: "셋업시간
(분)", width: "10%", minWidth:90, },
{ field: "CT", title: "단위가공시간
(분)", width: "12%", minWidth:90, },
//{ field: "OP_COUNT", title: "가공횟수", width: "8%", minWidth:70, },
{ field: "PLN_TERM_TM", title: "가공시간
(분)", width: "10%", minWidth:90, },
{ field: "btn_branch", title: "분할", width: "6%", minWidth:50, formatter:_this.formatterExpaned, },
];
_this.tblList = new Tabulator("#pop_plan_route",{
layout: "fitColumns",
height: "100%",
data: [], //기본 데이터
columns: fields, //컬럼 설정
dataTree:true,
dataTreeStartExpanded:true,
dataTreeElementColumn:"OP_CD",
columnDefaults: { //컬럼 공통 규칙
headerSort: false,
vertAlign: "middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
},
headerSortElement: "", //정렬 아이콘
rowFormatter: _this.formatterRow,
});
_this.tblList.on("tableBuilt", () => { //Tabulator 초기 데이터 불러오기 이벤트
_this.getMainList(row);
});
_this.tblList.on("cellClick", (e,tgt) => { //Tabulator cell Click
_this.cellClick(e,tgt);
});
_this.tblList.on("cellEdited", (cell) => { //Tabulator cell Edited
_this.cellEdited(cell);
});
_this.tblList.on("cellEditing", (cell) => { //Tabulator cell Edited
_this.cellEditing(cell);
});
['click','keypress'].forEach(evt => document.querySelector("#pop_plan_search .btn_prim").addEventListener(evt,()=>{_this.putPlanRoute()}));
['click','keypress'].forEach(evt => document.querySelector("#pop_plan_search .btn_close").addEventListener(evt,()=>{_this.routeModal.delete();}));
};
}
class conditionRemkManager {
constructor(){
let _this = this;
_this.tblList = "";
_this.ajax_url = "/order/condition/condition.ajax.php";
}
init(tcell) {
let _this = this;
vnLoad('','/order/condition/remk.pop.inc.php', '', function(loadHtml){
_this.remkModal = kuls_modal(loadHtml);
_this.initload(tcell);
});
}
//리스트 로드
getMainList (tcell) {
let _this = this;
let rowData = Object.assign({},tcell.getData());
Object.keys(rowData).forEach( key => {
if( document.getElementById('pop_'+key) ) document.getElementById('pop_'+key).innerHTML = rowData[key];
} );
let talert = window.setTimeout(function () { _this.tblList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajax_url,
data: { mode: 'getRouteList2', MNG_NO: rowData['MNG_NO'], OP_CD: rowData['OP_CD'] },
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;
};
//Cell 변경 콜백
cellEdited (cell){
let _this = this;
cell.getData()._STATUS_ = cell.getData()._STATUS_||'U';
};
//등록
putRemk ( tcell ){
let _this = this;
let tblData = _this.tblList.getData();
tcell.getRow().update({REMK:tblData[0].REMK});
_this.remkModal.delete();
// let tblData = _this.tblList.getData();
// let postdata = {
// 'mode': 'putRouteList',
// 'reqdata': JSON.stringify(tblData),
// };
// ajax_json({
// url: _this.ajax_url,
// data: postdata,
// success: function (data) {
// if (data.code) {
// kuls_success("저장되었습니다.");
// _this.remkModal.delete();
// }else{
// kuls_alert(data.mesg);
// }
// },
// error: function (request, status, error) {
// kuls_alert(error.message);
// },
// complete: function () {
// }
// });
return true;
};
//시작 실행
initload (tcell) {
let _this = this;
const fields = [
{ field: "OP_SEQ", title: "공순", width: "10%", },
{ field: "OP_CD", title: "공정명", width: "20%", 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: "REMK", title: "지시사항", width: "70%", formatter:"textarea", editor:"textarea", editorParams:{elementAttributes:{maxlength:"500",},verticalNavigation:"editor"}, hozAlign: "left", },
];
_this.tblList = new Tabulator("#pop_condition_remk",{
layout: "fitColumns",
height: "100%",
rowHeight: 450,
data: [], //기본 데이터
columns: fields, //컬럼 설정
columnDefaults: { //컬럼 공통 규칙
headerSort: false,
vertAlign: "middle",
hozAlign: "center",
resizable: "header",//Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
height: "100%",
},
headerSortElement: "", //정렬 아이콘
});
_this.tblList.on("tableBuilt", () => { //Tabulator 초기 데이터 불러오기 이벤트
_this.tblList.setData([tcell.getData()]);
//_this.getMainList(tcell);
});
_this.tblList.on("cellEdited", (cell) => { //Tabulator cell Edited
_this.cellEdited(cell);
});
['click','keypress'].forEach(evt => document.querySelector("#pop_remk_search .btn_prim").addEventListener(evt,()=>{_this.putRemk(tcell)}));
['click','keypress'].forEach(evt => document.querySelector("#pop_remk_search .btn_close").addEventListener(evt,()=>{_this.remkModal.delete();}));
};
}
document.querySelectorAll("#mtop_search input").forEach(tgt => {
tgt.addEventListener("keypress", (e)=>{
if( e.key == "Enter" ){
document.querySelector("#mtop_search button.btn_prim").dispatchEvent(new Event("click"));
}
});
});
jQuery(document).on("focus",".user-editable input",function(){jQuery(this).attr("readonly",true); jQuery(this).trigger('click')});