<script>


{*伝票種類*}
let arrTyp = {$arrTyp};
console.log(arrTyp);


{*-- ここからjsでのデータ表示用 ---------------------------------------------------*}

let detail_data=[];
let new_data={};

function setArrayData(pgno) {
  var detail = $("#detail .detail");

  for(i = 0 ; i < detail.length ; i++) {
    let $me = $(detail[i]);
    var rnum = Number($me.find(".rnum").val())-1;
    $me.find("input, select").each(function (index) {
      var inputnm = $(this).attr("name");
      if(i == 0) {
        console.log("["+rnum+"]"+inputnm+":"+common.getValue($(this)));
      }
      detail_data[rnum][inputnm] = common.getValue($(this));
    });
  }

  return true;
}

function dsp_detail(p_pgno) {
  $("#detail .detail").remove();

  var frm = $("#headerTop");
  var el = "";

  console.log(p_pgno+"/"+$("#lastpage").val());


  common.setValue(frm.find(".modelbl"), "修正");
  var ret_len = detail_data.length;
  for (var i = 0; i < ret_len; i++) { {*既存データページを表示*}
    if (Number(detail_data[i].pgno) == Number(p_pgno)) {
      el += af461x_detail.appendRow(detail_data[i]);
    }
  }

  $("#detail").append(el);

  doHeaderEnable('D');

  var detail = $("#detail .detail");

  for(i = 0 ; i < detail.length ; i++) {
    var $me = $(detail[i]);
    if($me.find(".chkval").val()=='1') {
      $me.find(".chk").prop("checked",true);
    }

    $me.find("select").each(function(index) {
      var $selectVal = $(this);
      common.setValue($selectVal,common.getValue($me.find(".memo"+$selectVal.attr("name"))));
    });

    {*今回エラーがあるのは請求書種類に関してのみなので、請求書種類に出す*}
    if(!stringUtil.isEmpty(common.getValue($me.find(".errmsg")))) {
      common.addError($me.find(".sptyp"), common.getValue($me.find(".errmsg")), null, true);
    }
  }

  //$("#detail .detail").first().find(".keycd").focus();
}


function doHeaderEnable(pmode) { {*pmode:H Header有効・D 明細有効*}
  let h = $("#headerTop");
  let h1 = h.find(".header1");
  let h2 = h.find(".header2");
  let d = $("#detailTop");
  let m = $("#funcMenu");
  let mode = h.find(".mode").val();
  if (pmode == "H") { {*Header有効*}
    h.removeClass("noevent");
    d.addClass("noevent");
{*    $(".Func2").removeClass("noevent"); *}
    $(".Func3").addClass("noevent");
    $(".Func4").addClass("noevent");
    $(".Func5").addClass("noevent");
    $(".Func7").addClass("noevent");
    $(".Func8").addClass("noevent");
    $(".Func9").addClass("noevent");
    $(".Func10").addClass("noevent");
    $(".Func12").removeClass("noevent");

    {*ヘッダー項目クリア*}
    h.find(".modelbl").removeClass("newLabel");
    {*ヘッダーフォーカス*}
    h.find(".keycd")[0].focus();
  } else {
    h.removeClass("noevent"); {*表示後ヘッダー変更可能*}
    d.removeClass("noevent");
{*   $(".Func2").addClass("noevent"); *}
    $(".Func3").removeClass("noevent");
    $(".Func4").removeClass("noevent");
    $(".Func5").removeClass("noevent");
    $(".Func7").removeClass("noevent");
    $(".Func8").removeClass("noevent");
    $(".Func9").removeClass("noevent");
    $(".Func10").removeClass("noevent");
    $(".Func12").removeClass("noevent");
    {*ヘッダーフォーカス*}
    h.find(".keycd")[0].focus();
  }
}

function clearHeader() {  {*headerクリア*}
  let frm = $("#headerTop");
  let container = frm.closest(".container");
  doHeaderEnable("H");
  common.clearInputData(container);
  {*初期値*}
  common.setValue(frm.find(".rdo_spsts"), "{$header.rdo_spsts}")
  common.setValue(frm.find(".rdo_cusekcls"), "{$header.rdo_cusekcls}")
}

var init_data={
  vlin:'1',
};

function clearDetail() {
  common.clearAllError();
  $("#detail .detail").remove(); {*明細クリア*}
  $("#lastDetail").show();
}

