'use strict'
angular.module('APP_PERFORMANCE').controller('ApsUpForm',['$scope','$sce', '$filter', '$http', 'ListAssessorCtrl', '$q', function($scope, $sce, $filter, $http, ListAssessorCtrl, $q){
  $scope.apsid = $('input[name="apsid"]').val()
  $scope.assessy = $('input[name="assessy"]').val()
  $scope.assessordata = {}
  $scope.timedata = {}
  $scope.apsform = {}
  $scope.selectscore = []
  $scope.selectscore2 = []
  $scope.activitiescore = []
  $scope.apsscore = []
  $scope.op1desc ={}
  var WindowObject;
  var DocumentContainer;
  var datadesc = {
    "senaface": {
      "topic1":"1. การบริหารรายได้ (เสนาเฟสท์)",
      "desc1":"(คะแนนที่ได้จะแปรเปลี่ยนตามเปอร์เซ็นต์ของ MTOP)",
      "topic2":"2. การให้บริการของหน่วยงาน",
      "desc2":"(คะแนนที่ได้มาจากแบบประเมินการให้บริการของหน่วยงาน)"
    },
    "corporation":{
      "topic1":"1. ยอดโอนรวมบริษัท (ตาม MTOP)",
      "desc1":"(คะแนนที่ได้จะแปรเปลี่ยนตามเปอร์เซ็นต์ของ MTOP)",
      "topic2":"2. ผลการดำเนินงานของ VIC",
      "desc2":"(คะแนนที่ได้วัดจากกำไรสุทธิเฉพาะส่วนของบริหารนิติฯ ที่ทางบัญชีปิดงบโดยให้เทียบกับที่ประมาณการไว้คือ 12%)"
    },
    "senawarehouse":{
      "topic1":"1. การบริหารรายได้ (เสนาแวร์เฮ้าส์/โกดัง)",
      "desc1":"(คะแนนที่ได้จะแปรเปลี่ยนตามเปอร์เซ็นต์ของ MTOP)",
      "topic2":"การให้บริการของหน่วยงาน",
      "desc2":"(คะแนนที่ได้มาจากแบบประเมินการให้บริการของหน่วยงาน)"
    },
    "warehouse":{
      "topic1":"1. การบริหารรายได้ (เสนาเฮ้าส์พหลโยธิน 30)",
      "desc1":"(คะแนนที่ได้จะแปรเปลี่ยนตามเปอร์เซ็นต์ของ MTOP)",
      "topic2":"2. การให้บริการของหน่วยงาน",
      "desc2":"(คะแนนที่ได้มาจากแบบประเมินการให้บริการของหน่วยงาน)"
    },
    "else":{
      "topic1":"1. ความมีส่วนร่วมในการสนับสนุนเป้าขายของบริษัท ถ้าได้ 100% ของ MTOP",
      "desc1":"(คะแนนที่ได้จะแปรเปลี่ยนตามเปอร์เซ็นต์ของ MTOP)",
      "topic2":"2. ความมีส่วนร่วมในการสนับสนุนยอดโอนของบริษัท ถ้าได้ 100% ของ MTOP",
      "desc2":"(คะแนนที่ได้จะแปรเปลี่ยนตามเปอร์เซ็นต์ของ MTOP)"
    }
  }

  function setOP1desc(bu5){
    // นิติบุคคล list
    var corporationlist = ['90_3','90_310','90_3111','90_3112','90_3113','90_317','90_3114','90_3115','90_3116','90_3117','90_3121','90_3124','90_3125','90_3126','90_3132','90_314','90_315','90_318']
    var head = bu5.substr(0,2);
    var body = parseInt(bu5.substr(3));
    //console.log('bu5 -- '+bu5);
    if(head == "80"){
      if(bu5 == '80_310'){ // เสนาแวร์เฮ้าส์
        $scope.op1desc = datadesc.senawarehouse
      }else if(body >= 1 && body <= 130){ // เสนาเฟส
        $scope.op1desc = datadesc.senaface
      }else if(body >= 320 && body <= 331){ // แวร์เฮ้าส์พหลโยธิน
        $scope.op1desc = datadesc.warehouse
      }else{
        $scope.op1desc = datadesc.else
      }
    }else if($.inArray(bu5, corporationlist) > -1){  // นิติบุคคล
      $scope.op1desc = datadesc.corporation
    }else{
      $scope.op1desc = datadesc.else
    }
  }

  for(var i=0.0; i<=17.5; i=i+0.5){
    var data ={
      score: i.toFixed(2),
      show: i
    };
    $scope.selectscore.push(data);
  }
  for(var i=0; i<=30; i++){
    var data ={
      score: i.toFixed(2),
      show: i
    };
    $scope.selectscore2.push(data);
  }
  for(var i=0; i<=1; i++){
      var data ={
        score: i+".00",
        show: i
    };
    $scope.activitiescore.push(data);
  }
  for(var i=0; i<=5; i++){
      var data ={
        score: i+".00",
        show: i
    };
    $scope.apsscore.push(data);
  }

  $scope.myparam = {
    apsid: $scope.apsid
    ,assessy: $scope.assessy
  };
  ListAssessorCtrl.manageApsUp2Form.query($scope.myparam).$promise.then(function(data){
    $scope.assessordata = data.header;
    $scope.timedata = data.time;
    $scope.apsform = data.body;
    // $scope.sequence = $scope.assessordata[0].sequence;
    // console.log($scope.timedata);
    // console.log($scope.assessordata);
    console.log(data)
    setOP1desc($scope.assessordata[0].bu5id)
  });
  $scope.goPage = function(){
    $('form[name="cscform"]').attr('target','myform');
    $('form[name="cscform"]').attr('action','APPRAISAL_UPPER2_SENA.jsp');

    var winopen = window.open('','myform','left=150,top=150,width=2000,height=2000,toolbar=no,status=yes,scrollbars=yes,resizable=yes');
    if (winopen){
      $('form[name="cscform"]').submit();
      winopen.focus();
    }
    $.closePage = function(){
      winopen.close();
    }
  }

  $scope.calscore = function(num=0, scorehalf=0, scorelast=0){
    /*
    -------- NUM ---------
    0 = (half+last)/2
    1 = (half+last)/2 tofixed(2)
    2 = (half+last) tofixed(2)
    3 = half tofixed(2)
    4 = last tofixed(2)
    5 = half
    6 = last
    */

    var totalscore = parseFloat(0.0);
    if((num == 1) || (num == 0)){
      totalscore = (parseFloat(scorehalf) + parseFloat(scorelast))/parseFloat(2);
    }else if(num == 2){
      totalscore = parseFloat(scorehalf) + parseFloat(scorelast);
    }else if((num == 3) || (num == 5)){
      totalscore = parseFloat(scorehalf);
    }else if((num == 4) || (num == 6)){
      totalscore = parseFloat(scorelast);
    }

    if((num == 1) || (num == 2) || (num == 3) || (num == 4)){
      if(isNaN(totalscore)){
        return '0.00';
      }else{
        return totalscore.toFixed(2);
      }
    }else{
      if(isNaN(totalscore)){
        return '0.00';
      }else{
        return totalscore;
      }
    }
  }

  $scope.caltotaltime = function(tpye_cal,timedata){
    var result = parseInt(0) ;
    if($scope.timedata.length > 0){
      if(tpye_cal=='0'){
        result = parseInt(timedata.sick_half) + parseInt(timedata.leave_half) + parseInt(timedata.absent_half);

        timedata.total_half = result;
      }else if(tpye_cal=='1'){
        result = parseInt(timedata.sick_last) + parseInt(timedata.leave_last) + parseInt(timedata.absent_last);

        timedata.total_last = result;
      }
    }
    return result;
  }
  $scope.caltime_absent = function(ab_time){
    var score = parseInt(4);
    if(ab_time >= 15){
      score = score - 25;
    }else if(ab_time >= 10){
      score = score - 20;
    }else if(ab_time >= 5){
      score = score - 10;
    }

    if(score < 0){
      return 0;
    }else{
      return score;
    }
  }
  $scope.caltime_lete = function(lt_time){
    var score = parseInt(4);
    if(lt_time >= 1000){
      score = score - 25;
    }else if(lt_time >= 950){
      score = score - 20;
    }else if(lt_time >= 901){
      score = score - 10;
    }

    if(score < 0){
      return 0;
    }else{
      return score;
    }
  }

  $scope.calscorefullyear = function(segment){
    var result = 0;
    var score1 = 0;
    var score2 = 0;
    if(segment == "4_1"){
      score1 = parseInt($(".op4_1_1").text());
      score2 = parseInt($(".op4_1_2").text());
      result = parseInt((score1 + score2)/2);
      return result;
    }else if(segment == "4_2"){
      score1 = parseInt($(".op4_2_1").text());
      score2 = parseInt($(".op4_2_2").text());
      result = parseInt((score1 + score2)/2);
      return result;
    }else if(segment == "4_half"){
      score1 = parseInt($(".op4_1_1").text());
      score2 = parseInt($(".op4_2_1").text());
      result = parseInt((score1 + score2)/2);
      return result;
    }else if(segment == "4_last"){
      score1 = parseInt($(".op4_1_2").text());
      score2 = parseInt($(".op4_2_2").text());
      result = parseInt((score1 + score2)/2);
      return result;
    }else if(segment == "4_all"){
      score1 = parseInt($(".4_1").text());
      score2 = parseInt($(".4_2").text());
      result = parseInt((score1 + score2)/2);
      return result;
    }else if(segment == "1_all"){
      score1 = parseFloat($(".op1_1").text());
      score2 = parseFloat($(".op1_2").text());
      result = parseFloat(score1 + score2);
      return result.toFixed(2);
    }
  }

  $scope.calw8 = function(index){
    var result = parseFloat(0) ;
    if($scope.apsform.length > 0){
      $scope.apsform[index].groupAry.forEach(function(obj){
        obj.masAry.forEach(function(data){
          result += parseFloat(data.weight);
        });
      });
    }
    return result.toFixed(2);
  }

  $scope.calscoreop3 = function(index){
    var result = parseFloat(0) ;
    if($scope.apsform.length > 0){
      $scope.apsform[index].groupAry.forEach(function(obj){
        obj.masAry.forEach(function(data){
          result += parseFloat(data.score);
        });
      });
    }
    return result.toFixed(2);
  }

  $scope.caltotalscoreop3 = function(index){
    var result = parseFloat(0) ;
    if($scope.apsform.length > 0){
      $scope.apsform[index].groupAry.forEach(function(obj){
        obj.masAry.forEach(function(data){
          result += parseFloat(data.weight) * parseFloat(data.score);
        });
      });
    }
    return result.toFixed(2);
  }

  $scope.calmultiplicateur = function(index){
    var totalscore = parseFloat(0) ;
    var result = parseFloat(0) ;
    if($scope.apsform.length > 0){
      $scope.apsform[index].groupAry.forEach(function(obj){
        obj.masAry.forEach(function(data){
          totalscore += parseFloat(data.weight) * parseFloat(5);
        });
      });
      result = parseFloat(10)/totalscore;
    }
    return result;
  }

   $scope.caltotalscore = function(index){
    var totalscore = $scope.caltotalscoreop3(index) ;
    var multiply = $scope.calmultiplicateur(index);
    var result = parseFloat(0) ;
    result = parseFloat(totalscore) * parseFloat(multiply);
    return result.toFixed(2);
   }

   $scope.calscoreop3all = function(){
     var result = parseFloat(0) ;
     result = parseFloat($scope.caltotalscore(0)) + parseFloat($scope.caltotalscore(1)) + parseFloat($scope.caltotalscore(2));

     if($scope.apsform.length > 0){
      if(($scope.assessordata[0].apsstate == "0") || ($scope.assessordata[0].apsstate == "C")){
        $scope.assessordata[0].scoreop3_half = result.toFixed(1);
      }else if(($scope.assessordata[0].apsstate == "1") || ($scope.assessordata[0].apsstate == "D")){
        $scope.assessordata[0].scoreop3_last = result.toFixed(1);
      }
     }

     return result.toFixed(1);
   }

   $scope.calalltotalscore = function(index){
    var result = parseFloat(0);
    if(index == "h"){
      $(".score_h").each(function(){
        result += parseFloat($(this).text());
      });
    }else if(index == "l"){
      $(".score_l").each(function(){
        result += parseFloat($(this).text());
      });
    }else if(index == "sum"){
      $(".total_score").each(function(){
        result += parseFloat($(this).text());
      });
      $("#finalscore").text(result.toFixed(2));
      $scope.calgrade(result);
    }
    return result.toFixed(2);
   }

   $scope.calgrade = function(score){
     var grade = "C";
     if(score >= 85){
       grade = "A";
     }else if(score >= 80){
       grade = "A-";
     }else if(score >= 75){
       grade = "B";
     }else if(score >= 65){
       grade = "B-";
     }else if(score < 65){
       grade = "C";
     }
     $("#grade").text(grade);
   }

  $scope.saveDraff = function(){
    if (confirm(MyCode[1])){
      $scope.sendparam = {
          apsid: $scope.apsid
          ,assessy: $scope.assessy
          ,assessordata: $scope.assessordata
          ,apsform: $scope.apsform
          ,timedata: $scope.timedata
          ,op4score: $("input[name='op4score']").val()
          ,savetype: '0'
      }
      ListAssessorCtrl.manageApsUp2Form.save(JSON.stringify($scope.sendparam))
      .$promise.then(function(){
          alert(MyCode[18]);
          //window.opener.location.reload();
      });
    }
  }

  $scope.save = function(){
    if (checkCommnet()){
      alert("กรุณากรอกเป้าหมายของหน่วยงานให้ครบถ้วน");
    }else if(checkScore()){
      alert("กรุณากรอกคะแนนให้ครบถ้วน");
    }else if (confirm(MyCode[1])){
      $scope.sendparam = {
          apsid: $scope.apsid
          ,assessy: $scope.assessy
          ,assessordata: $scope.assessordata
          ,apsform: $scope.apsform
          ,timedata: $scope.timedata
          ,op4score: $("input[name='op4score']").val()
          ,savetype: '1'
      }
      ListAssessorCtrl.manageApsUp2Form.save(JSON.stringify($scope.sendparam))
      .$promise.then(function(){
          alert(MyCode[18]);
          closePage();
          //window.opener.location.reload();
      });
    }
  }

  function checkScore(){
    var result = false

    $scope.apsform.forEach(function(obj){//debugger;
      obj.groupAry.forEach(function(group){
        let objlist = group.masAry.filter((masobj) => masobj.score == 0.00)
        if (objlist.length>0){
          result = true
        }
      });
    });
    if(($scope.assessordata[0].apsstate == "0") || ($scope.assessordata[0].apsstate == "C")){
      let objlistaps = $scope.assessordata.filter((objaps) => (objaps.score1_half == 0.00 || objaps.score2_half == 0.00 || objaps.score3_half == 0.00 || objaps.score4_half == 0.00))
      if (objlistaps.length>0){
        console.log(objlistaps)
        result = true
      }
    }else if(($scope.assessordata[0].apsstate == "1") || ($scope.assessordata[0].apsstate == "D")){
      let objlistaps = $scope.assessordata.filter((objaps) => (objaps.score1_last == 0.00 || objaps.score2_last == 0.00 || objaps.score3_last == 0.00 || objaps.score4_last == 0.00))
      if (objlistaps.length>0){
        console.log(objlistaps)
        result = true
      }
    }

    return result
  }

  function checkCommnet(){
    var result = false;
      $scope.apsform[1].groupAry.forEach(function(obj){
        obj.masAry.forEach(function(data){
          if((data.masdesc == "" ) && (data.title == "")){
            result = true;
          }
        });
      });

    return result;
  }

  $scope.checkprivilege = function(state){
    // ครึ่งปีแรก = state = 0   &&   16/12/ปีก่อน  -  15/06/ปีปัจจุบัน
    // ครึ่งปีหลัง = state = 1   &&   16/06/ปีก่อน  -  15/12/ปีปัจจุบัน

    if($scope.assessordata.length > 0){
      var result = true;  // false == มีสิทธิ์ปะรเมิน  -- true == ไม่มีสิทธิ์ประเมิน

      if(state == "0"){  // เช็ค สิทธิครึ่งปีแรก
        if(($scope.assessordata[0].apsstate == "0") || ($scope.assessordata[0].apsstate == "C")){
          if($scope.checkuser()){
            result = false ;
          }else{
            result = true ;
          }
        }
      }else if(state == "1"){ // เช็ค สิทธิครึ่งปีหลัง
        if(($scope.assessordata[0].apsstate == "1") || ($scope.assessordata[0].apsstate == "D")){
          if($scope.checkuser()){
            result = false ;
          }else{
            result = true ;
          }
        }
      }else if(state == "2"){ // เช็คข้อ 3
        if(($scope.assessordata[0].apsstate == "0") || ($scope.assessordata[0].apsstate == "C") || ($scope.assessordata[0].apsstate == "1") || ($scope.assessordata[0].apsstate == "D")){
          result = false ;
        }else{
          result = true ;
        }
      }else if(state == "time"){ // เช็คข้อ 4
        if((($scope.assessordata[0].apsstate == "0") || ($scope.assessordata[0].apsstate == "C") || ($scope.assessordata[0].apsstate == "1") || ($scope.assessordata[0].apsstate == "D")) && $scope.checkuser()){
          result = false ;
        }else{
          result = true ;
        }
      }else{
        console.error("หมดรอบประเมิน");
      }
    }

    //result = false;  /// for Test
    return result;
  }

  $scope.checkuser = function(){
    var result = false;
    var me = $('input[name="me"]').val();

    if($scope.assessordata.length > 0){
      var userlist = $scope.assessordata[0].user;
      for(var u=0; u<userlist.length; u++){
        if(userlist[u].toUpperCase() == me.toUpperCase()){
          result = true;
        }
      }
    }
    return result;
  }
  $scope.goprint = function(){
    hidelement();
    promisePrint().then((obj) => {
      WindowObject.focus();
      console.log(WindowObject);
      window.close();
      WindowObject.print();
    })
  }

  function promisePrint(){
    return new Promise((resolve, reject) => {
      DocumentContainer = document.getElementById('target_warpper');
      WindowObject = window.open('', 'PrintWindow', 'width=1200,height=666,top=10,right=10,toolbars=no,scrollbars=yes,status=no,resizable=yes');
      WindowObject.document.writeln('<!DOCTYPE html>');
      WindowObject.document.writeln('<html><head><title></title>');
      WindowObject.document.writeln('<link rel="stylesheet" type="text/css" href="css/APP_UP/style_apsup.css">');
      WindowObject.document.writeln('<link rel="stylesheet" type="text/css" href="css/APP_UP/style_printkpi.css">');
      WindowObject.document.writeln('<link rel="stylesheet" type="text/css" href="../CSS/Bootstrap/css/bootstrap.css">');
      WindowObject.document.writeln('<link rel="stylesheet" type="text/css" href="../CSS/EMPVIEW_LAYOUT.min.css">');
      WindowObject.document.writeln('</head><body>');
      WindowObject.document.writeln(DocumentContainer.innerHTML);
      WindowObject.document.writeln('</body></html>');
      WindowObject.document.close();
      setTimeout(() => resolve(WindowObject), 1000)
    })
  }

  function hidelement(){
    var score = parseFloat(0.00);
    $(".grp_all").each(function(){
      score = parseFloat($(this).val());
      if(isNaN(score)){
        score = parseFloat(0.00);
      }
      $(this).hide();

      if($(this).attr("class").indexOf("tofix") == 0){
        $(this).parents("td").text(score.toFixed(2));
      }else{
        $(this).parents("td").text(score);
      }
    });
     $(".grp_all-time").each(function(){
      score = parseFloat($(this).val());
      if(isNaN(score)){
        score = parseInt(0.00);
      }
      $(this).hide();
      $(this).parents("td").text(score);
    });
    $('.print-btn').hide()
  }

  $scope.processtime = function(){
    if (confirm(MyCode[184])){
      $scope.sendparam = {
          apsid: $scope.apsid
          ,assessy: $scope.assessy
          ,assessordata: $scope.assessordata
          ,apsform: $scope.apsform
          ,timedata: $scope.timedata
          ,savetype: '2'
      }
      ListAssessorCtrl.manageApsUp2Form.save(JSON.stringify($scope.sendparam))
      .$promise.then(function(){
          alert("ประมวลผล Time เรียบร้อยแล้ว");
          location.reload();
      });
    }
  }

  $(document).ready(function(){
    $(".op1score").on( "keyup", function() {
      let score1_half = parseFloat($scope.assessordata[0].score1_half)
      let score1_last = parseFloat($scope.assessordata[0].score1_last)
      let score2_half = parseFloat($scope.assessordata[0].score2_half)
      let score2_last = parseFloat($scope.assessordata[0].score2_last)

      if(score1_half > 17.5 || score1_half < 0){
        $scope.assessordata[0].score1_half = "0.00"
        $(this).val("0.00")
      }
      if(score1_last > 17.5 || score1_last < 0){
        $scope.assessordata[0].score1_last = "0.00"
        $(this).val("0.00")
      }
      if(score2_half > 17.5 || score2_half < 0){
        $scope.assessordata[0].score2_half = "0.00"
        $(this).val("0.00")
      }
      if(score2_last > 17.5 || score2_last < 0){
        $scope.assessordata[0].score2_last = "0.00"
        $(this).val("0.00")
      }
    }).on("blur",function(){
      if($(this).val()==''){
        $(this).val("0.00")
      }
    })

    $(".op2score").on( "keyup", function() {
      let score3_half = parseFloat($scope.assessordata[0].score3_half)
      let score4_half = parseFloat($scope.assessordata[0].score4_half)

      if(score3_half > 30 || score3_half < 0){
        $scope.assessordata[0].score3_half = "0.00"
        $(this).val("0.00")
      }
      if(score4_half > 30 || score4_half < 0){
        $scope.assessordata[0].score4_half = "0.00"
        $(this).val("0.00")
      }
    }).on("blur",function(){
      if($(this).val()==''){
        $(this).val("0.00")
      }
    })

    $(".op1score, .op2score, .grp_all-time").on( "keypress", function( event ) {
      // a-z [97-122]
      // A-Z [65-90]
      // 0-9 [48-57]
      // Enter [13]
      // Backspace [8]
      // _ [95]
      // . [46]
      if( !(event.which >= 48 && event.which <= 57) && event.which !== 8 && event.which !== 46){
        event.preventDefault();
      }
    });

  });

  //alert($(window).height());            ==> check height of window
}]);