<script>

{*-- ここからjsでのデータ表示用 ---------------------------------------------------*}
function doHeaderEnable(pmode) { {*pmode:H Header有効・D 明細有効*}
  let h = $("#headerTop");
  let d = $("#detailTop");
  let m = $("#funcMenu");
  let h1 = h.find(".header1");
  let h2 = h.find(".header2");
  if (pmode == "H") { {*Header有効*}
    h1.removeClass("noevent");
    h2.addClass("noevent");
    d.addClass("noevent");
    $(".Func2").removeClass("noevent");
    $(".Func3").addClass("noevent");
    $(".Func4").addClass("noevent");
    $(".Func5").addClass("noevent");
    $(".Func9").addClass("noevent");
    $(".Func12").removeClass("noevent");
    {*右上モード表示*}
    h.find(".newLabel").hide();

    h.find(".vseq")[0].focus();
  } else {
    h1.addClass("noevent");
    h2.removeClass("noevent");
    d.removeClass("noevent");
    $(".Func2").addClass("noevent");
    $(".Func3").removeClass("noevent");
    $(".Func4").removeClass("noevent");
    $(".Func5").removeClass("noevent");
    $(".Func9").removeClass("noevent");
    $(".Func12").removeClass("noevent");

    h.find(".adat").focus();
  }
}

function clearHeader() {  {*headerクリア*}
  let frm = $("#headerTop");
  let container = frm.closest(".container");
  doHeaderEnable("H");
  common.clearInputData(container);
  frm.find(".newLabel").hide();

}

function clearDetail() {
  common.clearAllError();

  $("#detail .detail").remove(); {*明細クリア*}
}

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

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

}


function dspDetail() { {*データ表示*}
  let frm = $("#headerTop");
  var detail = $("#detail").find(".detail");
  var footer = $("#footer_content");

  clearDetail();  {*一旦クリア*}
  var el = "";

  var container = $(".container");
  sendData = {};
  sendData = common.getContainerInputData(container);

  common.dispLoading2();
  common.postData(
    "./search.php"
    , sendData
    , function name(data) {
      var d = JSON.parse(data);
      if(d.ret != "-9") {
        common.dspDetailData(d.ret_header,frm);

        if(d.cnt == "0") {
          setLblCutax("NEW");
          {*新規モード*}
          setOneRow();
          doHeaderEnable("D");

          calcSum("amt");
        } else {
          setLblCutax("UPD");
          {*行作成*}
          d.ret_array.forEach((item, i) => {

            if(i == 0) {
              common.setValue(frm.find(".viseq"),item.viseq);
              common.setValue(frm.find(".adat"),item.adat);
              common.setValue(frm.find(".orgadat"),item.adat);
              common.setValue(footer.find(".chgcdnm"),item.chgcdnm);
              common.setValue(footer.find(".idat"),item.idat);
              common.setValue(footer.find(".upchgnm"),item.upchgnm);
              common.setValue(footer.find(".udat"),item.udat);
            }

            el += af271x_detail.appendRow(item);
          });
          $("#detail").append(el);

          var detail = $("#detail .detail");
          for(i = 0 ; i  < detail.length ; i++) {
            let $me = $(detail[i]);

            $me.find(".datepicker").each(function (index) {
              common.setDatepickerInfo($(this));
            });

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

          }
          calcSum("amt");
          doHeaderEnable("D");
        }
      } else {
        setOneRow();
        alert("データ取得に失敗しました。");
        doHeaderEnable("H");
      }
      common.removeLoading2();
    }, function name(params) {
      alert(params.msg);
      common.removeLoading2();
    }
  )
}