function setOneRow() {
  clearDetail();  {*一旦クリア*}

  {*明細に最初の一行追加*}
{*
  var el = af461x_detail.appendRow(init_data);
  $("#detail").append(el);
  var detail = $("#detail").find(".detail");
  detail.find(".datepicker").each(function (index) {
    common.setDatepickerInfo($(this));
  });
*}
}

function chgDetail(pgno) {  {*明細表表示・非表示*}
  let wpgno = "pgno" + pgno;

  dsp_detail(pgno);

  if (common.getValue($("#pagecnt")) == common.getValue($("#lastpage"))) { {*次頁なし*}
    $("#funcMenu").find(".Func8").addClass("noevent");
  } else {
    $("#funcMenu").find(".Func8").removeClass("noevent");
  }
  if (common.getValue($("#pagecnt")) == "1") { {*前頁なし*}
    $("#funcMenu").find(".Func7").addClass("noevent");
  } else {
    $("#funcMenu").find(".Func7").removeClass("noevent");
  }
}
function dspDetail() { {*データ表示*}
  let frm = $("#headerTop");
  let detail = $("#detail").find(".detail");

  clearDetail();  {*一旦クリア*}

  {*明細行配列クリア*}
  detail_data.splice(0);

  {if $header.ret == "0"}
    {*配列作成*}
    detail_data = {$dataList};

    {*行作成*}
    dsp_detail("1");

    doHeaderEnable("D")
    {*頁情報*}
    chgDetail("1");
  {else if $header.ret == "new"}
    doHeaderEnable("H")
    common.setValue($("#pagecnt"), "");
    common.setValue($("#lastpage"), "");
  {else if $header.ret == "1"}
    dsp_detail("1");
    doHeaderEnable("H");
    alert("該当データがありません。");
    {*頁情報*}
    common.setValue($("#pagecnt"), "");
    common.setValue($("#lastpage"), "");
  {else}
    doHeaderEnable("H")
    {if $hasError eq true}
      alert("{$errorMsg}")
    {/if}
  {/if}
}

{*明細行用関数*}
var af461x_detail = {
  appendRow: function (d) {
    let frm = $("#headerTop");
    let mode = common.getValue(frm.find(".mode"));
    var n = stringUtil.nvl;
    var n0 = stringUtil.nvl0;
    var row =
    ' <div class="col wp-100 detail"> ' +
    '<div class="col wp-100 rowinfo detailMain ">' +
      {*1行目*}
    '  <div class="col wp-100 "> ' +
    '    <input name="chk"  type="checkbox" class="form-control item input-sm wd-020 chk" value="1" tabindex="-1"/>' +
    '    <input type="text" class="form-control input-sm item wd-S cucd" readonly value="' + n(d.cucd) + '">' +
    '    <div class="col item wd-S    inputReadOnly">' + n(d.cuscd) + '</div> ' +
    '    <div class="col item wd-LL   inputReadOnly longnm">' + n(d.cunm) + '</div> ' +
    '    <div class="col item wd-date inputReadOnly">' + n(d.cdat) + '</div> ' +
    '    <div class="col item wd-090  inputReadOnly number">' + common.addFigure(n(d.amt)) + '</div> ' +
    '    <div class="col item wd-130  inputReadOnly">' + n(d.spri) + '</div> ' +
    '    <input type="text" class="form-control input-sm item wd-MM sptyp" readonly value="' + n(d.sptyp) + '">' +
    {* 直印刷ないので不要
    //'    <input name="cpnum" type="text" class="form-control input-sm item wd-SS cpnum required number" maxlength="1" value="' + n(d.cpnum) + '">' +
    *}
    '    <div class="col item wd-SS inputReadOnly">' + n(d.stsnm) + '</div> ' +
    '    <div class="col item wd-SS inputReadOnly">' + n(d.lchk) + '</div> ' +
    '  </div>' +
      {*非表示項目*}
    '  <input name="rnum" type="hidden" class="rnum" value="' + n(d.rnum) + '"/>' +
    '  <input name="chkval" type="hidden" class="chkval" value="' + n(d.chkval) + '"/>' +
    '  <input name="sbat" type="hidden" class="sbat" value="' + n(d.sbat) + '"/>' +
    '  <input name="cudt" type="hidden" class="cudt" value="' + n(d.cudt) + '"/>' +
    '  <input name="cusekcls" type="hidden" class="cusekcls" value="' + n(d.cusekcls) + '"/>' +
    '  <input name="sts" type="hidden" class="sts" value="' + n(d.sts) + '"/>' +
    '  <input name="typ" type="hidden" class="typ" value="' + n(d.typ) + '"/>' +
    '  <input name="pdat" type="hidden" class="pdat" value="' + n(d.pdat) + '"/>' +
    '  <input name="pamt" type="hidden" class="pamt" value="' + n(d.pamt) + '"/>' +
    '  <input name="cuedi" type="hidden" class="cuedi" value="' + n(d.cuedi) + '"/>' +
    '  <input name="errmsg" type="hidden" class="errmsg" value="' + n(d.errmsg) + '"/>' +
    '<hr>' +
    '</div>' +
    ' </div> ';


    return row;
  },
}

