<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");
    $(".Func5").addClass("noevent");
    $(".Func6").addClass("noevent");
    $(".Func9").addClass("noevent");

    {*ヘッダー項目クリア*}
    h.find(".keycd").focus();
    h.find(".modelbl").removeClass("newLabel");

  } else {
    h1.addClass("noevent");
    h2.removeClass("noevent");
    d.removeClass("noevent");
    $(".Func2").addClass("noevent");
    $(".Func3").removeClass("noevent");
    $(".Func5").removeClass("noevent");
    $(".Func6").removeClass("noevent");
    $(".Func9").removeClass("noevent");
    {*データ部フォーカス*}
    h2.find(".spktcd1").focus();
    h.find(".modelbl").addClass("newLabel");
  }
}

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

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

function clearHeader() {  {*headerクリア*}
  let frm = $("#headerTop");
  let container = frm.closest(".container");
  $("#bank").hide();

  doHeaderEnable("H");
  common.clearInputData(container);
}

function setOneRow() {
  clearDetail();  {*一旦クリア*}
  {*明細に最初の一行追加*}
  var el = af251x_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");
  let detail = $("#detail").find(".detail");

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

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

  common.postData(
    "./search.php"
    , sendData
    , function name(data) {
      var d = JSON.parse(data);
      if (d.ret == "0") {
        {*行作成*}

        common.setValue(frm.find(".spktcd1"),d.ret_header.spktcd1);
        common.setValue(frm.find(".spktnm1"),d.ret_header.spktnm1);
        common.setValue(frm.find(".spktcd2"),d.ret_header.spktcd2);
        common.setValue(frm.find(".spktnm2"),d.ret_header.spktnm2);

        common.setValue(frm.find(".climit"),d.ret_header.climit);
        common.setValue(frm.find(".com"),d.ret_header.com);
        common.setValue(frm.find(".orgclimit"),d.ret_header.climit);
        common.setValue(frm.find(".orgcom"),d.ret_header.com);

        common.setValue($("#chgcdnm"),d.ret_header.chgcdnm);
        common.setValue($("#idat"),d.ret_header.idat);
        common.setValue($("#upchgnm"),d.ret_header.upchgnm);
        common.setValue($("#udat"),d.ret_header.udat);
        common.setValue($("#sum_mvpno"),d.ret_header.smvpno);

        if(d.cnt != "0") {
          d.ret_array.forEach((item, i) => {
            el += af251x_detail.appendRow(item);
          });
          $("#detail").append(el);

          common.setValue(frm.find(".modelbl"), "修正");
        } else {
          setOneRow();
          common.setValue(frm.find(".modelbl"), "新規");
        }

        doHeaderEnable("D");

      }
    }, function name(params) {
      alert(params.msg);
    }
  )
}
{*明細行用関数*}
var af251x_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"> ' +
    {*1行目*}
    '    <div class="col wp-100 "> ' +
    '      <input name="vlin" type="text" class="form-control input-sm item wd-kbn vlin" readonly value="' + n(d.vlin) + '"> '+
    '      <input name="jan" type="text" class="form-control input-sm item wd-jan jan eventjan popJan inpjan" maxlength="13" value="' + n(d.jan) + '"> '+
    '      <input type="button" class="col popbtn cmdJan noclear" tabindex="-1" value="?"/> '+
    '      <input name="gdcls9nm" type="text" class="form-control input-sm item wd-kbn gdcls9nm center" readonly value="' + n(d.gdcls9nm) + '"> '+
    '      <input name="gdjnm" type="text" class="form-control input-sm item wd-LL gdjnm" readonly value="' + n(d.gdjnm) + '"> '+
    '      <input name="gdcnum" type="text" class="form-control input-sm item wd-number gdcnum number" readonly value="' + common.addFigure(n(d.gdcnum)) + '"> '+
    '      <input name="psum" type="text" class="form-control input-sm item wd-number psum number" readonly value="' + common.addFigure(n(d.psum)) + '"> '+
    '      <input name="mvpno" type="text" class="form-control input-sm item wd-number mvpno number" maxlength="5" value="' + common.addFigure(n(d.mvpno)) + '"> '+
    '      <input name="chkLineDel"  type="checkbox" class="form-control item input-sm wd-kbn chkLineDel" value="1" tabindex="-1"/>' +
    '    </div>' +
    {*2行目*}
    '    <div class="col wp-100 "> ' +
    '      <div class="col" style="width:200px;">&nbsp;</div> '+
    '      <input name="gdjstnd" type="text" class="form-control input-sm item wd-LL gdjstnd" readonly value="' + n(d.gdjstnd) + '"> '+
    '      <input name="gdbnum" type="text" class="form-control input-sm item wd-number gdbnum number" readonly value="' + common.addFigure(n(d.gdbnum)) + '"> '+
    '    </div>' +
    {*非表示項目*}
    '  </div>' +
    '  <input name="ijan" type="hidden" class="ijan" value="' + n(d.ijan) + '"/>' +
    '  <input name="idat" type="hidden" class="idat" value="' + n(d.idat) + '"/>' +
    '  <input name="chgcdnm" type="hidden" class="chgcdnm" value="' + n(d.chgcdnm) + '"/>' +
    '  <input name="udat" type="hidden" class="udat" value="' + n(d.udat) + '"/>' +
    '  <input name="upchgnm" type="hidden" class="upchgnm" value="' + n(d.upchgnm) + '"/>' +
    '  <input name="iseq" type="hidden" class="iseq keyItem forDeleteData" value="' + n(d.iseq) + '"> '+
    '  <input name="orgijan" type="hidden" class="orgijan" value="' + n(d.ijan) + '"> '+
    '  <input name="orgjan" type="hidden" class="orgjan" value="' + n(d.jan) + '"> '+
    '  <input name="orgmvpno" type="hidden" class="orgmvpno" value="' + n(d.mvpno) + '"> '+
    '</div>' +
    '<hr>' +
    ' </div> ';
    return row;
  },
}


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


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

  function setNewLineData($me) {
    let detail = $me.closest(".contents").find(".detail.selectRow");
    detail.find(".datepicker").each(function (index) {
      common.setDatepickerInfo($(this));
    });
    detail.find(".popbtn").each(function (index) {
      common.setValue($(this),"?");
    });
    detail.find(".jan").prop("readonly",false);
    detail.find(".jan").focus();
  }

  $(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("pno");
    });
    //　F4 行挿入
    $(document).on("click", ".Func4:not('.noevent')", function(e) {
      {*行数チェック*}
      let frmh = $("#headerTop");
      let maxvlin = common.getValue(frmh.find(".maxvlin"));
      var detail = $("#detail .detail");
      let length = detail.length;

      if(maxvlin == length) {
        alert("伝票入力は"+maxvlin+"行までです。");
        detail.find(".jan")[0].focus();
        return false;
      }
      
      $(".btnLineIns").trigger("click");
    });
    //　F5 クリア
    $(document).on("click", ".Func5:not('.noevent')", function(e) {
      clearDetail();
      setOneRow();
      clearHeader();
    });
    //　F6
    $(document).on("click", ".Func6:not('.noevent')", function(e) {
      $(".headermenu").find(".btn-delete").trigger("click");
    });
    //　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) {
      doExcel();
    });
    //　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");

    //=== header ===


    //MENUボタン===============================
    $(document).on("regSuccess", ".btn-reg", function(e,option){
      if(option.ret == '0') {
        if(option.dcnt == '1') {
          w_msg = "登録しました。\n伝票番号は【"+option.vseq+"】です。\n";
        } else {
          w_msg = "伝票"+option.dcnt+"枚を登録しました。\n最終伝票番号は【"+option.vseq+"】です。";
        }
        alert(w_msg);
        setOneRow();
        clearHeader();
      } else {
        if(option.ret == '-3') {
          alert("他の端末で実行中です");
        } else if(option.ret == '-4') {
          alert("在庫がマイナスとなります。数量を確認してください。")
        } else {
          alert("登録に失敗しました。("+option.ret+")");
        }

      }
    });
    $(document).on("delSuccess", ".btn-delete", function(e,option){
      alert("削除しました");
      setOneRow();
      clearHeader();
    });

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

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

      if(!stringUtil.isEmpty(common.getValue(frm.find(".vseq"))) && stringUtil.isEmpty(common.getValue(frm.find(".cuiseq")))) {
        var headerData = [];
        var f = common.getInputData(frm);
        headerData.push(encodeJson(f));
        
        var sendData = {};
        sendData["header"] = headerData;

        common.postData(
            "./chkSearchBefore.php"
          , sendData
          , function (data) {
            // 特殊処理があれば
            var obj = JSON.parse(data);
            var ret = obj.ret;
            if(ret != '0') {
              if(obj.cnt == '0') {
                dspDetail();
              } else {
                {*vseqで複数伝票(複数cuiseq)あるので、選択！*}
                console.log("hukusuu");
                $(".popup-af251x1").trigger("click");
              }
            } else {
              common.setValue(frm.find(".cuiseq"),obj.cuiseq);
              dspDetail();
            }
          }
          , function (error) {
            alert(error.msg);
          }
        );
      } else {
        dspDetail();
      }
    });


    $(document).on("click", ".btn-reg-before", function(e) {
      var frmh = $("#headerTop");
      var detail = $("#detail .detail");
      var errflg = false;
      var wret;

      //$(".headermenu").find(".btn-reg").trigger("click");
      common.clearAllError();

      if (stringUtil.isEmpty(common.getValue(frmh.find(".vseq")))) {
        if (stringUtil.isEmpty(common.getValue(frmh.find(".spktcd1")))) {
          errflg = true;
          common.addError( frmh.find(".spktcd1"), "入力して下さい。", null, true);
        }
        if (stringUtil.isEmpty(common.getValue(frmh.find(".spktcd2")))) {
          errflg = true;
          common.addError( frmh.find(".spktcd2"), "入力して下さい。", null, true);
        }
      }
      if(!stringUtil.isEmpty(common.getValue(frmh.find(".spktcd1")))
      && !stringUtil.isEmpty(common.getValue(frmh.find(".spktcd2")))) {
        if(common.getValue(frmh.find(".spktcd1")) == common.getValue(frmh.find(".spktcd2"))) {
          errflg = true;
          common.addError( frmh.find(".spktcd1"), "出庫先と出庫元が同じ倉庫です。", null, true);
          common.addError( frmh.find(".spktcd2"), "出庫先と出庫元が同じ倉庫です。", null, true);
        }
      }

      if (stringUtil.isEmpty(common.getValue(frmh.find(".climit")))) {
        errflg = true;
        common.addError( frmh.find(".climit"), "入力して下さい。", null, true);
      }

      {*納品日<業務日付をエラーとする*}
      let wsdday = dateUtil.getYYYYMMDDDate(common.getValue(frmh.find(".sdday")));
      if(!stringUtil.isEmpty(common.getValue(frmh.find(".climit")))) {
        let wclimit = dateUtil.getYYYYMMDDDate(common.getValue(frmh.find(".climit")));
        if(wclimit < wsdday) {
          errflg = true;
          common.addError( frmh.find(".climit"), "本日以降を入力して下さい。", null, true);
        }
      }


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

        if(!stringUtil.isEmpty(common.getValue($me.find(".iseq"))) 
        || !stringUtil.isEmpty(common.getValue($me.find(".jan"))) || !stringUtil.isEmpty(common.getValue($me.find(".mvpno")))) { {*削除と空白は対象外*}
          if(!$me.find(".chkLineDel").prop("checked")) {
            if (stringUtil.isEmpty(common.getValue($me.find(".jan")))) {
              errflg = true;
              common.addError( $me.find(".jan"), "入力して下さい。", null, true);
            }
            if (stringUtil.isEmpty(common.getValue($me.find(".mvpno")))) {
              errflg = true;
              common.addError( $me.find(".mvpno"), "入力して下さい。", null, true);
            } else {
              var wmvpno = new BigNumber(stringUtil.nvl0(common.delFigure(common.getValue($me.find(".mvpno"))),"0"));
              if(wmvpno.lte(0)) {
                errflg = true;
                common.addError( $me.find(".mvpno"), "０以上を入力して下さい。", null, true);
              }
            }
          }
        }
      });


      if(errflg) {
        alert("エラーがあります");
        return false;
      }

      var headerData = [];
      var f = common.getInputData(frmh);
      headerData.push(encodeJson(f));

      var detailData = [];
      let cnt = 0;
      for (var i = 0; i < detail.length; i++) {
        $me = $(detail[i]);
        if(!stringUtil.isEmpty(common.getValue($me.find(".jan"))) && !stringUtil.isEmpty(common.getValue($me.find(".mvpno")))){ {*削除と空白は対象外*}
          if(!$me.find(".chkLineDel").prop("checked")) {
            var detailList = common.getInputData($me);
            detailData.push(encodeJson(detailList));
            cnt = cnt + 1;
          }
        }
      }      
      
      var sendData = {};
      sendData["header"] = headerData;
      sendData["data"] = detailData;

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

          obj.ret_array.forEach((item, i) => {
            var index = Number(item.vlin) - 1;
            var $me = $(detail[index]);

            common.setValue($me.find(".psum"), stringUtil.nvl(item.psum));

            var wmvpno = new BigNumber(stringUtil.nvl0(common.delFigure(common.getValue($me.find(".mvpno"))),"0"));
            var wpsum = new BigNumber(stringUtil.nvl0(common.delFigure(common.getValue($me.find(".psum"))),"0"));
            
            if(wmvpno.gt(wpsum)) {
              errflg = true;
              common.addError( $me.find(".mvpno"), "在庫数を超えています。", null, true);
            }
          });


          if(errflg) {
            alert("エラーがあります");
            return false;
          } else {
            $(".headermenu").find(".btn-reg").trigger("click");
          }
 

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


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

    $(document).on("afterSelectaf251x1", "#headerTop .vseq", function(e) {
      $(".btn-search-before").trigger("click");
    });

    $(document).on("afterSelectaf2052x", "#headerTop .cuiseq", function(e) {
      $(".btn-search-before").trigger("click");
    });


    //=== body ===
    {*ケース入数、在庫数も欲しいので自力でとってくる
      一部一致の一覧表示の為、名称取得までは共通部分*}
    $(document).on("afterSelectAfm02x", "#detail .jan", function(e) {
      get_gdnminfo($(this));
    });
    $(document).on("clearChangeJan", "#detail .jan", function(e) {
      get_gdnminfo($(this));
    });
    $(document).on("afterChangeJan", "#detail .jan", function(e) {
      get_gdnminfo($(this));
    });
    function get_gdnminfo($me) {
      let inpcd = common.getValue($me);
      var grp = $me.closest(".janGrp");
      var detail = $me.closest(".detail");

      common.setValue(grp.find(".gdcnum"),"");
      common.setValue(grp.find(".gdbnum"),"");
      common.setValue(grp.find(".psum"),"");
      common.setValue(grp.find(".mvpno"),"");


      if(stringUtil.isEmpty(inpcd)) {
        return false;
      }

      var $frmh = $("form.header");

      var sendData = {};
      sendData["jan"] = inpcd;
      sendData["ijan"]  = common.getValue(detail.find(".ijan"));
      sendData["spktcd1"]  = common.getValue($frmh.find(".spktcd1"));
      sendData["iseq"]  = common.getValue(detail.find(".iseq"));


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

          if(ret == '0') {
            common.setValue(grp.find(".gdcnum"),obj.gdcnum);
            common.setValue(grp.find(".gdbnum"),obj.gdbnum);
            common.setValue(grp.find(".psum"),common.addFigure(obj.psum));
          } else {
            common.setValue($me,"");
            common.addError($me, obj.msg, null);
          }
        }
        , function (error) {
          alert(error.msg);
        }
      );
    }

    $(document).on("change", "#detailTop .mvpno", function(e) {
      calcSum("mvpno");
    });

    $(document).on("click", ".chkLineDel", function(e) {
      calcSum("mvpno");
    });

    $(document).on("focus", ".mvpno", function(e) { {*数量にフォーカスが来た時商品が入っていたなかったら登録へ*}
      let detail = $(this).closest(".detail");
      if (stringUtil.isEmpty(common.getValue(detail.find(".jan")))) {
        $("#topmenu").find(".Func9").focus();
      }
    })


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


    //====明細行動作======


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

      {*行数チェック*}
      let frmh = $("#headerTop");
      let maxvlin = common.getValue(frmh.find(".maxvlin"));
      var detail = $("#detail .detail");
      let length = detail.length;

      if(maxvlin == length) {
        alert("伝票入力は"+maxvlin+"行までです。");
        detail.find(".jan")[0].focus();
        return false;
      }

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


    //=== footer ===

    // 初回フォーカス

  });

</script>
