
// 출하 선택/입력 object 선택
function createShipmentObj_v2(sval, opt, callBack){


  // 옵션설정값
  var getOpt = JSON.parse(JSON.stringify(opt));
  var clickObj = JSON.stringify(opt).replace(/\"/g,'\'');

  // sobj data =======
  var sobj = '';
  
  var vieObjCnt = 0;          // 표출 ojbect 개수 : input-group 사용할지 체크
  var getAjaxCallFlaObj = [];  // select option push object 설정

  // obj_data 갯수에 따라 만들기
  getOpt.obj_data.forEach(function(tvl, idx){

    var class_name = '';  // 추가할 클래스
    if(tvl.class_name != '' && tvl.class_name != undefined) class_name = tvl.class_name;

    var style = '';
    if(tvl.style != '' && tvl.style != undefined) style = 'style="' + tvl.style + '"';

    // input 수정 가능여부 판단
    var readonly = '';
      
    switch(tvl.type){
      
      // type 이 select, select2 
      case 'select' : 
      case 'select2' : 

        if(tvl.editflag == 'N') readonly = 'disabled';

        sobj += '<select class="form-control ' + tvl.type + ' ' + class_name + '" ' + style + ' name="' + tvl.name + '" id="' + tvl.name + '" '+ readonly +'><option value="">' + tvl.placeholder + '</option></select>';

        getAjaxCallFlaObj.push(tvl.name);
        vieObjCnt +=1;
      
        break;
      // type 이 text 일 때
      case 'text' :

          if(tvl.editflag == 'N') readonly = 'readonly';

          sobj += '<input type="text" name="' + tvl.name +'" id="' + tvl.name +'" class="form-control ' + class_name + '" ' + style + ' maxlength="'+ tvl.maxlen +'" placeholder="'+ tvl.placeholder +'" '+ readonly +'>';

          vieObjCnt +=1;

          break;
          
      // type 이 hidden 일 때
      case 'hidden' :

        sobj += '<input type="hidden" name="' + tvl.name +'" id="'+ tvl.name +'">';
        break;

    }

  });
  // sobj data end =======

  // 모달이 있을 경우 input-group에서 생성
  var inputObj = '', modalBtn = '';
  if (getOpt.moinfo.moid != '' && getOpt.moinfo.moid != undefined) {  
    modalBtn = '<button type="button" class="btn btn-default" onclick="adShipmentModalOpen('+ clickObj +')"><i class="fa fa-search"></i></button>';
  }

  // 표출 object 개수 및 검색모달창 사용에 따라서 input-group 사용
  if(vieObjCnt > 1){
    inputObj = '<div class="input-group">' + sobj;
    if(modalBtn != '') inputObj += '<div class="input-group-append">'+ modalBtn +'</div>';
    inputObj += '</div>';
  }else if(modalBtn != ''){
    inputObj = '<div class="input-group">' + sobj +'<div class="input-group-append">'+ modalBtn +'</div></div>';
  }else{
    inputObj = sobj;
  }

  // 출하 생성, class에 select2존재시 select2() 실행
  $('.'+ getOpt.pname).html(inputObj).find('.select2').select2().trigger('change');

  
  // 출하 object 이벤트발생에 따라 연결 object value 설정 호출
  getOpt.obj_data.forEach(function(tvl, idx){

    if(tvl.callBack){
      
      var runFunction = eval(tvl.callBack);

      switch(tvl.type){
        case 'select' :
        case 'select2' :

          $("select[name="+ tvl.name +"]").on('change', function(){ runFunction(getOpt, $(this).val()); });
          break;

        case 'text' :

          $("input[name="+ tvl.name +"]").on('keyup blur', function(){ runFunction(getOpt, $(this).val()); });
          break;
      }
    }
  })

  // 생성 select object 존재시 option push
  if(getAjaxCallFlaObj.length > 0){

    createShipmentObjGetList(1, 'all', getOpt,function(rval){

      var option_data = '';

      rval.value.forEach(function(vl, idx){
        var seflag = '';
        if(vl.so_idx == sval) seflag = "selected";

        option_data += '<option value="'+ vl.so_idx +'">'+ vl.so_num +'</option>';
      });

      // 생성 select object option push
      getAjaxCallFlaObj.forEach(function(ovl, oidx){
        $('select[name='+ ovl +']').append(option_data);
      })     

    });

  }

  
  if(callBack) callBack();
  
}

//  출하 모달 띄우기
var $ShipmentTbObjectModalJson = [];
function adShipmentModalOpen(opt){

  var getOpt = JSON.parse(JSON.stringify(opt));
  var clickObj = JSON.stringify(opt).replace(/\"/g,'\'');

  // 모달 / 컨텐츠 삽입 형태에 따라 생성 구분
  if(getOpt.moinfo.in_ajax_wrap != '' && getOpt.moinfo.in_ajax_wrap != undefined){
    $pobj = $("."+ getOpt.moinfo.in_ajax_wrap);
    $pobj.html('');
    adShipmentModalOpenTbCrate($pobj, opt);
  }else{

    var modalOpt = {id:getOpt.moinfo.moid, tit:getOpt.moinfo.mtit, titUse:'Y', footUse:'N', css:'modal-lg'};

    appendModalCreate(modalOpt, function(){
      $pobj = $('#'+ modalOpt.id +' .modal-body');
      adShipmentModalOpenTbCrate($pobj, opt);

    })

  }

}


// 출하 테이블 구조 생성
function adShipmentModalOpenTbCrate($pobj, opt){

  var getOpt = JSON.parse(JSON.stringify(opt));
  var clickObj = JSON.stringify(opt).replace(/\"/g,'\'');

  var modalContHTML = '';
  modalContHTML += '<div class="form-body"><div class="form-group row">';  
  
  modalContHTML +=
  '    <div class="col col-12 col-sm-12 col-md-2 ">'+
  '      <select class="form-control " name="'+ shkeyvalure(getOpt.moinfo.shkeyfd,'shkey') +'" id="'+ shkeyvalure(getOpt.moinfo.shkeyfd,'shkey') +'">'+
  '        <option value="">:: 선택 ::</option>'+
  '        <option value="onum">출하지시번호</option>'+
  '        <option value="pname">품명</option>'+
  '        <option value="pcode">품목코드</option>'+
  '      </select>'+
  '    </div>'+
  '    <div class="col col-12 col-sm-12 col-md-4">'+
  '      <label for="shkwd" class="sr-only">검색어</label>'+
  '      <input type="text" name="'+ shkeyvalure(getOpt.moinfo.shkeyfd,'shkwd') +'" id="'+ shkeyvalure(getOpt.moinfo.shkeyfd,'shkwd') +'" class="form-control" maxlength="20" value="" placeholder="검색어 입력">'+
  '    </div>'+
  '    <div class="col col-12 col-sm-12 col-md-2 cus-vm">'+
  '      <button type="button" class="btn btn-dark btn-block" onclick="ShipmentModalGetList(1,'+ clickObj +')"><i class="fa fa-search"></i> 검색</button>'+
  '    </div>'+
  '  </div>'+
  '</div>'+
  '<div class="row">'+
  '  <div class="col-12">'+
  '    <div class="card '+ getOpt.moinfo.pwrap +'">'+
  '      <div class="card-body table-responsive p-0" style="max-height:800px; overflow:auto;">'+
  '      </div>'+
  '    </div>'+
  '  </div>'+
  '</div>';

  $pobj.html(modalContHTML);
  shDateChageCall(90, 'Y', 'mdate_awrap');

  // table list create ---------
  var ShipmentTbObjectModalJson = [
    {
      datalist_tb: getOpt.moinfo.pwrap,
      tid: getOpt.moinfo.tid,
      tclass:'table table-bordered table-hover cus-table text-nowrap',
      // cbtnwrap:'cbtn-wrapmoal',
      pageflag:'O',
      pageObj: getOpt.moinfo.pgwrap,
      thlist:[
          {
            tit:'출하지시번호',
            th_style:'width:160px;',
            td_style:'text-align:center',
          },
          {
            tit:'출하예정일',
            th_style:'width:120px;',
            td_style:'text-align:center'
          },
          {
            tit:'품목',
            th_style:'min-width:150px;',
            td_style:'',
          },
          {
            tit:'선택',
            th_style:'width:100px;',
            td_style:'text-align:center'
          }
        ]
    }
  ];

  // object 생성여부 체크 후 설정
  var exFlag = 'N';
  $ShipmentTbObjectModalJson.forEach(function(tbl, tidx){
    if(tbl.tid == getOpt.moinfo.tid) exFlag = 'Y';
  })

  if(exFlag == 'N') {
    $ShipmentTbObjectModalJson.push({tid:getOpt.moinfo.tid, tbjson: ShipmentTbObjectModalJson, tbobj:dataTableCreate(ShipmentTbObjectModalJson)})
  }else{

    $ShipmentTbObjectModalJson.forEach(function(tbl, tidx){
      if(tbl.tid == getOpt.moinfo.tid) {
        $ShipmentTbObjectModalJson[tidx].tbobj = dataTableCreate(ShipmentTbObjectModalJson);
      }
    })

  }
  
  ShipmentModalGetList(1, getOpt);

}

// 
function ShipmentModalGetList(cpage, opt){

  var getOpt = JSON.parse(JSON.stringify(opt));
  var clickObj = JSON.stringify(opt).replace(/\"/g,'\'');


  var $ShipmentTbObject, $ShipmentTbObjectJson;
  $ShipmentTbObjectModalJson.forEach(function(tbl, tidx){
    if(tbl.tid == getOpt.moinfo.tid) {
      $ShipmentTbObject =  tbl.tbobj;
      $ShipmentTbObjectJson = tbl.tbjson;
    }
  })

  // 초기화
  $ShipmentTbObject.find("tbody tr").remove();
  if($ShipmentTbObjectJson[0].pageflag == 'Y') $("#"+$ShipmentTbObjectJson[0].pageObj).html('');
  var tdColcnt = $ShipmentTbObjectJson[0].thlist.length;

  var blankHTML = '<tr><td class="text-center" colspan="'+ tdColcnt +'">조회 데이타가 없습니다.</td></tr>';

  var p_block = 5;

  createShipmentObjGetList(cpage, '', opt, function(rval){

    var rcnt = 0;
    rval.value.forEach(function(vl, idx){
      // console.log(vl);

      var seBtn = '<a href="javascript:;" class="btn btn-default btn-sm" onclick="ShipmentModalGetListPush(\''+ vl.so_idx +'\','+ clickObj +')">선택</a>';

        var dataHTML = [vl.so_num, dateFormateCus(vl.so_exe_date,'s'), vl.pi_title, seBtn];

      // tbody view
      dataTableCreate_td($ShipmentTbObject,$ShipmentTbObjectJson, dataHTML);
      rcnt += 1;
    })

    if(rcnt <= 0) $ShipmentTbObject.find("tbody").append(blankHTML);

    // 페이징 정보
    $(".data_cnt").html(rval.total_count);
    $(".data_page_num").html(rval.page);
    $(".data_page_num_t").html(rval.total_page);

    var callBackFnc = {cname:'ShipmentModalGetList',param:opt};
    $("#"+$ShipmentTbObjectJson[0].pageObj).html(get_paging_cus(p_block, rval.page, rval.total_page, '','',callBackFnc));

  },'renew');
  
  
}

// 선택처리
function ShipmentModalGetListPush(id, opt){

  var getOpt = JSON.parse(JSON.stringify(opt));

  createShipmentObjGetListDataArray.forEach(function(pvl,pidx){
    
    if(pvl.so_idx == id){
      getOpt.obj_data.forEach(function(vl, idx){
        if(vl.callBack){
          var selectMoalCallBackFunc = eval(vl.callBack);
          selectMoalCallBackFunc(getOpt,id);
        }

        var db_id = eval('pvl.'+ vl.db_id);

        if(vl.type == 'text') $("input[name="+ vl.name +"]").val(db_id);
        else if(vl.type == 'select' || vl.type == 'select2') {
          $("select[name="+ vl.name +"]").val(db_id).trigger('change');
        }

      })
    }
  })

  // 모달 hide option
  if (getOpt.moinfo.hideopt == 'Y'){
    $('#'+ getOpt.moinfo.moid).modal('hide');
    $('#'+ getOpt.moinfo.moid +' .modal-body').html('');
  }

}

// 출하 call
var createShipmentObjGetListDataArray = [];
function createShipmentObjGetList(cpage, cpage_rows, opt, callBack, renew){

  // 옵션설정값
  var getOpt = JSON.parse(JSON.stringify(opt));
  var clickObj = JSON.stringify(opt).replace(/\"/g,'\'');

  if(getOpt.moinfo.ajaxReCall == 'N' && createShipmentObjGetListDataArray.length > 0 && renew != 'renew'){
    if(callBack){
      var reValue = {value:createShipmentObjGetListDataArray};
      callBack(reValue);
    }
  }else{

    var page = 1;
    if(cpage !='' && cpage !=undefined) page = cpage;
    var page_rows = 20;
    if(cpage_rows =='all') page_rows = 1000;
    else if(getOpt.moinfo.pgrow != '' && getOpt.moinfo.pgrow != undefined) page_rows = getOpt.moinfo.pgrow;


    var url = 'sales/shipment/';
    var rdata = {
      // 세션정보설정
      uid: memUid,
      auth_code: memAuthCode,
      page       : dataEncodeDecode('enc',page),
      page_rows  : dataEncodeDecode('enc',page_rows),
      oderFlag   : dataEncodeDecode('enc','pnamea'),
      shkey      : dataEncodeDecode('enc',$("#"+ shkeyvalure(getOpt.moinfo.shkeyfd,'shkey')).val()),
      shkwd      : dataEncodeDecode('enc',$("#"+ shkeyvalure(getOpt.moinfo.shkeyfd,'shkwd')).val()),
      shcate     : dataEncodeDecode('enc',$("#"+ shkeyvalure(getOpt.moinfo.shkeyfd,'shcate')).val()),
      shptype    : dataEncodeDecode('enc',$("#shptype").val()),
      shordtype  : dataEncodeDecode('enc',$("#shordtype_pop").val()),
      oderFlag   : dataEncodeDecode('enc',$("#oderFlag").val()),
      shend      : dataEncodeDecode('enc','N')
    };

    ajaxHttpData(url, rdata, function(result){
      if(result == 'err' || result == 'fail' || result == 'over'){
      } else {

        createShipmentObjGetListDataArray = result.value;
        if(callBack){
          callBack(result);
        }else{

        }

      }
    })
  }
}


// 출하 object 이벤트발생에 따라 연결 object value 설정
function ShipmentSelectSetValue(opt ,id){

  var getOpt = JSON.parse(JSON.stringify(opt));

  // 초기화
  getOpt.obj_data.forEach(function(vl, idx){
    if(vl.callBack){
      vl.callBackSetData.forEach(function(svl, sidx){
        if(svl.type == 'func'){
          var callFunciton = eval(svl.name);
          callFunciton('',getOpt);
        }else{
          if(svl.type == 'text') $("input[name="+ svl.name +"]").val('');
          else if(svl.type == 'select') $("select[name="+ svl.name +"] option:eq(0)").prop("selected", true).trigger('change');
        }
      })
    }
  })

  // 연결 object 설정
  createShipmentObjGetListDataArray.forEach(function(pvl,pidx){

    if(pvl.so_idx == id){

      getOpt.obj_data.forEach(function(vl, idx){
        if(vl.callBack){

          vl.callBackSetData.forEach(function(svl, sidx){

            var db_id = eval('pvl.'+ svl.db_id);

            if(svl.type == 'func'){
              var callFunciton = eval(svl.name);
              callFunciton(db_id,getOpt);
            }else{
              if(svl.type == 'text') $("input[name="+ svl.name +"]").val(db_id);
              else if(svl.type == 'select' || svl.type == 'select2') $("select[name="+ svl.name +"]").val(db_id).prop("selected", true).trigger('change');
            
            }
          })
        }
    
      })
    }
  })

  // 추가 리턴함수 존재시 실행 : 멀티 object 사용시
  getOpt.obj_data.forEach(function(vl, idx){
    if(vl.callBack2){
      $("#"+vl.name).each(function(eidx){
        var runFunctionReturn = eval(vl.callBack2);
        runFunctionReturn(eidx);
      });
    }
  });

}