/*
 * @Overview 생산오더미결현황
 * @History 2024-07-09 / 이원기 / 최초작성
 */

class Tb_sts_order_pend_class {
  constructor(container) {
    let _this = this;
    _this.ajaxUrl = "./sts_order_pend.ajax.php";
    this.isEdited = false;
    _this.tbList = "";
    _this.BP_NM  ="";
    _this.USEFLAG  = "";

    this.container = document.querySelector(container);
    this.table = this.container.querySelector(".hy-table");
    this.upBtn = this.container.querySelector(".up-btn") || "";
    this.downBtn = this.container.querySelector(".down-btn") || "";
    this.addBtn = this.container.querySelector(".add-btn");
    this.removeBtn = this.container.querySelector(".remove-btn");


  }

  /*
   * @Overview 데이터 세팅 함수
   * @Parameter 없음
   */
  getMainList(mode, ...test) {
    const talert = window.setTimeout(() => {
      this.tbList.alert("Loading ...");
    }, 1000);
    let arr = test;
    let data = new Object();
    for (let i = 0; i < arr.length; i++) {
      let temp = [arr[i]];
      if (document.getElementById(arr[i])?.type !== "checkbox") {
        data[temp] = document.getElementById(temp)?.value;
      } else {
        data[temp] = document.getElementById(temp)?.checked ? "Y" : "N";
      }
    }
    data.mode = mode;
    ajax_json({
      url: this.ajaxUrl,
      data: data,

      success: (data) => {
        if (data.code) {
          this.tbList.setData(data.data);
        } else {
          kuls_alert(data.mesg);
        }
      },
      error: (req, status, err) => {
        kuls_alert(err.message);
      },
      complete: () => {
        window.clearTimeout(talert);
        // this.now = this.getNow();
      },
    });
    return true;
  }


  /*
   * @Overview 테이블 행 선택 함수
   * @Parameter 없음
   * @function 선택된 모든 행 색 변경
   */
  rowClick(e, tgt) {
    let _this = this;
    if (tgt.isSelected()) {
      tgt.deselect();
      _this.clearRemove(tgt);
    } else {
      tgt.select();
    }
  }

  /*
   * @Overview cell 클릭 함수
   * @Parameter 클릭한 cell
   * @Function 클릭한 cell의 filed 값에 따라 토글 상태 변경 또는 팝업
   */
  cellClick(e, tgt) {
    switch (tgt.getField()) {
    
      case "check":
        tgt.setValue(tgt.getValue() == "Y" ? "" : "Y");
        this.clearRemove(tgt.getRow())
        break;
    }
  }

  excelDataLoad(table_block, title) {
    let _this = this;
    let filename = title + "_"+luxon.DateTime.now().toFormat('yyyyMMdd')+".xlsx";
    console.log(table_block);
    if(_this.tbList.getSelectedData().length ===0){
      tb_common_funtions.tabu2xls(table_block, filename, title, _this.tbList.getData('active').map( row => {
        return row;
      }))
    }else{
      tb_common_funtions.tabu2xls(table_block, filename, title, _this.tbList.getSelectedData('active').map( row => {
        return row;
      }))
    }

  };




  /*
   * @Overview 최초 실행 함수
   * @Parameter 없음
   */
  init() {
    let _this = this;
    let timerow = Array.from(Array(24))
        .map((a, i) => i.toString().padStart(2, "0"))
        .reduce((timerow, time) => {
          return timerow.concat(
              Array.from(Array(60 / 30)).map(
                  (a, i) => time + ":" + (30 * i).toString().padStart(2, "0")
              )
          );
        }, []);
    let currow = Object.keys(varsCurrency).reduce((param, key) => {
      param[key] = `${key} (${varsCurrency[key]})`;
      return param;
    }, {});

    // field 정의
    const fields = [
      // { field:"check", title: "선택", width: 50, headerSort: false,
      //   formatter: tb_common_funtions.formatterCheckboxIcon,
      //   formatterParams: { checkval: "Y" },
      // },
      { formatter: "rownum", title: "No", width: '5%' },
      {
        field: "WO_NO",
        title: "생산오더",
        width: '10%',
      },
      {
        field: "ORD_DT",
        title: "릴리즈일",
        width: '5%',

      },
      {
        field: "REQ_DT",
        title: "만기일",
        width: '5%',
      },
      {
        field: "ITEM_GRP",
        title: "MES품목그룹",
        width: '8%',
      },
      { field: "ITEM_CD", title: "제품번호", width: '10%',hozAlign:"left",},
      { field: "ITEM_NM", title: "제품내역", width: '20%',hozAlign:"left" },
      {
        field: "ORD_QTY",
        title: "계획수량",
        width: '5%',
      },
      {
        field: "FIN_QTY",
        title: "완료수량",
        width: '5%',
      },
      {
        field: "DEF_QTY",
        title: "불량수량",
        width: '5%',

      },
      {
        field: "LFT_QTY",
        title: "미결수량",
        width: '5%',

      },
      {
        field: "OP_LFT",
        title: "남아있는 공정",
        width: '15%',

      },
    ];

    const commonFieldData = {
      headerSort: true,
      vertAlign: "middle",
      hozAlign: "center",
      resizable: "header", //Resize 는 헤더에서만 가능
      headerHozAlign: "center", //헤더 정렬
      headerSortTristate: true, //데이터 정렬 => 정/역/초기화

    };

    /*
     * @Overview tabulator 객체 생성
     * @Parameter 생성 위치(html class값)
     */
    _this.tbList = new Tabulator(this.table, {
      layout: "fitColumns",
      height: "100%",
      data: [], //기본 데이터
      columns: fields, //컬럼 설정
      columnDefaults: commonFieldData,
      headerSortElement: "<i class='bi'></i>", //정렬 아이콘
      validationMode:"highlight",
    });

    /*
     * @Overview 테이블 만들어지면 데이터 불러오기
     * @Parameter 없음
     */
    _this.tbList.on("tableBuilt", () => {
      _this.getMainList("getMainList");
    });

    /*
     * @Overview cell 클릭시 체크 또는 팝업
     * @Parameter 이벤트, 셀
     */
    _this.tbList.on("cellClick", (e, tgt) => {
      _this.cellClick && _this.cellClick(e, tgt);
    });
    // 엑셀 데이터 다운로드
    ["click", "keypress"].forEach((evt) => {
      const down = document.querySelector("#excel_data");
      down.addEventListener(evt, () => {
        this.excelDataLoad(_this.tbList,'생산오더 미결 현황');
      });
    })


        // 조회
        ["click", "keypress"].forEach((evt) => {
      const filterBtn = document.querySelector("#filter_btn");
      filterBtn.addEventListener(evt, () => {
        _this.getMainList("getMainList");
      });
    });
  }
}

const Tb_sts_order_pend = new Tb_sts_order_pend_class("#pend_table");
Tb_sts_order_pend.init();