{*明細行用関数*}
var af271x_detail = {
  appendRow: function (d) {
    var n = stringUtil.nvl;
    var row =
    ' <div class="col wp-100 detail"> ' +
    '<div class="col wp-100 rowinfo detailMain janGrp">' +
    '  <div class="col wp-100 date"> ' +
    '    <input name="vlin" type="text" class="form-control input-sm item wd-kbn vlin" readonly value="' + n(d.vlin) + '"> '+
    '    <input name="tcls" type="text" class="form-control input-sm item wd-SS tcls" maxlength="2" value="' + n(d.tcls) + '"> '+
    '    <input name="tclsnm" type="text" class="form-control input-sm item wd-M tclsnm" readonly value="' + n(d.tclsnm) + '"> '+
    '    <input name="amt" type="text" class="form-control input-sm item wd-M amt number" maxlength="11" value="' + common.addFigure(n(d.amt)) + '"> '+
    '    <input name="tcls2" type="text" class="form-control input-sm item wd-SS tcls2" maxlength="40" value="' + n(d.tcls2) + '"> '+
    '    <input name="txt2" type="text" class="form-control input-sm item wd-L txt2" maxlength="40" value="' + n(d.txt2) + '"> '+
    '    <input name="chkLineDel"  type="checkbox" class="form-control item input-sm wd-kbn chkLineDel" value="1" tabindex="-1"/>' +
    '    <div class="col in-required"></div>' +
    '  </div>' +
    '  <input name="iseq30" type="hidden" class="iseq30 keyItem forDeleteData" value="' + n(d.iseq30) + '"> '+
    '  <input name="orgvlin" type="hidden" class="orgvlin" value="' + n(d.orgvlin) + '"> '+
    '  <input name="orgtcls" type="hidden" class="orgtcls" value="' + n(d.orgtcls) + '"> '+
    '  <input name="orgtxt2" type="hidden" class="orgtxt2" value="' + n(d.orgtxt2) + '"> '+
    '  <input name="orgamt" type="hidden" class="orgamt" value="' + n(d.orgamt) + '"> '+
    '</div>' +
    '<hr>' +
    ' </div> ';
    return row;
  },
}


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


  function setNewLineData($me) {
    let detail = $me.closest(".contents").find(".detail.selectRow");

    detail.find(".popbtn").each(function (index) {
      common.setValue($(this),"?");
    });
    detail.find(".datepicker").each(function (index) {
      common.setDatepickerInfo($(this));
    });

    detail.find(".tcls").focus();

  }

  function setLblCutax( p_mode) { {* p_mode:NEW/UPD*}
    let frm = $("#headerTop");
    if (p_mode == "NEW") {
      common.setValue(frm.find(".newLabel"), "新規");
    } else {
      common.setValue(frm.find(".newLabel"), "修正");
    }
    frm.find(".newLabel").show();

  }

  {*合計の計算 引数は要素の名前(ex. amt)*}
  function calcSum(el_name) {
    let frmh = $("#headerTop");
    let detail = $("#detail .detail");
    let footer = $("#footer_content");
    let sum_amt = new BigNumber(0);
    for (var i = 0; i < detail.length; i++) {
      $me = $(detail[i]);
      if(!$me.find(".chkLineDel").prop("checked")) {
        var wamt = new BigNumber(stringUtil.nvl0(common.delFigure(common.getValue($me.find("."+el_name))),"0"));
        sum_amt = sum_amt.plus(wamt);
      }
    }
    common.setValue($("#sum_"+el_name), common.addFigure(sum_amt));
  }

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

    /* イベント
    //===================================================================*/
    //　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) {
      $(".btn-del").trigger("click");
      calcSum("amt")
    });
    //　F4 行挿入
    $(document).on("click", ".Func4:not('.noevent')", function(e) {
      //$("#lastDetail").focus();
      $(".btnLineIns").trigger("click");
    });
    //　F5 クリア
    $(document).on("click", ".Func5:not('.noevent')", function(e) {
      setOneRow();
      clearHeader();
      doHeaderEnable("H");
    });
    //　F6
    $(document).on("click", ".Func6:not('.noevent')", function(e) {
    });
    //　F7
    $(document).on("click", ".Func7:not('.noevent')", function(e) {
    });
    //　F8
    $(document).on("click", ".Func8:not('.noevent')", function(e) {
    });
    //　F9 登録/実行
    $(document).on("click", ".Func9:not('.noevent')", function(e) {
      $(".btn-reg-before").trigger("click");
    });
    //　F10 Excel
    $(document).on("click", ".Func10:not('.noevent')", function(e) {
    });
    //　F11 表示
    $(document).on("click", ".Func11:not('.noevent')", function(e) {
    });
    //　F12 メニュー/戻る
    $(document).on("click", ".Func12:not('.noevent')", function(e) {
      $('.btn-close').trigger('click');
    });

    //画面初期表示時動作
    setOneRow(); {*最初に一行出したい*}
    doHeaderEnable("H");


    //MENUボタン===============================
    $(document).on("regSuccess", ".btn-reg", function(e,option){
      let w_msg = "登録しました。\n";
      w_msg = w_msg + "伝票番号は【"　+　option.vseq + "】です。\n"
      alert(w_msg);

      setOneRow();
      clearHeader();
      doHeaderEnable("H");
    });

    $(document).on("click", ".btn-search-before", function(e) {

      var errflg = false;
      var frmh = $("#headerTop").find(".header1");
      common.clearFormError(frmh);

      frmh.find(".required").each(function (index) {
        if (stringUtil.isEmpty(common.getValue($(this)))) {
          common.addError($(this), "入力して下さい", null, true);
          errflg = true;
        }
      });

      if (errflg) {
        alert('エラーがあります');
      } else {
        {*伝票入力ありのときは、複数ないか検索。複数ある場合には選択画面を表示する*}
        if(!stringUtil.isEmpty(frmh.find(".vseq").val()) && stringUtil.isEmpty(frmh.find(".viseq").val())) {
          var sendData = {};
          sendData["mcd"]  = common.getValue(frmh.find(".mcd"));
          sendData["vseq"]  = common.getValue(frmh.find(".vseq"));

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

              $(".Func2").removeClass("noevent");

              if(ret == '0') {
                if(obj.cnt == '0' || obj.cnt == '1') {
                  if(obj.cnt == '1') {
                    common.setValue($("#headerTop").find(".viseq"),obj.viseq); {*伝票ある場合だけ、埋める*}
                  }
                  $(".Func2").addClass("noevent");
                  dspDetail(); //そのまま表示
                } else {
                  {*複数伝票有*}
                  common.setValue(frmh.find(".vseq271"),common.getValue(frmh.find(".vseq")));
                  $(".Func2").removeClass("noevent");
                  $(".cmdAf271x1").trigger("click");
                }
              } else {
                alert(obj.msg);
              }
            }
            , function (error) {
              alert(error.msg);
            }
          );
        } else {
          $(".Func2").addClass("noevent");
          dspDetail();
        }

      }

    });


    $(document).on("click", ".btn-reg-before", function(e) {
      var detail = $("#detail .detail");
      var frmh = $(this).closest(".contents").find(".header");
      var errflg = false;
      var taxerr = false;
      var cnt = 0;
      var wtax;
      common.clearFormError($(this).closest(".contents"));

      frmh.find(".required").each(function (index) {
        if (stringUtil.isEmpty(common.getValue($(this)))) {
          errflg = true;
          common.addError($(this), "入力して下さい", null, true);
        }
      });


      detail.each(function(e){
        var $me = $(this);

        {*amtがnullのデータはinsertしないので、チェックもしない*}
        if(!stringUtil.isEmpty(common.getValue($me.find(".amt"))) || !stringUtil.isEmpty(common.getValue($me.find(".tcls")))) {
          cnt = cnt + 1;
          if(!$me.find(".chkLineDel").prop("checked")) { {*削除データはﾁｪｯｸから除外する*}
            {*該当データの件数カウント*}
            if (stringUtil.isEmpty($me.find(".amt").val())) {
              errflg = true;
              common.addError($me.find(".amt"), "入力して下さい", null, true);
            } else {
              {*0以上*}
              var wamt = new BigNumber(stringUtil.nvl0(common.delFigure(common.getValue($me.find(".amt"))),"0"));
              if(wamt.eq(0)) {
                errflg = true;
                common.addError($me.find(".amt"), "０以外を入力して下さい", null, true);
              }
            }

            if (stringUtil.isEmpty($me.find(".tcls").val())) {
              errflg = true;
              common.addError($me.find(".tcls"), "入力して下さい", null, true);
            }

          }
        }
      });

      if(errflg) {
        alert("エラーがあります");
      } else if(cnt == 0) {
        alert("登録データがありません");
      } else {
        var container = $(".container");
        sendData = {};
        sendData = common.getContainerInputData(container);

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

            if(ret == '0') {
              $(".headermenu").find(".btn-reg").trigger("click");
            } else if(ret == '-1') {
              if (obj.ret1 != "0") {
                common.addError(frmh.find(".adat"), "支払日が不正です。", null, true);
              }
              alert("エラーがあります");
            } else {
              alert("登録前チェックに失敗しました");
            }
            $(".Func9").removeClass("noevent");
          }
          , function (error) {
            alert(error.msg);
            $(".Func9").removeClass("noevent");
          }
        );
      }

    });

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

    {*伝票検索で伝票を選択したら、そのまま表示*}
    $(document).on("afterSelectaf271x1", ".vseq", function(e) {
      $("#topmenu").find(".Func2").trigger("click");
    });

    //=== header ===

    //=== body ===
    {*合計金額を計算しなおす*}
    $(document).on("change", ".amt", function(e) {
      calcSum("amt");
    });
    $(document).on("change", ".chkLineDel", function(e) {
      calcSum("amt");
    });

    {*伝票区分チェック+名称取得*}
    {*chklisttclsには画面に表示しているものと同じ物が入る*}
    let chklisttcls = [];
    chklisttcls = {$chklisttcls};
    $(document).on("change", ".tcls", function(e) {
      var $me = $(this);
      var me = $me.val();
      var detail = $me.closest(".detail");

      common.setValue(detail.find(".tclsnm"),"");

      var elm = "";
      elm = chklisttcls.find(function(value) {
        return value.cd == me
      });


      if(elm == null) {
        common.addError($me, "登録の無い支払区分です。", null, true);
        alert("登録の無い支払区分です。\n(右の一覧から入力して下さい。)");
        common.setValue($me, "");
      } else {
        common.setValue(detail.find(".tclsnm"),elm.nm);
      }
    });

    {*伝票区分チェック+名称取得*}
    {*chklisttcls2には画面に表示しているものと同じ物が入る*}
    let chklisttcls2 = [];
    chklisttcls2 = {$chklisttcls2};
    $(document).on("change", ".tcls2", function(e) {
      var $me = $(this);
      var me = $me.val();
      var detail = $me.closest(".detail");

      var elm = "";
      elm = chklisttcls2.find(function(value) {
        return value.cd == me
      });

      if(elm == null) {
        common.addError($me, "登録の無い備考区分です。", null, true);
        alert("登録の無い備考区分です。\n(右の一覧から入力して下さい。)");
        common.setValue($me, "");
      } else {
        common.setValue(detail.find(".txt2"),elm.nm);
      }
    });


    //====明細行動作======
    $(document).on("insertLine", ".selectRow", function(e) {
      setNewLineData($(this));
    });
    $("#lastDetail").focus(function(){
      var details = $("#detailTop .detail:last")[0];
      if(!!!details){
        return true;
      }

      var newRow = commonLine.insertDetail(details);
      common.setDetailHeight();
      $(newRow).find(":enabled")[0].focus();
      $(window).scrollTop($(newRow).parent().offset().top);
      setNewLineData($(newRow));
    });


    //=== footer ===


  });

</script>