{*-- ここまでjsでのデータ表示用 ---------------------------------------------------*}

  function chkBeforePrint() { {*チェックがあるかどうか*}
    let detail = $("#detail .detail");
    let lcnt = 0;
    let errflg = false;
    let errpage = 1;

    if(setArrayData($("#pagecnt").val())) { {*現在ページの変更を配列に記憶*}

      var chk_array = detail_data;

      for(i = 0 ; i < detail_data.length ; i++) {
        if(detail_data[i]["chkval"] == '1') {
          lcnt = lcnt + 1;

          {*請求書種類チェック*}
          {*請求書種類がnullはnG*}
          {*出力対象行の請求書種別が、phpで取ってきた出力対象請求種類配列に含まれているかをチェックする*}
          {*(配列チェックではヒットした位置が返ってくる。ヒットしなかったら-1)*}
          if(stringUtil.isEmpty(detail_data[i]["typ"])) {
            detail_data[i]["errmsg"] = "得意先マスタにて請求書種類を設定してください。";
            if(!errflg) {
              errpage = detail_data[i]["pgno"];
            }
            errflg = true;
          } else if($.inArray(detail_data[i]["typ"], arrTyp) < 0) {
            detail_data[i]["errmsg"] = "出力対象外の請求書種類が設定されています。";
            if(!errflg) {
              errpage = detail_data[i]["pgno"];
            }
            errflg = true;
          }
        }
      }

      if (lcnt == 0) {
        alert("対象の行を選択して下さい。")
        errflg = true;
      } else if(errflg) {
        alert("エラーがあります");
        common.setValue($("#pagecnt"),errpage); {*最初は1ページ*}
        chgDetail(String(errpage));
      }
    }
    return errflg;
  }

  function doSeikyu(p_mode) { {*p_mode:pdf=プレビュー, data=ダウンロード*}
    let errflg = false;
    let w_java = "";
    let w_tblid = "";

    w_java = "AF461X";
    if(p_mode == "pdf") {
      w_java = "AF999I";
    }
    w_tblid = "AF461X";

    if (chkBeforePrint()) {  {*チェック行なし*}
      return false;
    } else if(window.confirm("【請求書発行】をします。\nよろしいですか？")) {

      var chk_array = detail_data;
      var frm = $("#headerTop");

      {* 以下確定処理 *}
      var headerData = [];
      var f = common.getInputData(frm);
      headerData.push(encodeJson(f));


      var sendData = {};
      sendData["pmode"] = p_mode;
      sendData["header"] = headerData;
      sendData["data"] = chk_array;

      common.postData(
          "./doSeikyu.php"
        , sendData
        , function (data) {
          // 特殊処理があれば
          var obj = JSON.parse(data);
          if (obj.ret == "0") {

            {*自社請求書がinsertされていたら発行する(専用請求書を考慮しておく)*}
            if(Number(obj.cnt_01) + Number(obj.cnt_02) > 0) {
              let param2 = { "method": "GetWseqMjan" };
              let prt = common.getValue(frm.find(".prt"));


              $.ajax({
                type: "GET",
                url: "../../api/getWseq.php",
                data: param2,
                dataType: "json",
                scriptCharset: 'utf-8',
                success: function(data, status, xhr) {
                  var wurl = "{$_REPORT_URL}" + w_java + "?WSEQ=" + JSON.parse(data.data)
                          + "&IREP=" + w_tblid
                          + "&CHGCD=" + "{$_SYSTEM_NAME_EN_CHGCD}"
                          + "&KTKTCD=" + "{$_SYSTEM_NAME_EN_LGKTKTCD}"
                          + "&VEND=" + "{$_SYSTEM_NAME_EN_VEND}"
                          + "&ACCD=" + "{$_SYSTEM_NAME_EN_ACCD}"
                          + "&DBNO=" + "{$_SYSTEM_NO}"
                          + "&JOKEN1=" + obj.wseq
                          + "&JOKEN2=" + p_mode;
                  if (p_mode == "pdf") {
                    wurl = wurl + '&PDF=1';
                  } else if (p_mode == "data") {
                    wurl = wurl + '&PDF=2';
                  }
                  window.open(wurl, w_tblid+JSON.parse(data.data));
                }
              });
            }


          } else {
            alert(obj.msg);
          }
        }
        , function (error) {
          alert(error.msg);
        }
      );
    }
  }

  function doCSV(cls) {
    if(setArrayData($("#pagecnt").val())) { {*現在ページの変更を配列に記憶*}

      var chk_array = detail_data;
      var cucd = "";
      var cuscd = "";
      var sbat = "";

      if(cls == '1') {
        wmsg = "請求書伝票CSV";
      } else {
        wmsg = "請求書明細CSV";
      }

      var lcnt = 0;
      for(i = 0 ; i < detail_data.length ; i++) {
        if(detail_data[i]["chkval"] == '1') {
          lcnt = lcnt + 1;

          cucd  = stringUtil.nvl(detail_data[i]["cucd"]);
          cuscd = stringUtil.nvl(detail_data[i]["cuscd"]);
          sbat  = stringUtil.nvl(detail_data[i]["sbat"]);
        }
      }

      if (lcnt == 0) {
        alert("出力対象を選択して下さい。")
      } else if(lcnt > 1) {
        alert("CSV出力は1件で指定してください。")
      } else if(window.confirm("【"+wmsg+"】を出力します。\nよろしいですか？")) {
        let param2 = { "method": "GetWseqMjan" };
        let csvid = "AF461C";

        $.ajax({
          type: "GET",
          url: "../../api/getWseq.php",
          data: param2,
          dataType: "json",
          scriptCharset: 'utf-8',
          success: function(data, status, xhr) {
            var wurl = "{$_REPORT_URL}" + "AF999C?WSEQ=" + JSON.parse(data.data)
                    + "&CSVID=" + csvid + cls
                    + "&CHGCD=" + "{$_SYSTEM_NAME_EN_CHGCD}"
                    + "&KTKTCD=" + "{$_SYSTEM_NAME_EN_LGKTKTCD}"
                    + "&VEND=" + "{$_SYSTEM_NAME_EN_VEND}"
                    + "&ACCD=" + "{$_SYSTEM_NAME_EN_ACCD}"
                    + "&DBNO=" + "{$_SYSTEM_NO}"
                    + "&JOKEN1=" + cucd
                    + "&JOKEN2=" + cuscd
                    + "&JOKEN10=" + sbat;
            window.open(wurl, csvid+JSON.parse(data.data));
          }
        });

      }
    }
  }


  $(document).ready(function(){
    /* 明細 高さ 自動設定
    //===================================================================*/
    common.setDetailHeight( $("#detail") );

    common.removeLoading();
    dspDetail();  {*明細表示*}

    /* イベント
    //===================================================================*/
    //　F1
    $(document).on("click", ".Func1:not('.noevent')", function(e) {
    });
    //　F2
    $(document).on("click", ".Func2:not('.noevent')", function(e) {
      $(".btn-search-before").trigger("click");
    });
    //　F3
    $(document).on("click", ".Func3:not('.noevent')", function(e) {
      doCSV('1');
    });
    //　F4 PDF
    $(document).on("click", ".Func4:not('.noevent')", function(e) {
      doCSV('2');
    });
    //　F5 クリア
    $(document).on("click", ".Func5:not('.noevent')", function(e) {
      setOneRow();
      clearHeader();
    });
    //　F6
    $(document).on("click", ".Func6:not('.noevent')", function(e) {
    });
    //　F7 前頁
    $(document).on("click", ".Func7:not('.noevent')", function(e) {
      if(setArrayData($("#pagecnt").val())) { {*現在ページの変更を配列に記憶*}
        let pgcnt = 0;
        if (stringUtil.isEmpty(common.getValue($("#pagecnt")))) {
          pgcnt = 1;
        } else {
          pgcnt = Number(common.getValue($("#pagecnt"))) - 1;
        }
        common.setValue($("#pagecnt"),pgcnt); {*最初は1ページ*}
        chgDetail(String(pgcnt));
      } else {
        alert("エラーがあります");
      }
    });
    //　F8 次頁
    $(document).on("click", ".Func8:not('.noevent')", function(e) {
      if(setArrayData($("#pagecnt").val())) { {*現在ページの変更を配列に記憶*}
        let pgcnt = 0;
        if (stringUtil.isEmpty(common.getValue($("#pagecnt")))) {
          pgcnt = 1;
        } else {
          pgcnt = Number(common.getValue($("#pagecnt"))) + 1;
        }
        common.setValue($("#pagecnt"),pgcnt); //最初は1ページ
        chgDetail(String(pgcnt));
      } else {
        alert("エラーがあります");
      }
    });
    //　F9 請求書
    $(document).on("click", ".Func9:not('.noevent')", function(e) {
      doSeikyu("data");
    });
    //　F10
    $(document).on("click", ".Func10:not('.noevent')", function(e) {
      doSeikyu("pdf");
    });
    //　F11
    $(document).on("click", ".Func11:not('.noevent')", function(e) {
    });
    //　F12 メニュー/戻る
    $(document).on("click", ".Func12:not('.noevent')", function(e) {
      $('.btn-close').trigger('click');
    });

    //画面初期表示時動作

    //MENUボタン===============================
    $(document).on("click", ".btn-search-before", function(e) {
      $(".Func2").addClass("noevent");

      var errflg = false;
      var frmh = $(this).closest(".contents").find(".header");
      common.clearFormError(frmh);

      frmh.find(".required").each(function (index) {
        var el = $(this);
        wprompt="必須です";
        // 必須チェック
        if(stringUtil.isEmpty(el.val())) {
          common.addError(el, wprompt, null, true);
          errflg = true;
        }
      });

      if (errflg) {
        $(".Func2").removeClass("noevent");
        alert('エラーがあります');
      } else {
//        dspDetail();
        common.dispLoading();
        $("#pagecnt").val("1");
        $(".btn-search").trigger("click");
      }
    });

    $(document).on("focus", ".header .dummy", function(e) {
      $("#topmenu").find(".Func2").focus();
    });

    $(document).on("change", ".header .cudt", function(e) {
      let $me = $(this);
      let w_cudt = common.getValue($me);
      if (stringUtil.isEmpty(w_cudt)) {
        return false;
      } else {
        var sendData = {};
        sendData["cudt"] = w_cudt;
        common.postData(
            "./getCdat.php"
          , sendData
          , function (data) {
            common.setValue($("#headerTop").find(".cdat"), data.cdat);
          }
          , function (error) {
            alert(error.msg);
          }
        );

      }
    });

    //====明細行動作======
    {*選択動作 チェックをchkvalに覚える*}
    $(document).on("change", ".chk", function(e) {
      var me = $(this);
      var detail = me.closest(".detail");

      var chkval;
      if(me.prop("checked")) {
        chkval = '1';
      } else {
        chkval = '0';
      }
      common.setValue(detail.find(".chkval"),chkval);

      {*ついでにエラーメッセージを消す*}
      common.setValue(detail.find(".errmsg"),"");
      common.clearFormError(detail);
    });

    {*全選択・全解除ボタン動作------------------------------*}
    $(document).on("click","#putChk, #putChk2",function(e){
      var detail = $("#detail .detail");
      detail.each(function(e){ {*表示データの更新*}
        var div = $(this);
        var ckflg = div.find(".chk");
        var chkval = div.find(".chkval");
        ckflg.prop("checked",true);
        chkval.val("1");
      });

      if ($(this).attr('id') == "putChk") { {*全選択*}
        var ret_len = detail_data.length;
        for (var i = 0; i < ret_len; i++) { {*配列データも更新*}
          detail_data[i]["chkval"] = '1';
        }
      }
    });
    $(document).on("click","#removeChk, #removeChk2",function(e){
      var detail = $("#detail .detail");
      detail.each(function(e){ {*表示データの更新*}
        var div = $(this);
        var ckflg = div.find(".chk");
        var chkval = div.find(".chkval");
        ckflg.prop("checked", false);
        chkval.val("0");
      });

      if ($(this).attr('id') == "removeChk") { {*全解除*}
        var ret_len = detail_data.length;
        for (var i = 0; i < ret_len; i++) { {*配列データも更新*}
          detail_data[i]["chkval"] = '0';
        }
      }
    });
    {*全選択・全解除ボタン動作------------------------------*}


  });

</script>
