import { Globals } from "../../app/app.globals";
import * as XLSX from 'xlsx';
// var clarinet = require('clarinet');
export class formatoSerie {
  constructor() {
    this.tipoGrafico = "";
    this.datos = [];
    this.colorMetaCol = "#CDCDCD";
    this.nombreSerie = ["Serie"];
    this.colorCol = "rgb(0, 117, 141)";
    this.drilldown = true;
    this.tipoIndicador = null;
    this.colorGauge = "rgb(0, 117, 141)";
    this.colorGaugeMeta = "rgb(205, 205, 205)";
    this.tipoIndicadorMeta = null;
    this.today = null;
    this.nicks = [];
    this.nicksNodos = [];
    this.metas = [];
    this.tipoMetas = "Mes";
    this.gaugeIndicators = [
      "avail",
      "effective_usage",
      "usage",
      "prod",
      "coef_Marcha",
      "coef_effective"
    ];
    //this.modeloTiempoFNP = ['Tiempo Calendario', 'Detención Causa Exógena', 'Mantención Correctiva', 'Mantención Programada','Detención Operacional','Detención Operacional No Programada', 'Tiempo Equivalente de Producción'];
    this.modeloTiempoFNP = [
      "Tiempo Posible",
      "Mantención Correctiva",
      "Mantención Programada",
      "Mantencion Correctiva Accidente",
      "Detención Operacional",
      "Detención Causa Exógena",
      "Detención Operacional No Programada",
      "Tiempo Efectivo"
    ];
    this.tooltipFormat = "";
    this.setColores = [
      '#285367',
      '#5ADED4',
      '#32758c',
      '#26596A',
      '#163342',
      '#6C98A1'
    ];
    this.contadorSemanas = 0;
    this.tipoColumnaAgrupada = "h";
    this.versusAxis = 1;
    this.diccionario = [
      "Ene",
      "Feb",
      "Mar",
      "Abr",
      "May",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ];
    this.indicadoresPorcentaje = [1,2,3];
    this.indicadoresPorcentajeAcrom = ['avail','usage', 'effective_usage'];
    this.variablesOeeImpacto = [];
    this.tendencia = Globals.TENDENCIAROLLING;
    this.rolling = Globals.TENDENCIAROLLING;
    this.analSemanal = false;
    this.ckpiSemanal = false;
    this.datosSplineColumn = [];
    this.datosOEE = [];
    this.jacknife = [];
    this.paretoModoFalla = [];
    this.datosVersus = [];
    this.datosTablaTopEquipos = [];
  }

  returnDicc(){
    return this.diccionario;
}

  setOeeImpacto(variables){
    this.variablesOeeImpacto =variables;
}

  setMetas(metas){
    this.metas = metas;
  }

  setTipoMetas(tipoMetas){
    this.tipoMetas =tipoMetas;
  }

  setNickNodos(nickNodos){
    this.nicksNodos = nickNodos;
  }
  setNicks(nicks){
    this.nicks = nicks;
  }

  setToday(today){
    this.today = today;
  }

  setckpiSemanal(valor){
    this.ckpiSemanal = valor;
  }

  setColorMetaCol(color) {
    this.colorMetaCol = color;
  }

  setNombresSerie(nombre) {
    this.nombreSerie = nombre;
  }

  setSerieColores(colores) {
    this.coloresSet = colores;
  }

  setColorCol(color) {
    this.colorCol = color;
  }

  setProceso(proceso){
    if (typeof proceso === 'string'){
          var procesoDividido = proceso.split(',');
          this.proceso = procesoDividido[0];
    }
    else{
      this.proceso = proceso;
    }
  }

  setTooltipFormat(format) {
    this.tooltipFormat = format;
  }

  setTipoAnali(anal){
    this.analSemanal = anal;
  }

  setColorGauge(color) {
    this.colorGauge = color;
  }

  setGaugeIndicators(indicators) {
    this.gaugeIndicators = indicators;
  }

  setColorGaugeMeta(color) {
    this.colorGaugeMeta = color;
  }

  setDrilldown(valor) {
    this.drilldown = valor;
  }

  setTipoColumnaAgrupada(tipo) {
    this.tipoColumnaAgrupada = tipo;
  }
  setModeloTiempo(modelo){
    this.modeloTiempoFNP = modelo;
  }
  setVersusAxis(axis){
    this.versusAxis = axis;

  }
  setDiccionario(diccionario){
    this.diccionario = diccionario;
  }
  setRolling(roling){
    this.rolling = rolling;
  }
  setTendencia(tencencia){
    this.tendencia = tendencia;
  }
  setDatosVersus(datos){
    this.datosVersus = datos;
  }
  setDatosTopEquipos(datos){
    this.datosTablaTopEquipos = datos;
  }

  setTipoIndicador(indicador) {
    this.tipoIndicador = indicador;

    switch (this.tipoIndicador) {
      case Globals.DISPONIBILIDAD:
        this.tipoIndicadorMeta = 25;
        break;
      case Globals.UTILIZACION:
        this.tipoIndicadorMeta = 26;
        break;
      case Globals.UTIL_EFFECTIVA:
        this.tipoIndicadorMeta = 27;
        break;
    }
  }

  truncar(n, decimales, indicTipo = 1) {

    if(isNaN(n) && String(n) != 'NaN'){ 

        var splitNumber = n.split("|")[2];
        n = splitNumber;

    }

    if (indicTipo == undefined || indicTipo == 0) {
      return 0;
    } else if (this.indicadoresPorcentajeAcrom.indexOf(indicTipo) == -1) {
      decimales = 0;
    }else{
      if(n > 1){
        decimales = 0;
      }
    }

    var multiplicador = 10 ** (decimales + Globals.CANTDECIMALES);

    var previo = n * multiplicador;
    previo = Math.trunc(previo);

    return previo / (10 ** Globals.CANTDECIMALES);
  }

  traducirFechaALetra(fecha, metrica) {
    if (metrica == 3) {
      var diccionario = this.diccionario;

      var fechaArreglo = fecha.split("-");
      var final = fechaArreglo[1].replace(/^0+/, "");
      var finalDía = fechaArreglo[0].replace(/^0+/, "");
      if (Number(finalDía) < 28 || (finalDía.length == 4 && Number(final) < 28)) {
        var final = Number(final) - 1;
      }
      else if (Number(finalDía) > 28 && Number(final) > 11 ){
        
        var año = fechaArreglo[2].substring(3);
        var añoCorregido = Number(año) + 1;
        fechaArreglo[2] = fechaArreglo[2].substring(0,3) + añoCorregido;

      }

      if (diccionario[final] == undefined) {
        final = 0;
      }

      return diccionario[final] + " '" + (fechaArreglo[2].length == 4  ? fechaArreglo[2].substring(2) : fechaArreglo[0].substring(2) );
    } else if (metrica == 2) {
      var fechaArreglo = fecha.split("-");
      var semana = moment(''+ fechaArreglo[2] + '-' + fechaArreglo[1] + '-' + fechaArreglo[0]).week()
      // var d = new Date(
      //   Date.UTC(fechaArreglo[2], fechaArreglo[1], fechaArreglo[0])
      // );
      // var dayNum = d.getUTCDay() || 7;
      // d.setUTCDate(d.getUTCDate() + 4 - dayNum);
      // var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
      return "Semana " + semana;

      // diccionario = 'Semana ' + this.contadorSemanas;

      // return diccionario;
    } else {
      return fecha;
    }
  }

  traducirFechaALetraAlt(fecha) {
    var diccionario = this.diccionario;

    return diccionario[fecha];
  }

  indicadorNombreANumero(numero){

      var json = {'1': 'avail', '2': 'usage', '3': 'effective_usage', '6': 'mttr', '4': 'mtbf'} ; 

      return json[numero];

  }

  ordenElementos(orden,datos){

    var arregloOrdenado = [];

    for ( var key of orden){

        for ( var key2 of datos){

          if (key == key2.ds_nick_nodo ){

              arregloOrdenado.push(key2);

          }

        }

    }

    return arregloOrdenado;

  }

  setFormatoSerie(tipoGrafico, datos) {
    this.tipoGrafico = tipoGrafico;

    this.datos = datos;

    switch (this.tipoGrafico) {
      case "column":
        var data = [];
        var counter = 0;
        var contador = 0;
        var dataPrimeraParteMeta = [];
        var flagProduccion = 0;
        var metrica;
        var indicTipo = this.tipoIndicador;
        var dataTendencia = [];
        
        for (var datos of this.datos) {
          if (
            datos.co_metrica == Globals.CKPI_ANO &&
            datos.co_indic_catg != 4 && this.tipoIndicador != 'prod'
          ) {
            if(this.analSemanal == true && datos.original == undefined){
              continue;
            }
            var numero = JSON.parse(datos.ds_val);
            metrica = '%';
            
            
            var dataPrimeraParte = [
              {
                x: counter,
                y: this.truncar(numero.data[this.tipoIndicador], 2, indicTipo),
                color: this.setColores[contador],
                name: datos.nb,
                metrica: metrica,
                dsnick: datos.ds_nick_nodo
              }
            ];

            data.push({
              name: 'YTD',
              data: dataPrimeraParte,
              zIndex: 2
            });

            counter++;
            contador++;
            if (contador == this.setColores.length) {
              contador = 0;
            }
          } else if (datos.co_indic_tipo != Globals.PRODUCCION && datos.co_indic_catg == 4 && datos.co_metrica == Globals.CKPI_ANO) {
            var numero = JSON.parse("[" + datos.ds_val + "]");
            metrica = '%';
            var valores;
            var dataMeta;
            for (valores of numero) {
              dataMeta = this.truncar(valores.valor, 2, indicTipo);
            }

            dataPrimeraParteMeta.push({
              y: dataMeta,
              name: datos.nb,
              metrica:metrica,
              dsnick: datos.ds_nick_nodo
            });
           
          }
          else if (datos.co_indic_catg == 1 && this.tipoIndicador == 'prod' && datos.co_metrica == Globals.MENSUAL && datos.co_indic_tipo == Globals.PRODUCCION){

            var numero = JSON.parse("[" + datos.ds_val + "]");
            var cuentaDatos = 0;
            var suma = 0;
            metrica = 'Ton';
            suma = numero[numero.length - 1].valor;
            if(suma < 0){
              suma = 0;
            }
            if(suma >= 1000){
              flagProduccion = 1;
            }
            var dataPrimeraParte = [
              {
                x: counter,
                y: suma,
                color: this.setColores[contador],
                name: datos.nb,
                metrica: metrica
              }
            ];

            data.push({
              name: 'YTD',
              data: dataPrimeraParte,
              zIndex: 2
            });

            counter++;
            contador++;
            if (contador == this.setColores.length) {
              contador = 0;
            }
          }else if(datos.co_indic_catg == 4 && this.tipoIndicador == 'prod' && datos.co_metrica == Globals.MENSUAL && datos.co_indic_tipo == Globals.PRODUCCION) {
            var numero = JSON.parse("[" + datos.ds_val + "]");
            var dataMeta =0;
            metrica = 'Ton';
            var valores;
            for (valores of numero) {
              dataMeta = dataMeta + valores.valor;
            }
            var fechas = this.setFechasLimites(datos.fe_desde,datos.fe_hasta);
            dataMeta = (dataMeta*fechas[2])/(fechas[3]);
            if(dataMeta>=1000){
              flagProduccion = 1;
            }

            dataPrimeraParteMeta.push({
              y: dataMeta,
              name: datos.nb,
              metrica:metrica
            });
           
          }
          
        }
        data.push({
          name: "Meta",
          data: dataPrimeraParteMeta,
          pointPadding: 0,
          pointPlacement: -0.05,
          color: "#CDCDCD",
          dataLabels:false,
          zIndex: 1
        });

        if(flagProduccion == 1){
          for(var i=0;i<this.datos.length;i++){
            data[i].data[0].y = Number((this.truncar(data[i].data[0].y,0)/1000).toFixed(2));
            data[i].data[0].metrica = 'KTon';
          }
        }
        
          
        
        var serie = [data];
        
        return serie;

        break;

          case "preSplineEnd":
              var nickNodos = this.nicksNodos;
              var i;
              var nick = this.nicks;
              var largo = nick.length;
              var j =0;
              var datos = this.datos;
              var largo2 = datos.length;
              var datosProduccion = [];
              var arreglo = [];
              for(i = 0;i<largo2;i++){
                if(datos[i].co_indic_tipo == Globals.PRODUCCION && (datos[i].co_metrica ==3)){
                  datosProduccion.push(datos[i]);
                }
              }
            var largo3 = datosProduccion.length;
            if(largo3 !=0){
              var data_val = JSON.parse("[" + datosProduccion[0].ds_val+ "]");
              var values = [];
              
              for(i=0;i<data_val.length;i++){
                var aux = {"desde":data_val[i].desde,"hasta":data_val[i].hasta,"valor":0};
                values.push(aux);
              }
              var desde = datosProduccion[0].fe_desde;
              var hasta = datosProduccion[0].fe_hasta;
              var proceso = datosProduccion[0].co_proceso;
              var metrica = datosProduccion[0].co_metrica;
              var tipo = datosProduccion[0].co_indic_tipo;
              var catg = datosProduccion[0].co_indic_catg;
              var ds_val =JSON.stringify(values);
              ds_val = ds_val.slice(1);
              ds_val = ds_val.slice(0,ds_val.length-1);
              
            
              for(i=0;i<largo;i++){
                if(j<largo3){
                  if(nick[i]==datosProduccion[j].nb){
                    arreglo.push(datosProduccion[j]);
                    if(datosProduccion[j].co_indic_catg==4 && datosProduccion[j-1].nb ==datosProduccion[j].nb){
                      arreglo.push(datosProduccion[j]);
                      j++;
                    }
                    j++;
                  }else{
                    var aux = {
                      "co_indic_catg":catg,
                      "co_indic_tipo":tipo,
                      "co_metrica":metrica,
                      "co_proceso":proceso,
                      "ds_nick_nodo":nickNodos[i],
                      "ds_val":ds_val,
                      "fe_desde":desde,
                      "fe_hasta":hasta,
                      "nb":nick[i]
                    };
                    arreglo.push(aux);
                  }
                }else{
                  var aux = {
                    "co_indic_catg":catg,
                    "co_indic_tipo":tipo,
                    "co_metrica":metrica,
                    "co_proceso":proceso,
                    "ds_nick_nodo":nickNodos[i],
                    "ds_val":ds_val,
                    "fe_desde":desde,
                    "fe_hasta":hasta,
                    "nb":nick[i]
                  };
                  arreglo.push(aux);
                }
              }
            }
            else{

              for(i=0;i<largo;i++){
                var aux = {
                  "co_indic_catg": '1',
                  "co_indic_tipo":Globals.PRODUCCION,
                  "co_metrica": Globals.MENSUAL,
                  "co_proceso": null,
                  "ds_nick_nodo": nickNodos[i],
                  "ds_val": '{"desde": "01-01-2019","hasta":"01-02-2019","valor":0},{"desde": "01-02-2019","hasta":"01-03-2019","valor":0}',
                  "fe_desde": null,
                  "fe_hasta": null,
                  "nb":nick[i]
                };
                arreglo.push(aux);
              }

            }
          return arreglo;

      case "mixMant":
        var data = [];
        var dataMP = [];
        var dataMC = [];
        var counter = 0;
        var contador = 0;
        var categories = [];

        for (var datos of this.datos) {
          var numero = JSON.parse(datos.ds_val);

          dataMC.push(this.truncar(numero.mc, 0));
          dataMP.push(this.truncar(numero.mp, 0));
          categories.push(datos.nb);

          counter++;
          contador++;
          if (contador == this.setColores.length) {
            contador = 0;
          }
        }

        data.push(
          { name: "MC", data: dataMC, color: this.setColores[contador] },
          { name: "MP", data: dataMP, color: this.setColores[contador + 1] }
        );

        var serie = [data, categories];

        return serie;

        break;

      case "paretoFailure":
        var data = [];
        var data2dimension = [];
        var diccionario = [];
        var counter = 0;
        var contador = 0;
        var categories = [];

        this.paretoModoFalla = this.datos;

        for (var datos of this.datos) {
          var numero = JSON.parse(datos.ds_val);

          for (var datos2 in numero) {
            var indice = diccionario.indexOf(datos2);

            if (indice == -1) {
              data2dimension.push([
                datos2,
                [this.truncar(numero[datos2][this.tipoColumnaAgrupada], 0)]
              ]);
              diccionario.push(datos2);
            } else {
              data2dimension[indice][1].push(
                this.truncar(numero[datos2][this.tipoColumnaAgrupada], 0)
              );
            }
          }
          categories.push(datos.nb);
        }
        for (var datitos of data2dimension) {

          if (datitos[1].reduce((a,b)=>a+b) != 0){
              data.push({
                name: datitos[0],
                data: datitos[1],
                color: this.setColores[contador]
              });
              counter++;
              contador++;
              if (contador == this.setColores.length) {
                contador = 0;
              }
          }
        }
        if(data.length == 0 && data2dimension.length != 0){
          data.push({
            name: 'NA',
            data: data2dimension[0][1],
            color: this.setColores[contador]
          });
        }
        var serie = [data, categories];

        return serie;

        break;

        case "failuremode2":

          var series = this.datos;
          var contador = 0;
          var data = [];
          var categories = [];
          var data2 = [];
          var ordenar = [];
          var categories_definitivo = [];
          var data_definitivo = [];

          for (var i = 0; i < series.length; i++) {
            var numero = JSON.parse(series[i].ds_val);
            var equipo = series[i].nb;

            categories.push(equipo);
            var iterator1 = Object.keys(numero);

            for (var key of iterator1) {
              data2.push([key, i, this.truncar(numero[key][this.tipoColumnaAgrupada], 0)]);

            }
          }

          for (let i = 0; i < data2.length; i++) {
            var x = [];
            var y = []; 
            var indic_borrar = [];
            x.push([data2[i][1], data2[i][2]]);
            y.push([data2[i][1], data2[i][2]]);
            var num = i + 1;

            for (let j = 0; j < data2.length; j++) {
              if (j > i) {
                if (data2[i][0] == data2[j][0]) {
                  indic_borrar.push(j);
                  x.push([data2[j][1], data2[j][2]]);
                  y.push([data2[j][1], data2[j][2]]);
  
                }
              }
            }

            for (let j = 0; j < indic_borrar.length; j++) {
              data2.splice(indic_borrar[j], 1);

            }

            data.push({
              name: data2[i][0],
              data: x,
              color: this.setColores[contador]
            });

            data_definitivo.push({
              name: data2[i][0],
              data: y,
              color: this.setColores[contador]
            });

            contador++; 
            if (contador == this.setColores.length) {
              contador = 0;
            }
          }

          for (let a = 0; a < categories.length; a++) {
            suma = 0;
            for (let i = 0; i < data.length; i++) {
              for (let j = 0; j < data[i].data.length; j++) {
                if(data[i].data[j][0] == a){
                  suma = suma + data[i].data[j][1];

                }
              }
            }

            ordenar.push({
              indice: a,
              data: suma,
            });
          }
          
          ordenar.sort(function (a, b) {
            if (a.data > b.data) {
              return -1;
            }
            if (a.data < b.data) {
              return 1;
            }
            // a must be equal to b
            return 0;
          });

          for (let j = 0; j < ordenar.length; j++) {
            for (let a= 0; a < data.length; a++) {
              for (let b = 0; b < data[a].data.length; b++) {
                // console.log(data[a].data[b][0] + ' ' + ordenar[j].indice + ' ' + j);
                if(data[a].data[b][0] == ordenar[j].indice){
                  data_definitivo[a].data[b][0] = j;
                  
                }
              
              }
            }
            categories_definitivo.push(categories[ordenar[j].indice]);
          }

          var serie = [data_definitivo, categories_definitivo];
  
          return serie;
  
          break;  

      case "splineColumnEnd":

        var colorYTD = this.setColores[0];
        var colorMTD = this.setColores[3];
        var index = 0;
        var series = [];
        var data = [];
        var dataMeta = [];
        var category = [];
        var categories = [];
        var contadorIndicadores = 0;
        var actualIndic;
        var ckpiMTD = 0;
        var ckpiYTD = 0;
        var ckpiYTDMeta = 0;
        var ckpiMTDMeta = 0;
        var contador = 1;
        var titulos = [];
        var contadorColores = 0;
        var tipoEje = [100, '%'];
        var arreglo = 0;
        var flagProduccion =0;
        var Y = 0;
        var X = 0;
        var XY = 0;
        var Xsquared = 0;
        var XsquaredAcum = 0;
        var n = 1;
        var a = 0;
        var b = 0;
        var datosTendencia = [];
        var dualaxis = 0;
        var contadorRolling = 0;
        var primerValorRolling = 0;
        var serieRolling = [];
        var promedio = 0;
        var suma = 0;
        var rolling = 0;
        var periodoObs = 'MTD';

        this.datosSplineColumn = this.datos;

        if(this.analSemanal == true){

            periodoObs = localStorage.getItem('periodoObs')
            //por ahora 
            periodoObs = periodoObs.split(' ')[0];

        }

        var indicadorUsado = Globals.MENSUAL;
        if(this.analSemanal == true){
          indicadorUsado = Globals.SEMANAL;
        }

        for (var datos of this.datos) {
          actualIndic = datos.nb;

          if (datos.co_metrica == indicadorUsado && datos.co_indic_catg == 1) {
            var numero = JSON.parse("[" + datos.ds_val + "]");
            titulos.push(actualIndic);
            var cuentaDatos = 0;
            var suma = 0;
            var suma2 =0;

            if(this.analSemanal){

                var semanas = JSON.parse(localStorage.getItem('semanas'));
                var numeroAcotado = [];

                for ( var i = 0; i < semanas.length; i++){

                  for (var valores of numero) {

                    var fecha = valores.desde;

                    var fechaArray = fecha.split('-');

                    if(semanas[i] == moment([fechaArray[2],fechaArray[1] - 1, fechaArray[0]]).week()){
                        numeroAcotado.push(valores);
                        break;        
                    }

                  }
                   

                }

                numero = numeroAcotado;

                // numero = numero.slice(semanas[0] - 1,semanas[semanas.length - 1]);

            }


            for (var valores of numero) {

              if (datos.co_indic_tipo == Globals.PRODUCCION){
                  
                  if(valores.valor < 0 || valores.valor == undefined){
                    valores = {valor:0, desde: valores.desde};
                    suma2 = suma2 + valores.valor;
                  }
                  dualaxis = 1;
                  if(cuentaDatos < numero.length - 2){

                    category.push(
                      this.traducirFechaALetra(valores.desde, datos.co_metrica)
                    );
                    if(numero[numero.length - 2].valor >= 1000){
                      flagProduccion = 1;
                      data.push(Number((this.truncar(valores.valor, 0)/1000).toFixed(2)));
                      suma2 = suma2 +Number((this.truncar(valores.valor, 0)/1000).toFixed(2));
                    }else{
                      data.push(Number((this.truncar(valores.valor, 0)).toFixed(2)));
                      suma2 = suma2 +Number((this.truncar(valores.valor, 0)).toFixed(2));
                    }
                  }
                  
                  if(numero[numero.length - 2].valor >= 1000){ 
                    tipoEje = [null,'KTon'];
                  }else{
                    tipoEje = [null,'Ton'];
                  }
                  cuentaDatos++;
                  if (numero.length == cuentaDatos){
                    if(suma2 != 0){ 
                      if(numero[numero.length - 1].valor >= 1000){ 
                        ckpiYTD = Number((this.truncar(valores.valor,0)/1000).toFixed(2));
                      }else{
                        ckpiYTD = Number((this.truncar(valores.valor, 0)).toFixed(2));
                      }
                    }else{
                      ckpiYTD =0;
                    }
                  }
                  else if(numero.length - 1 == cuentaDatos ){
                    if(suma2 !=0){ 
                      if(numero[numero.length - 2].valor >= 1000){ 
                        ckpiMTD = Number((this.truncar(valores.valor,0)/1000).toFixed(2));
                      }else{
                        ckpiMTD = Number((this.truncar(valores.valor, 0)).toFixed(2));
                      }
                    }else{
                      ckpiMTD = 0;
                    }
                  }
              }
              else{

                category.push(
                   this.traducirFechaALetra(valores.desde, datos.co_metrica)
                );
                  data.push(this.truncar(valores.valor, 2, this.tipoIndicador));

                  if(this.tendencia){
    
                     Y += this.truncar(valores.valor, 2, this.tipoIndicador);
                     X += n;
                     XY += n*this.truncar(valores.valor, 2, this.tipoIndicador);
                     XsquaredAcum += n**2;

                     n++; 
    
                }
                if(this.rolling){
    
                  var values = this.truncar(valores.valor, 2, this.tipoIndicador);
    
                 contadorRolling ++;

                 suma += values;
                 if(contadorRolling == 1 && serieRolling.length > 0){
                   suma = suma-primerValorRolling;
                 }
                 if(contadorRolling == 1){
                   primerValorRolling = values;
                 }
                 
    
                 if((contadorRolling == 3 && numero.length > 2 && serieRolling.length == 0) || numero.length > 2 && serieRolling.length > 0){
    
                     promedio = suma/3;
    
                     serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador)]);
    
                     contadorRolling = 0;
    
                 }
                 else if(numero.length == 1){
    
                   serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador)]);
    
                 }
                 else if(numero.length == 2 && contadorRolling == 2 ){
    
                   promedio += values;
                   if(contadorRolling == 2){
    
                     promedio = promedio/2;
                     serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador)]);
    
                   }
                 }

                 rolling++;
    
               }


              }
            }

            if(this.tendencia){
                  n--;
                  Xsquared = X**2;

                  b = (XY - (X*Y)/n)/(XsquaredAcum - Xsquared/n);
                  a = Y/n - ((X/n)*b);

                  
                  var z = 1;

                  for(var cantidad of numero){

                      let dato = a + z*b;

                      datosTendencia.push(this.truncar(dato, 2, this.tipoIndicador));

                      z++;

                  }

            }

            contadorIndicadores++;
          } else if (
            datos.co_indic_tipo == Globals.CKPI &&
            datos.co_indic_catg != 4 &&  this.tipoIndicador != 'prod'
          ) {
            var ckpi = JSON.parse("[" + datos.ds_val + "]");

            if (datos.co_metrica == Globals.CKPI_ANO) {
              ckpiYTD = this.truncar(ckpi[0].data[this.tipoIndicador], 2, this.tipoIndicador);
            } else {
              ckpiMTD = this.truncar(ckpi[0].data[this.tipoIndicador], 2, this.tipoIndicador);
            }

            contadorIndicadores++;
          } else if (datos.co_indic_catg == 4) {
            if (datos.co_metrica == Globals.MENSUAL) {
              
              var numero = JSON.parse("[" + datos.ds_val + "]");
              if(datos.co_indic_tipo !=Globals.PRODUCCION){ 
                for (var valores of numero) {
                  dataMeta.push(this.truncar(valores.valor, 2, this.tipoIndicador));
                }
              }else{
              var dataMetaYTD =0;
              var mtd=0;
              var last= numero[numero.length - 2].valor;
              var mtd = numero[numero.length-1].valor;
              for (var valore of numero) {
                if(last>=1000){ 
                  dataMeta.push(Number((this.truncar(valore.valor, 0)/1000).toFixed(2)));
                }else{
                  dataMeta.push(Number((this.truncar(valore.valor, 0)).toFixed(2)));
                }
                dataMetaYTD = dataMetaYTD+valore.valor; 
              }
              if(dataMetaYTD <0){
                dataMetaYTD =0;
                mtd = 0;
              }
  
              var fechas = this.setFechasLimites(datos.fe_desde,datos.fe_hasta);
              ckpiYTDMeta = (dataMetaYTD*fechas[2])/(fechas[3]);
              ckpiMTDMeta = (mtd*fechas[0])/(fechas[1]);
              if(last>=1000){
                ckpiYTDMeta = Number((this.truncar(ckpiYTDMeta,0)/1000).toFixed(2));
                ckpiMTDMeta = Number((this.truncar(ckpiMTDMeta,0)/1000).toFixed(2));
              }
            }
              
            } else if (datos.co_indic_catg == 4 && datos.co_indic_tipo != Globals.PRODUCCION) {
              if (datos.co_metrica == Globals.CKPI_ANO) {
                var numero = JSON.parse("[" + datos.ds_val + "]");

                for (var valores of numero) {
                  ckpiYTDMeta = this.truncar(valores.valor, 2, this.tipoIndicador);
                }
              } else if(datos.co_metrica == Globals.CKPI_MES) {
                var numero = JSON.parse("[" + datos.ds_val + "]");

                for (var valores of numero) {
                  ckpiMTDMeta = this.truncar(valores.valor, 2, this.tipoIndicador);
                }
              }
            }
            contadorIndicadores++;
          }
          if(this.datos.length == 1){
                arreglo = -1 ;
          }
          if (
            contadorIndicadores == 6 ||
            this.datos[contador + arreglo].nb != actualIndic ||
            (this.datos[contador + arreglo].nb == actualIndic &&
              index == this.datos.length - 1)
          ) {
            series.push([
              {name: actualIndic ,  dsnick: datos.ds_nick_nodo , data: data, color: this.setColores[contadorColores],  regression: true },
              {
                name: actualIndic,
                data: [[periodoObs, ckpiMTD]],
                pointStart: data.length,
                type: "column",
                color: colorMTD,
                zIndex: 100,
                yAxis: dualaxis,
                showInLegend: false, 
              },
              {
                name: actualIndic,
                data: [["YTD", ckpiYTD]],
                pointStart: data.length + 1,
                type: "column",
                color: colorYTD,
                zIndex:100,
                yAxis: dualaxis,
                showInLegend: false, 
               
              }, {
                name: "Meta",
                color: "#CDCDCD",
                type: "column",
                pointPadding: 0,
                pointPlacement: -0.05,
                yAxis:dualaxis,
                data: [
                  { y: ckpiMTDMeta, name: periodoObs },
                  { y: ckpiYTDMeta, name: "YTD" }
                ],
                showInLegend: false, 
              },
              { data: dataMeta.slice(0,(data.length)), name:"Meta", color: "red" },
              {max:tipoEje[0],metrica:tipoEje[1], showInLegend: false }
            ]);
            if(this.tendencia){
                series.push([
                {name: 'Tendencia' ,  dsnick: datos.ds_nick_nodo , data: datosTendencia, color: '#738D9C', dashStyle: 'longdash'},
                {name:  'Rolling',  dsnick: datos.ds_nick_nodo , data:  serieRolling, color:'#5ADED4' }
                ]);
            }
            category.push(periodoObs);
            category.push("YTD");
            categories.push(category);
            data = [];
            dataMeta = [];
            category = [];
            ckpiMTDMeta = [];
            ckpiYTDMeta = [];
            contadorIndicadores = 0;
            //vaciar rolling y tendencia
            Y = 0;
            X = 0;
            XY = 0;
            Xsquared = 0;
            XsquaredAcum = 0;
            n = 1;
            a = 0;
            b = 0;
            datosTendencia = [];
            dualaxis = 0;
            contadorRolling = 0;
            primerValorRolling = 0;
            serieRolling = [];
            promedio = 0;
            suma = 0;
            rolling = 0;
    

            contadorColores++;
            if (contadorColores == this.setColores.length) {
              contadorColores = 0;
            }
          }

          index++;
          if (contador < this.datos.length - 1) contador++;
        }

        return [series, categories, titulos, tipoEje];

        break;

      

      case "simpleSerie":
        var series = [];

        var categories = [];
        var actualIndic;
        var contador = 1;
        var titulos = [];
        var contadorColores = 0;
        var data = [];
        var contador = 0;
        var ckpi = false;

        var Y = 0;
        var X = 0;
        var XY = 0;
        var Xsquared = 0;
        var XsquaredAcum = 0;
        var n = 1;
        var a = 0;
        var b = 0;
        var datosTendencia = [];
        var contadorRolling = 0;
        var primerValorRolling = 0;
        var serieRolling = [];
        var promedio = 0;
        var suma = 0;
        var bonus = false;

        var largoDatos = this.datos.length;

        var contadorMensual = false;

        for (var datos of this.datos){
            if(datos.co_indic_tipo == 21){
                bonus = true;
            }
            if (datos.co_metrica == 3 && this.analSemanal == false){
                contadorMensual = true;
            }
        }

        for (var datos of this.datos) {


          if (datos.co_indic_catg != 4){
                actualIndic = datos.ds_nick_nodo;
                this.contadorSemanas = 0;
                var category = [];
                var numero = JSON.parse("[" + datos.ds_val + "]");
                titulos.push(actualIndic);

                if (datos.co_indic_tipo != 21){

                  if(this.analSemanal){

                    var semanas = JSON.parse(localStorage.getItem('semanas'));
                    var numeroAcotado = [];
    
                    for ( var i = 0; i < semanas.length; i++){
    
                      for (var valores of numero) {
    
                        var fecha = valores.desde;
    
                        var fechaArray = fecha.split('-');
    
                        if(semanas[i] == moment([fechaArray[2],fechaArray[1] - 1, fechaArray[0]]).week()){
                            numeroAcotado.push(valores);
                            break;        
                        }
    
                      }
                       
    
                    }
    
                    numero = numeroAcotado;
    
                    // numero = numero.slice(semanas[0] - 1,semanas[semanas.length - 1]);
    
                }

                  var nombreDato = this.indicadorNombreANumero(this.tipoIndicador);

                      for (var valores of numero) {
                        this.contadorSemanas++;

                        category.push(
                          // this.traducirFechaALetra(valores.desde, datos.co_metrica)
                          null
                        );
                        data.push({x: Date.UTC(valores['desde'].substring(6,10), Number(valores['desde'].substring(3,5)) - 1,valores['desde'].substring(0,2) ) , y: this.truncar(valores.valor, 2, nombreDato)});

                        if(this.tendencia && largoDatos == 2){
    
                          Y += this.truncar(valores.valor, 2, nombreDato);
                          X += n;
                          XY += n*this.truncar(valores.valor, 2, nombreDato);
                          XsquaredAcum += n**2;
     
                          n++; 
         
                        }

                        if(this.rolling && largoDatos == 2){
    
                           var values = this.truncar(valores.valor, 2, nombreDato);

                          contadorRolling ++;

                          suma += values;
                          if(contadorRolling == 1 && serieRolling.length > 0){
                            suma = suma-primerValorRolling;
                          }
                          if(contadorRolling == 1){
                            primerValorRolling = values;
                          }
                          

                          if((contadorRolling == 3 && numero.length > 2 && serieRolling.length == 0) || numero.length > 2 && serieRolling.length > 0){

                              promedio = suma/3;

                              serieRolling.push({x: Date.UTC(valores['desde'].substring(6,10), Number(valores['desde'].substring(3,5)) - 1,valores['desde'].substring(0,2) ) , y: this.truncar(promedio, 2, nombreDato)});

                              contadorRolling = 0;

                          }
                          else if(numero.length == 1){

                            serieRolling.push({x: Date.UTC(valores['desde'].substring(6,10), Number(valores['desde'].substring(3,5)) - 1,valores['desde'].substring(0,2) ) , y: this.truncar(values, 2, nombreDato)});

                          }
                          else if(numero.length == 2 && contadorRolling == 2 ){

                            promedio += values;
                            if(contadorRolling == 2){

                              promedio = promedio/2;
                              serieRolling.push({x: Date.UTC(valores['desde'].substring(6,10), Number(valores['desde'].substring(3,5)) - 1,valores['desde'].substring(0,2) ) , y: this.truncar(promedio, 2, nombreDato)});

                            }
                          }
         
                        }

                      }

                      if ((datos.co_metrica != 3 && datos.co_metrica != 2) || largoDatos == 1 || bonus == false){
                          contador++;
                      }
                      contador++;
                }

                else{

                    if(!this.analSemanal){

                        var nombreDato = this.indicadorNombreANumero(this.tipoIndicador);

                        if(numero[0]['to'].substring(0,4).includes('-')){
                            data.push({x: Date.UTC(numero[0]['to'].substring(6,10), Number(numero[0]['to'].substring(3,5)) - 1, numero[0]['to'].substring(0,2) ) , y: this.truncar(numero[0].data[nombreDato], 2, nombreDato)});
                            if(this.tendencia && largoDatos == 1){
      
                              Y += this.truncar(valores.valor, 2, nombreDato);
                              X += n;
                              XY += n*this.truncar(valores.valor, 2, nombreDato);
                              XsquaredAcum += n**2;
        
                              n++; 
            
                            }
                        }
                        else{
                            data.push({x: Date.UTC(numero[0]['to'].substring(0,4), Number(numero[0]['to'].substring(5,7)) - 1,numero[0]['to'].substring(8,10) ) , y: this.truncar(numero[0].data[nombreDato], 2,nombreDato)});
                            if(this.tendencia && largoDatos == 1){
      
                              Y += this.truncar(valores.valor, 2, nombreDato);
                              X += n;
                              XY += n*this.truncar(valores.valor, 2, nombreDato);
                              XsquaredAcum += n**2;
        
                              n++; 
            
                            }
                        }
                        ckpi = true;

                        if(contadorMensual == false){
                          contador++;
                        }
                    }

                      contador++;
                     
                }

                


                if (contador == 2){

                    if (ckpi == true){
                          data.sort(function(a, b) {
                            return a.x - b.x;
                          });
                    }

                    if(this.tendencia && largoDatos == 2){
                          n--;
                          Xsquared = X**2;
        
                          b = (XY - (X*Y)/n)/(XsquaredAcum - Xsquared/n);
                          a = Y/n - ((X/n)*b);
        
                          
                          var z = 1;
        
                          for(var cantidad of data){
        
                              let dato = a + z*b;
        
                              datosTendencia.push({x: cantidad.x , y: this.truncar(dato, 2, nombreDato)});
        
                              z++;
        
                          }

                          series.push({
                            name: 'Tendencia',
                            data: datosTendencia,
                            color: '#738D9C',
                            dashStyle: 'longdash'
                          });
    
                    }

                    if(this.rolling && largoDatos == 2){
                      

                        series.push({
                          name: 'Rolling',
                          data: serieRolling,
                          color: '#5ADED4'
                        });

                    }
                   
                    series.push({
                      name: datos.nb,
                      data: data,
                      color: this.setColores[contadorColores],
                      siguiente: 2,
                    //   pointStart: Date.UTC(2019, 0, 1),
                    //    pointInterval: 24 * 3600 * 1000 * mult // one day
                    });

                    contadorColores++;
                    if (contadorColores == this.setColores.length) {
                      contadorColores = 0;
                    }


                    categories.push(category);
                    data = [];
                    contador = 0;

                }
              }
      }

        //return [series, categories, titulos];

        return [series, categories[0], titulos];

        break;

      case "confiabilidad":
        var series = [];

        var categories = [];
        var actualIndic;
        var contador = 1;
        var titulos = [];
        var contadorColores = 0;

        for (var datos of this.datos) {
          actualIndic = datos.ds_nick_nodo;
          var data = [];
          this.contadorSemanas = 0;
          var category = [];
          var numero = JSON.parse("[" + datos.ds_val + "]");
          titulos.push(actualIndic);

          // for (var toNumero of numero[0].data){

          //     toNumero[0] = Number(toNumero[0]);
          //     toNumero[1] = this.truncar(Number(toNumero[0]).valor,2);

          // }

          contadorColores++;
          if (contadorColores == this.setColores.length) {
            contadorColores = 0;
          }

          for ( key in numero[0].data ){
            
            numero[0].data[key][1] = numero[0].data[key][1] * 100;
            numero[0].data[key][0] = this.truncar(numero[0].data[key][0], 0);
            
          }

          series.push({
            name: datos.nb,
            data: numero[0].data,
            color: this.setColores[contadorColores],
            siguiente: 2
          });

          categories.push(category);
        }

        return [series, categories, titulos];

        break;

        case "gauge":
        //poner steps del gauge
   
        var valores = [];
        var valoresMeta = [];
        var metas = [];
        var serie = [];
        var indicatorOrder = [];
        var indicatorOrderText = [];
        var max = [];
        var produccion;
        var nombresOrden = [];
        
        var data = {"proceso": ""};

        for(var indc of Globals.INDICADORES){
          indicatorOrder.push(indc[2]);
          indicatorOrderText.push(indc[1]);
          valores.push(0);
          max.push(0);
        }
   
        for (var key2 of Globals.INDICADORES) {
          valoresMeta.push(0);
        }
   
        for (var data of this.datos) {

          if (data.co_indic_tipo == Globals.CKPI && data.co_indic_catg != 4) {

            
            var numeros = JSON.parse(data.ds_val);
   
            for (var key2 of Globals.INDICADORES) {
              
              var indexNum = indicatorOrderText.findIndex((element) => {
                return (element == key2[1] );
              });
            
              if (key2[1] != 'prod' ){
                  if( indexNum != "-1"){
                      valores[indexNum] = this.truncar(numeros["data"][key2[1]], 2, key2[1]);
                  }
              }
            }
          } else if((data.co_indic_tipo != Globals.PRODUCCION && data.co_indic_catg == 4 && data.co_metrica == Globals.CKPI_ANO) || (data.co_indic_tipo != Globals.PRODUCCION && data.co_indic_catg == 4 && data.co_metrica == Globals.CKPI_MES) ) {
            //  valoresMeta.push(80);
            var indexNum = indicatorOrder.findIndex((element) => {
              return (element == data.co_indic_tipo);
            });
   
            var numero = JSON.parse("[" + data.ds_val + "]");
   
              for (var numero of numero) {
                //valoresMeta.push(this.truncar(numero.valor, 2));
                if(!numero.valor){
                  numero.valor = 0;
                }
                if( indexNum != "-1"){
                    valoresMeta[indexNum] = this.truncar(numero.valor, 2, key2[1]);
                }
              }
           }else if (data.co_indic_catg == 1 && data.co_metrica == Globals.MENSUAL){
              if (data.co_indic_tipo == Globals.PRODUCCION){
                var numero = JSON.parse("[" + data.ds_val + "]");
                var suma = 0;
                if (this.today == "MTD"){
                  suma = numero[numero.length - 2].valor;
                
                  if (suma < 0){
                    suma = 0;
                  }
                }else if(this.today == 'YTD'){
                  suma = numero[numero.length - 1].valor;
                
                  if (suma < 0){
                    suma = 0;
                  }
                }
                var indexNum = indicatorOrder.findIndex((element) => {
                  return (element == data.co_indic_tipo);
                });
                if( indexNum != "-1"){
                   valores[indexNum] = this.truncar(suma, 2, key2[1]);
                }
              }
            } else if(data.co_indic_catg == 4 && data.co_metrica == Globals.MENSUAL){
                if (data.co_indic_tipo == Globals.PRODUCCION){
                  var numero = JSON.parse("[" + data.ds_val + "]");
                  var suma = 0;
                  var fechas = this.setFechasLimites(data.fe_desde,data.fe_hasta);
                  var limite =0;
                  if (this.today == "MTD"){
                    suma = numero[numero.length - 1].valor;
                  if (suma < 0){
                    suma = 0;
                  }
                  limite= (suma*fechas[0])/(fechas[1]);
                  
                }else if(this.today == 'YTD'){
                  for(numeros of numero){
                    suma = suma + numeros.valor;
                  }
                  if (suma < 0){
                    suma = 0;
                  }
                  limite = (suma*fechas[2])/(fechas[3]);
                }
                var indexNum = indicatorOrder.findIndex((element) => {
                  return (element == data.co_indic_tipo);
                });
                if( indexNum != "-1"){
                    max[indexNum] = this.truncar(suma,2, key2[1]);
                    valoresMeta[indexNum] = this.truncar(limite, 2, key2[1]);
                }
              }
            }
          }
   
        var count = 0;
        var values = 0;

          for (let valor in valores) {

            if(this.datos.length > 0){
              if(Globals.INDICADORES[valor][3] != undefined){
                  if(Globals.INDICADORES[valor][3].indexOf(data.co_proceso) != -1){
                      continue;
                  }
              }
              nombresOrden[valor] = Globals.INDICADORES[valor][0];
            }

          serie.push([
            {
              data: [
                {
                  name: "Meta",
                  radius: 100,
                  innerRadius: 55,
                  y: valoresMeta[valor],
                  color: this.colorGaugeMeta
                },
                {
                  name: "Cumplimiento",
                  radius: 100,
                  innerRadius: 60,
                  y: valores[valor],
                  color: this.colorGauge,
                  max: max[valor],
                  indicador:nombresOrden[valor] ,
                  indicadorType: Globals.INDICADORES[valor][1] ,
                  idProceso: data.co_proceso,
                  nbProceso: data.nb,
                  indicType: (Globals.GAUGENAMES[count] == 'Producción' ? 'Ton' : '%')
                }
              ]
            }
          ]);
          count++;
        }
   
        return serie;

      case "gaugeProd":

          var mtd=0;

          var mtds = [];
          var ytds = [];

          var metaMTD=0;
          var metasYTD = [];
          var metasMTD = [];
          var numero=0;
          var suma=0;
          var valores=[];
          var valoresMeta=[];
          var limiteMTD=0;
          var limiteYTD=0;
          
          

          var serie =0;
          var serie = [];
          
          var aux = "";

          var indicatorOrder = [];
          var indicatorOrderText = [];

          var nicks = [];
          var nbs = [];
          var desdes = [];
          var hastas = [];
          var indexNum;
          var data;
          var cont =0;

          for(data of this.datos){
            if(data.co_indic_catg == 1 && data.co_metrica == Globals.MENSUAL){
              if(aux != data.ds_nick_nodo){
                indicatorOrder.push(cont); 
                indicatorOrderText.push(data.ds_nick_nodo);
                nicks.push(data.ds_nick_nodo);
                nbs.push(data.nb)
                metasMTD.push(0);
                metasYTD.push(0);
                desdes.push("00-00-00 00:00:00.000");
                hastas.push("00-00-00 00:00:00.000");
                mtds.push(0);
                ytds.push(0);
                aux = data.ds_nick_nodo;
                cont = cont+1;
              }
            }
          }
          
          for(data of this.datos){
            indexNum = indicatorOrderText.findIndex((element) =>{
              return (element == data.ds_nick_nodo);
            });
            numero = JSON.parse("[" + data.ds_val + "]");
            suma = 0;
            if(data.co_metrica == Globals.MENSUAL && data.co_indic_catg == 4){
              
                metaMTD = numero[numero.length - 1].valor;
                
                for(numeros of numero){
                  suma = suma + numeros.valor;
                }

                if (suma < 0){
                  suma = 0;
                  metaMTD  = 0;
                }
                metasMTD[indexNum] = this.truncar(metaMTD ,0)
                metasYTD[indexNum] = this.truncar(suma, 0);
                desdes[indexNum] = data.fe_desde;
                hastas[indexNum] = data.fe_hasta;
            }else if (data.co_metrica == Globals.MENSUAL && data.co_indic_catg == 1){

                suma = numero[numero.length - 1].valor;

                mtd = numero[numero.length - 2].valor;

                if (suma < 0){
                  suma = 0;
                  mtd = 0;
                }
                ytds[indexNum] = this.truncar(suma, 0);
                mtds[indexNum] =  this.truncar(mtd, 0);
          
            }
          }

          var maximoMTD;
          var maximoYTD;
          var fechas;
          var i;
          for(i of indicatorOrder){
            
            if(metasMTD[i]==0){
              maximoMTD =mtds[i];
            }else{
              maximoMTD = metasMTD[i];
            }
            if(metasMTD[i]==0){
              maximoYTD =ytds[i];
            }else{
              maximoYTD = metasYTD[i];
            }
            fechas = this.setFechasLimites(desdes[i],hastas[i]);
            limiteMTD = (maximoMTD*fechas[0])/(fechas[1]);
            limiteYTD = (maximoYTD*fechas[2])/(fechas[3]);
            serie.push([
              {
                data: [
                  {
                    name: "Meta",
                    radius: 100,
                    innerRadius: 55,
                    y: limiteMTD,
                    color: this.colorGaugeMeta
                  },
                  {
                    //name: "Cumplimiento",
                    radius: 100,
                    innerRadius: 60,
                    y: mtds[i],
                    color: this.colorGauge,
                    indicType: 'Ton',
                    title: 'MTD',
                    name: nbs[i],
                    nick: nicks[i],
                    max: maximoMTD

                  }
                ]
              }
            ]);

            serie.push([
              {
                data: [
                  {
                    name: "Meta",
                    radius: 100,
                    innerRadius: 55,
                    y: limiteYTD,
                    color: this.colorGaugeMeta
                  },
                  {
                    // name: "Cumplimiento",
                    radius: 100,
                    innerRadius: 60,
                    y: ytds[i],
                    color: this.colorGauge,
                    indicType: 'Ton',
                    title: 'YTD',
                    name: nbs[i],
                    max:maximoYTD
                  }
                ]
              }
            ]);

          }
          
          return serie;



      case "oee":
        //utilizar indicador de tiempo nuevo
        var cat = [];
        var clasif = [];
        var catFinales = [];
        var nombresCat = [];
        for (var key of this.modeloTiempoFNP){

            // if(key.nodo == this.proceso){

                var modeloUsar = key.filtro;
                for ( var i = 0; i < key.filtro.length; i++ ){
                  cat[key.filtro[i]] = key.cat[i];
                  clasif[key.filtro[i]] = key.clasif[i];
                  nombresCat[key.filtro[i]] = key.nb[i];
                }
                


            // } 

        }

        var colorInicioFin = "#285367";
        var colorIntermedio = "#dc272d";

        var serieTotal = [];

        this.datosOEE = this.datos;

        for (var oees of this.datos) {
          var data = [];
          var restas = [];
          var counter = 0;
          var prev = 0;
          var serie = [];

          var numero = JSON.parse(oees["ds_val"]);

          for (var datos of numero.data) {
            //if (modeloUsar.includes(datos.name) == true && Number(datos.hours) != 0) {
              if (modeloUsar.includes(datos.name) == true) {
              data.push(datos);
              catFinales.push(cat[datos.name]);
              var datosNumero = this.truncar(Number(datos.hours), 2, this.tipoIndicador[0]);

              if (counter == 0 || clasif[datos.name] == 1) {
                restas.push(
                  JSON.parse(
                    '{"high":' +
                      datosNumero +
                      ',"low":' +
                      0 +
                      ',"color":"#285367"' + ',"nb":"' + nombresCat[datos.name] + '"}'
                  )
                );
              } else if (counter == modeloUsar.length - 1) {
                restas.push(
                  JSON.parse(
                    '{"high":' +
                      prev +
                      ',"low":' +
                      0 +
                      ' ,"color":"#285367"' + ',"nb":"' + nombresCat[datos.name] + '"}'
                  )
                );
              } else {
                if (prev == 0) {
                  restas.push(
                    JSON.parse(
                      '{"high":' +
                        datosNumero +
                        ',"low":' +
                        0 +
                        ',"color":"rgb(230 84 0)"' + ',"nb":"' + nombresCat[datos.name] + '"}'
                    )
                  );
                } else {
                  restas.push(
                    JSON.parse(
                      '{"high":' +
                        prev +
                        ',"low":' +
                        this.truncar(Math.abs(prev - datosNumero), 2, this.tipoIndicador[0]) +
                        ',"color":"rgb(230 84 0)"' + ',"nb":"' + nombresCat[datos.name] + '"}'
                    )
                  );
                }
              }
              if (counter == 0 || counter == modeloUsar.length - 1 || clasif[datos.name] != 1){
                  prev = this.truncar(Math.abs(prev - datosNumero), 2, this.tipoIndicador[0])
               }
              counter++;
            }
          }

          if (counter != modeloUsar.length - 1){
              restas[restas.length - 1].color = "#285367";
          }

          serieTotal.push({ name: oees["nb"], data: restas });
        }

        return [serieTotal, catFinales];

      case "versus":
        var colorInicioFin = "rgb(0, 117, 141)";
        var colorVar = "rgb(92, 92, 97)";

        var categories = [];
        var serieCompleta = [];
        var counter = 0;
        var Y = 0;
        var X = 0;
        var XY = 0;
        var Xsquared = 0;
        var XsquaredAcum = 0;
        var n = 1;
        var a = 0;
        var b = 0;
        var datosTendencia = [];
        var contadorRolling = 0;
        var primerValorRolling = 0;
        var serieRolling = [];
        var promedio = 0;
        var suma = 0;
        var rolling = 0;

        for (var datos of this.datos) {

          if(datos == undefined){
              continue;
          }

          if (datos.co_indic_catg != 4 && datos.co_indic_tipo != Globals.CKPI){

          var data = [];

          var numero = JSON.parse("[" + datos.ds_val + "]");

          if(this.analSemanal){

            var semanas = JSON.parse(localStorage.getItem('semanas'));
            var numeroAcotado = [];

            for ( var i = 0; i < semanas.length; i++){

              for (var valores of numero) {

                var fecha = valores.desde;

                var fechaArray = fecha.split('-');

                if(semanas[i] == moment([fechaArray[2],fechaArray[1] - 1, fechaArray[0]]).week()){
                    numeroAcotado.push(valores);
                    break;        
                }

              }
               

            }

            numero = numeroAcotado;

            // numero = numero.slice(semanas[0] - 1,semanas[semanas.length - 1]);

        }

          for (var valores of numero) {

            if (counter == 0){
                  categories.push(
                    this.traducirFechaALetra(valores.desde, datos.co_metrica)
                  );
            }
            data.push({y: this.truncar(valores.valor, 2, this.tipoIndicador[0])});

            
            if(this.tendencia && counter == 0){
    
              Y += this.truncar(valores.valor, 2, this.tipoIndicador[0]);
              X += n;
              XY += n*this.truncar(valores.valor, 2, this.tipoIndicador[0]);
              XsquaredAcum += n**2;

              n++; 

            }

            if(this.rolling && counter == 0){
    
              var values = this.truncar(valores.valor, 2, this.tipoIndicador[0]);

             contadorRolling ++;

             suma += values;
             if(contadorRolling == 1 && serieRolling.length > 0){
               suma = suma-primerValorRolling;
             }
             if(contadorRolling == 1){
               primerValorRolling = values;
             }
             

             if((contadorRolling == 3 && numero.length > 2 && serieRolling.length == 0) || numero.length > 2 && serieRolling.length > 0){

                 promedio = suma/3;

                 serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador[0])]);

                 contadorRolling = 0;

             }
             else if(numero.length == 1){

               serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador[0])]);

             }
             else if(numero.length == 2 && contadorRolling == 2 ){

               promedio += values;
               if(contadorRolling == 2){

                 promedio = promedio/2;
                 serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador[0])]);

               }
             }

             rolling++;

           }

          }

          if (counter == 1) {
            var serie = {
              name: this.nombreSerie[1],
              type: "spline",
              yAxis: this.versusAxis,
              data: data,
              tooltip: { valueSuffix: this.tooltipFormat },
              color: this.setColores[1]
            };
            counter++;
          }

          if (counter == 0) {
                
            var serie = {
              name: this.nombreSerie[0],
              type: "spline",
              data: data,
              tooltip: { valueSuffix: this.tooltipFormat },
              color: this.setColores[0]
            };


            counter++;
          }

          serieCompleta.push(serie);
        } 

        if(datos.co_indic_tipo == Globals.CKPI && datos.co_metrica == 6){

          var numero = JSON.parse("[" + datos.ds_val + "]");

          var saveCKPIMTD = numero;

        }
        if(datos.co_indic_tipo == Globals.CKPI && datos.co_metrica == 5){

          var numero = JSON.parse("[" + datos.ds_val + "]");

          var saveCKPIYTD = numero;

        }
        
      }

      //union month to date

      if(saveCKPIMTD){

          

          if (this.tipoIndicador.length > 1){

            if(serieCompleta.length == 0){

                  var serie = {
                    name: this.nombreSerie[0],
                    type: "spline",
                    data: [],
                    tooltip: { valueSuffix: this.tooltipFormat },
                    color: this.setColores[0]
                  };
                  var serie2 = {
                    name: this.nombreSerie[1],
                    type: "spline",
                    yAxis: this.versusAxis,
                    data: [],
                    tooltip: { valueSuffix: this.tooltipFormat },
                    color: this.setColores[1]
                  };

                  serieCompleta.push(serie);
                  serieCompleta.push(serie2);

            }

            for (var i = 0; i < this.tipoIndicador.length; i++){

                for (var valores of saveCKPIMTD) {

                  if ( i == 0 ){
                        categories.push(
                          this.traducirFechaALetra(valores.to, Globals.MENSUAL) + '(MTD)'
                        );
                  }
                  serieCompleta[i].data.push({y:this.truncar(valores.data[this.tipoIndicador[i]], 2,this.tipoIndicador[i])});
                
                }

          }

          }
          else{

            if(serieCompleta.length == 0){

              var serie = {
                name: this.nombreSerie[0],
                type: "spline",
                data: [],
                tooltip: { valueSuffix: this.tooltipFormat },
                color: this.setColores[0]
              };
              serieCompleta.push(serie);
              
            }


            for (var valores of saveCKPIMTD) {

              categories.push(
                this.traducirFechaALetra(valores.to, Globals.MENSUAL)  + '(MTD)'
              );
              serieCompleta[0].data.push({y:this.truncar(valores.data[this.tipoIndicador[0]], 2,this.tipoIndicador[0])});

              if(this.tendencia && counter == 1){
    
                Y += this.truncar(valores.data[this.tipoIndicador[0]], 2,this.tipoIndicador[0]);
                X += n;
                XY += n *this.truncar(valores.data[this.tipoIndicador[0]], 2,this.tipoIndicador[0]);
                XsquaredAcum +=n**2;
  
                n++; 
  
              }

              if(this.rolling && counter == 1){
    
                var values = this.truncar(valores.data[this.tipoIndicador[0]], 2, this.tipoIndicador[0]);
  
               contadorRolling ++;
  
               suma += values;
               if(contadorRolling == 1 && serieRolling.length > 0){
                 suma = suma-primerValorRolling;
               }
               if(contadorRolling == 1){
                 primerValorRolling = values;
               }
               
  
               if((contadorRolling == 3 && numero.length > 2 && serieRolling.length == 0) || numero.length > 2 && serieRolling.length > 0){
  
                   promedio = suma/3;
  
                   serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador[0])]);
  
                   contadorRolling = 0;
  
               }
               else if(numero.length == 1){
  
                 serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador[0])]);
  
               }
               else if(numero.length == 2 && contadorRolling == 2 ){
  
                 promedio += values;
                 if(contadorRolling == 2){
  
                   promedio = promedio/2;
                   serieRolling.push([rolling,this.truncar(promedio, 2, this.tipoIndicador[0])]);
  
                 }
               }
  
               rolling++;
  
             }
            
            }

            if(this.tendencia && counter == 1){
              n--;
              Xsquared = X**2;

              b = (XY - (X*Y)/n)/(XsquaredAcum - Xsquared/n);
              a = Y/n - ((X/n)*b);

              
              var z = 1;

              for(var cantidad of serieCompleta[0].data){

                  let dato = a + z*b;

                  datosTendencia.push({x: cantidad.x , y: this.truncar(dato, 2, this.tipoIndicador[0])});

                  z++;

              }

              serieCompleta.push({
                name: 'Tendencia',
                data: datosTendencia,
                color: '#738D9C',
                dashStyle: 'longdash'
              });

            }

            if(this.rolling && counter == 1){
                      

              serieCompleta.push({
                name: 'Rolling',
                data: serieRolling,
                color: '#5ADED4',
              });

          }



          }

        }
        if(saveCKPIYTD){

          for (var valores of saveCKPIYTD) {

            categories.push(
              'YTD'
            );
            serieCompleta.push({name:'YTD',data:[this.truncar(valores.data[this.tipoIndicador[0]], 2,this.tipoIndicador[0])],color:this.setColores[0],type:'column', pointStart:serieCompleta[0].data.length, yAxis:1});
          }
          
        }

            

        return [serieCompleta, categories];

      case "failuremode":
        var series = this.datos;
        var seriesTotal = [];
        var seriesTotalArreglada = [];
        var seriesTotalNames = [];
        var seriesNamesSub = [];

        var order = [];
        var orderFinal = [];

        var paretoDetected = [];
        var paretoCount = 0;
        var counter = 0;
        var overridingType = 0;
        
        var nickOnombre;

        // const parser = clarinet.parser();
        const result = [];
        var result2 = {};
        // parser.onvalue = function (v) {
        //   // got some value.  v is the value. can be string, double, bool, or null.
        //   console.log(v)
        // };
        // parser.onopenobject = function (key,v) {
        //   // opened an object. key is the first key.
        //   console.log(key,v)
        // };
        var llave;
        // parser.onopenobject = k => {
          
        //     if (parser.depth == 0){
        //         llave = k;
        //         result2[llave] = {};
        //     }

        //     parser.onvalue = v => {
        //       if( result2[llave][k] == undefined){
        //         result2[llave][k] = 0;
        //       }
        //         result2[llave][k] += v;
        //     };
        // };
        // parser.onvalue = v => {
        //     result[result.length - 1].value = v;
        // };
       

        for (var i = 0; i < series.length; i++) {
          var seriesFin = [];
          var result2 = {};
          var numero = JSON.parse("[" + series[i].ds_val + "]");
          var arregloString = series[i].ds_val.split('},'); 
          var counter = 0;
          for ( var key of arregloString){

            if(counter == 0){
              
              if(arregloString.length > 1){
               
                key = key + '}}';
              }
              
            }
            else if( counter == arregloString.length - 1){
              key = '{' + key ;
            }
            else{
              key = '{' + key ;
              key = key + '}}';
            }

            // parser.write(key).close();
             var jsonIndividual = JSON.parse(key);

             for( var jsonI in jsonIndividual){
                  var llave = jsonI;
                  if(result2[llave] == undefined){
                    result2[llave] = {};
                  }

                for (var JsonI2 in jsonIndividual[jsonI]){
                  if(result2[jsonI][JsonI2] == undefined){
                    result2[jsonI][JsonI2] = 0;
                  }
                    result2[jsonI][JsonI2] += jsonIndividual[jsonI][JsonI2];
                }
               

             }

            counter++;
          }
          
        //  console.log(result2);
          var numero3 = result2;
          var numero = numero3;
          // var numero = numero[0];
          // Se agregan todos los modos de falla
          var failureModes = numero3;

          for (var key in failureModes) {
            var alternativeCounter = 0;
            var series3 = [];
            var k = key.toUpperCase();
            var series2 = [];
            var tempOrder = [];

            if ($.inArray(k, paretoDetected) === -1) {
              paretoDetected.push(k.toUpperCase());
              tempOrder[0] = k.toUpperCase();
              series2[0] = tempOrder[0];

              //series2[0] = counter;

              //counter++;

              // tempOrder[1] = Math.round(numero[key][this.tipoColumnaAgrupada]);
              tempOrder[1] = this.truncar(numero[key][this.tipoColumnaAgrupada], 0);
              order.push(tempOrder);
            } else {
              alternativeCounter = paretoDetected.indexOf(k);
              series2[0] = k.toUpperCase();
              //series2[0] = alternativeCounter;

              for (var j = 0; j < order.length; j++) {
                if (order[j][0] == series2[0]) {
                  // order[j][1] += Math.round(numero[key][this.tipoColumnaAgrupada]);
                  order[j][1] += this.truncar(numero[key][this.tipoColumnaAgrupada], 0);
                }
              }
            }
            //series[i]['failureCount'] += failureModes[key].q;

            // series2[1] = Math.round(numero[key][this.tipoColumnaAgrupada]);
            series2[1] = this.truncar(numero[key][this.tipoColumnaAgrupada], 0);

            series3.push(series2);

            if($.inArray(series[i].co_proceso,Globals.CLASIFICACIONPROCESO.mina) != -1){
                nickOnombre = series[i].nb;
            }
            else{
                nickOnombre = series[i].ds_nick_nodo;
            }

            var inside = $.inArray(nickOnombre, seriesTotalNames);

            if (inside === -1) {
              seriesNamesSub = [];

              seriesFin["name"] = nickOnombre;

              seriesFin["data"] = series3;
              seriesTotal.push(seriesFin);
              seriesTotalNames.push(nickOnombre);
              seriesNamesSub.push(k.toUpperCase());
            } else {
              var insideData = $.inArray(k, seriesNamesSub);

              if (insideData === -1) {
                seriesTotal[inside].data.push(series2);
                seriesNamesSub.push(k.toUpperCase());
              } else {
                for (var h = 0; h < seriesTotal[inside].data.length; h++) {
                  if (seriesTotal[inside].data[h][0] == series2[0]) {
                    seriesTotal[inside].data[h][1] += series2[1];
                  }
                }
              }
            }
          }

          // Conteo general para suma al 100%
        }

        order.sort(function(a, b) {
          return b[1] - a[1];
        });

        for (var i = 0; i < seriesTotalNames.length; i++) {
          for (var k = 0; k < seriesTotal[i].data.length; k++) {
            for (var h = 0; h < order.length; h++) {

              if (seriesTotal[i].data[k][0] == order[h][0]){

                  seriesTotal[i].data[k][0] = h;

                  break;

              }

              // seriesTotal[i].data[h][0] = h;
              // seriesTotal[i].data[h][1] = order[h][1];
            }
          }
        }

        var paretoDetectedFinal = [];
        // var paretoDetectedAcumulated = [];

        for (var h = 0; h < order.length; h++) {
          
          let nombre = order[h][0].split("|");
          paretoDetectedFinal.push(nombre[0]);
          //paretoDetectedAcumulated.push(order[h][1]);
        }

        // var finalSerie = [];

        // for (var serie of seriesTotal){

        //    finalSerie.push(Object.assign({}, serie));

        // }

        if (seriesTotal[0] != undefined) {
          orderFinal = seriesTotal[0].data;
          orderFinal.sort(function(a, b) {
            return a[0] - b[0];
          });
          seriesTotal[0].data = orderFinal;
        }

        return [seriesTotal, paretoDetectedFinal];

        break;

      case "jacknife":
        var counter = 0;
        var serie = [];
        var xJkPlotline = 0;
        var yJkPlotline = 0;
        var JkCounter = 0;

        for (var datos of this.datos) {

          if(datos.co_indic_tipo == Globals.JACKMODODEFALLA){
            break;
          }

          var valores = JSON.parse(datos.ds_val);

          if (valores.n == 0 || valores.mttr == 0) {
            continue;
          }

          var arreglo = {
            name: datos.nb,
            data: [
              {
                x: this.truncar(Math.log(valores.n), 0),
                y: this.truncar(Math.log(valores.mttr), 0),
                nb: datos.nb,
                xNormal: this.truncar(valores.n, 0),
                horasTotales: this.truncar(this.truncar(valores.n, 0)*this.truncar(valores.mttr, 0),0),
                yNormal: this.truncar(valores.mttr, 0),
                country: datos.nb,
                countryNick: datos.ds_nick_nodo,
                color: this.setColores[counter],
                leaf: datos.co_nodo_tipo
              }
            ]
          };
          serie.push(arreglo);
          xJkPlotline += valores.n;
          yJkPlotline += valores.mttr;
          counter++;
          JkCounter++;
          if (counter == this.setColores.length) {
            counter = 0;
          }
        }

        var xPotline = this.truncar(Math.log(xJkPlotline / JkCounter), 0);
        var yPlotline = this.truncar(Math.log(yJkPlotline / JkCounter), 0);
        var serieFinal = serie;

        return [serieFinal, xPotline, yPlotline];

        break;

      case "jacknifeFM":
        var counter = 0;
        var serie = [];
        var serie2 = [];
        var xJkPlotline = 0;
        var yJkPlotline = 0;
        var JkCounter = 0;

        for (var datos of this.datos) {

          if(datos.co_indic_tipo == Globals.JACKNIFE){
              break;
          }

          var valores = JSON.parse(datos.ds_val);

          // var llaves = Object.keys(valores);

          if (valores.n == 0 || valores.mttr == 0) {
            continue;
          }

          for (var modos in valores) {
            var arreglo = {
              name: modos,
              data: [
                {
                  x: this.truncar(Math.log(valores[modos].n), 0),
                  y: this.truncar(Math.log(valores[modos].mttr), 0),
                  xNormal: this.truncar(valores[modos].n, 0),
                  yNormal: this.truncar(valores[modos].mttr, 0),
                  nb: datos.nb,
                  horasTotales: this.truncar(this.truncar(valores[modos].n, 0)*this.truncar(valores[modos].mttr, 0),0),
                  country: modos,
                  countryNick: datos.ds_nick_nodo,
                  color: this.setColores[counter],
                  leaf: 2
                }
              ]
            };
            serie.push(arreglo);

            counter++;
            if (counter == this.setColores.length) {
              counter = 0;
            }
          }

          // xJkPlotline += valores[modos].n;
          // yJkPlotline += valores[modos].mttr;
          // JkCounter++;
        }

        var serieUnion = [];
        var jsonAjuste = {};

        for ( var union of serie){

          if(jsonAjuste[union.name] == undefined){

             jsonAjuste[union.name] = union.data[0]; 

          }
          else{

              jsonAjuste[union.name].y += union.data[0].y;
              jsonAjuste[union.name].x += union.data[0].x;
              jsonAjuste[union.name].xNormal += union.data[0].xNormal;
              jsonAjuste[union.name].yNormal += union.data[0].yNormal;
              jsonAjuste[union.name].nb += ', ' + union.data[0].nb;
              jsonAjuste[union.name].horasTotales += union.data[0].horasTotales
              jsonAjuste[union.name].country += ', ' + union.data[0].country;
              jsonAjuste[union.name].countryNick += ', ' + union.data[0].countryNick;    

          }

        }

        counter = 0;

        for (var union2 in jsonAjuste){

          var newmttr =  this.truncar(jsonAjuste[union2].horasTotales, 0)/this.truncar(jsonAjuste[union2].xNormal, 0);

            var arregloUnion = {
              name: union2,
              data: [
                {
                  x: this.truncar(Math.log(jsonAjuste[union2].xNormal), 0),
                  y: this.truncar(Math.log(newmttr)),
                  xNormal: this.truncar(jsonAjuste[union2].xNormal, 0),
                  yNormal: this.truncar(newmttr,0),
                  nb: jsonAjuste[union2].nb,
                  horasTotales: this.truncar(jsonAjuste[union2].xNormal*newmttr,0),
                  country: jsonAjuste[union2].country,
                  countryNick: jsonAjuste[union2].countryNick,
                  color: this.setColores[counter],
                  leaf: 2
                }
              ]
            };

            serie2.push(arregloUnion);

            counter++;
            if (counter == this.setColores.length) {
              counter = 0;
            }

             xJkPlotline += this.truncar(jsonAjuste[union2].xNormal, 0);
             yJkPlotline += newmttr;
             JkCounter++;

        }

        console.log(jsonAjuste);
        console.log(serie2);

        var xPotline = this.truncar(Math.log(xJkPlotline / JkCounter), 0);
        var yPlotline = this.truncar(Math.log(yJkPlotline / JkCounter), 0);
        var serieFinal = serie2;

        return [serieFinal, xPotline, yPlotline];

        break;
      
      case "metasGestion":
        var serie= [];
        var largo = this.datos.length;
        var i;
        var indicador = 900;
        for(i=0;i<largo;i++){
          var arreglo = [];
          if(datos[i][0] != indicador +i || datos[i][0] == undefined){
            arreglo.push(indicador+i);
            arreglo.push(0);
            arreglo.push(0);
            serie.push(arreglo);
          }else{
            serie.push(this.datos[i]);
          }
        }

      return serie;

      case "splineGestion":


        var categories = [];
        var serieCompleta = [];
        var counter = 0;
        var data1 = [];
        var data2 = [];
        var data3 = [];
        var data4 = [];
        var data5 = [];
        var data6 = [];
        var dataADD = [];
        var dataAcumulado = 0;
        var dataAcumulado2 = 0;
        var dataAcumulado3 = 0;
        var count =0;
        var lastIndex = this.datos.length-1;
        var metrica;
        var metas = this.metas;
        var tipoMetas = this.tipoMetas;
        var lastIndexMetas = this.metas.length -1;
        for (var datos of this.datos) {

          if(count == 0)metrica = datos.metrica;
          
          if(datos.cuarta != undefined){
            data1.push(
              this.truncar(
                ((datos.primera * 100) /
                  (datos.quinta == 0 ? 1 : datos.quinta)),
                2
              )
            );
            data2.push(
              this.truncar(
                ((datos.segunda * 100) /
                  (datos.quinta == 0 ? 1 : datos.quinta)),
                2
              )
            );
            data3.push(
              this.truncar(
                ((datos.tercera * 100) /
                  (datos.quinta == 0 ? 1 : datos.quinta)),
                2
              )
            );
            data4.push(
              this.truncar(
                ((datos.cuarta * 100) /
                  (datos.quinta == 0 ? 1 : datos.quinta)),
                2
              )
            );
            data5.push(datos.quinta);
            if(tipoMetas == "Mes"){ 
              if(datos.meta != undefined){
                data6.push(Number(this.truncar(metas[count+1]),2));
              }else{
                data6.push(Number(this.truncar(0),2));
              }
            }
          }else{
            data1.push(datos.primera);
            data2.push(datos.segunda);
            if(tipoMetas == "Mes"){ 
              if(datos.meta != undefined){
                data6.push(metas[count+1]*100);
              }else{
                data6.push(Number(this.truncar(0),2));
              }
            }
          }

          if (this.tipoIndicador == "3") {
            categories.push(this.traducirFechaALetraAlt(datos.categorias));
          } else {
            categories.push("Semana " + datos.categorias);
          }

          if (data4[0] == undefined) {
            dataAcumulado += datos.primera;
            dataAcumulado2 += datos.segunda;
            dataADD.push(
              this.truncar(
                ((datos.primera * 100) /
                  (datos.segunda == 0 ? 1 : datos.segunda)),
                2
              )
            );

          } else {
            dataAcumulado +=
              datos.primera + datos.segunda + datos.tercera + datos.cuarta;
            dataAcumulado2 += datos.quinta;
            dataAcumulado3 += this.truncar((datos.quinta)/(lastIndex+1),2);
            dataADD = data5;
          }
          count = count +1;
        }
      
        var serie = {
          name: this.nombreSerie[0],
          type: "spline",
          yAxis: 1,
          data: data1,
          tooltip: { valueSuffix: metrica },
          color: this.setColores[0]
        };
        
        var serie2 = {
          name: this.nombreSerie[1],
          type: "spline",
          yAxis: 1,
          data: data2,
          tooltip: { valueSuffix: metrica },
          color: this.setColores[1]
        };

        
        var suffix = metrica;
        if(suffix == '%'){
          suffix = "";
        }else{
          suffix = '%'
        }
        var yAxiss;
        if(data4[0] != undefined){
          yAxiss =1;
        }else{
          yAxiss = 0;
        }
        var serieADD = {
          name: this.nombreSerie[2],
          type: "spline",
          yAxis: yAxiss,
          data: dataADD,
          tooltip: { valueSuffix: suffix },
          color: this.setColores[2]
        };
        var serieMeta = {
          name: "Meta",
          type: "spline",
          yAxis: yAxiss,
          data: data6,
          tooltip: { valueSuffix: suffix },
          color: "#CDCDCD"
        }
        if(tipoMetas != "Mes") lastIndexMetas = lastIndexMetas-1;
        var dataMetaAcumulado = Number(metas[lastIndexMetas]);
        if(data4[0] == undefined ){
          dataAcumulado3 = 
            this.truncar(Number(((dataAcumulado * 100) /
              (dataAcumulado2 == 0 ? 1 : dataAcumulado2))),2)
          
          ;
          dataMetaAcumulado = dataMetaAcumulado*100;
        }

        var serieColumnMeta = {
          name: this.nombreSerie[3],
          data: [
            [
              'Acumulado + Meta',
              dataMetaAcumulado
            ]
          ],
          tooltip: { valueSuffix: suffix },
          pointStart: data1.length,
          yAxis: 0,
          maxPointWidth: 100,
          pointPadding:-0.7,
          pointPlacement: 0.10,
          
          type: "column",
          color: "#CDCDCD"
        };
      
        var serieColumn = {
          name: "Acumulado",
          data: [
            [
              "Acumulado",
              dataAcumulado3
            ]
          ],
          tooltip: { valueSuffix: suffix },
          pointStart: data1.length,
          yAxis: 0,
          maxPointWidth: 100,
          pointPadding:-0.5,
          pointPlacement: -0.17,
          type: "column",
          
          color: this.setColores[1]
        };
      
        categories.push("Acumulado");
        if (data4[0] != undefined) {
          var serie3 = {
            name: this.nombreSerie[4],
            type: "spline",
            yAxis: 1,
            data: data3,
            tooltip: { valueSuffix: metrica },
            color: this.setColores[3]
          };
          var serie4 = {
            name: this.nombreSerie[5],
            type: "spline",
            yAxis: 1,
            data: data4,
            tooltip: { valueSuffix: metrica },
            color: this.setColores[4]
          };
  
        }
        serieCompleta.push(serie);
        serieCompleta.push(serie2);
        if (data4[0] != undefined) {
          serieCompleta.push(serie3);
          serieCompleta.push(serie4);
        }
        serieCompleta.push(serieADD);
        if(data6 != [])serieCompleta.push(serieMeta);


        serieCompleta.push(serieColumnMeta);
        serieCompleta.push(serieColumn);
        


        return [serieCompleta, categories];

        break;

        

      case "pieChart":

          var contador = 0;
          var counter = 0;
          var serie = [];
          var nombre;
          var serieMini = {};
          var total = 0;
          var nombreAnterior;
          var arregloTabla = new Object();
          var seriePie = [];
          var headers = [];
          var arregloPerdidas = [];
          var seriePerdidas = [];
          var tick = 0;
          var categoria = [];
          var arregloTest = [];
          // var diccionario = [ "Ene","Feb", "Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dec"];
          var serieSumasTabla = new Object;
  
          for (var datos of this.datos) {

            if(datos.sird_key == 'DCE'){
                counter++;
                continue;
            }
            if (datos.sird_value != null){
                  var valores = JSON.parse("[" + datos.sird_month_data + "]");
            }
            else{
                  var valores  = null;
            }

            nombre = datos.nickname;

            if( arregloTest[datos.sird_key] == undefined){
              arregloTest[datos.sird_key] = 0;
            }
            arregloTest[datos.sird_key] +=  datos.sird_value;
            
            if(nombre == nombreAnterior || counter == 0){

                  if( counter == 0){

                      arregloTabla[datos.nickname] = {};
                      arregloTabla[datos.nickname]['nombre'] = datos.nickname;

                  } 

                    nombreAnterior = nombre;
                    total += datos.sird_value;

                  
                  if(arregloTabla[datos.nickname][datos.sird_key] != undefined){

                    arregloTabla[datos.nickname][datos.sird_key] += datos.sird_value;

                  }
                  else{

                    arregloTabla[datos.nickname][datos.sird_key] = datos.sird_value;

                  }

                  if (headers.indexOf(datos.sird_key) == -1){

                      headers.push(datos.sird_key);
                      arregloPerdidas[datos.sird_key] = {};

                      if (valores[0] != null ){

                        // if(valores.length > 1 ){
                            for (var datosMeses of valores){

                              arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] = datosMeses.valor; 

                            }
                        // }
                        // else{
                        //       arregloPerdidas[datos.sird_key][this.traducirFechaALetra(valores.desde, 3)] = valores.valor; 
                        // }
                      }

                  }

                  else{

                    if (valores[0] != null ){
    
                      for (var datosMeses of valores){
    
                        if(arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] != undefined){
    
                          arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] += datosMeses.valor;
    
                        }
    
                        else{
    
                          arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] = datosMeses.valor;
    
                        }
    
                      }
    
                    }
    
                  }

                if (counter == this.datos.length - 1){
                  serieMini = {nombre: nombreAnterior, total: total };
                  serie.push(serieMini);
                }



            }
            else if(counter == this.datos.length - 1 && nombreAnterior != nombre){

               //tabla
               arregloTabla[datos.nickname] = {};
               arregloTabla[datos.nickname]['nombre'] = datos.nickname;
               if(arregloTabla[datos.nickname][datos.sird_key] != undefined){

                 arregloTabla[datos.nickname][datos.sird_key] += datos.sird_value;

               }
               else{

                 arregloTabla[datos.nickname][datos.sird_key] = datos.sird_value;

               }

               if (headers.indexOf(datos.sird_key) == -1){

                headers.push(datos.sird_key);
                arregloPerdidas[datos.sird_key] = {};


                    if (valores[0] != null ){

                      for (var datosMeses of valores){

                        arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] = datosMeses.valor; 

                      }

                    }

                }
              
              else{

                if (valores[0] != null ){

                  for (var datosMeses of valores){

                    if(arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] != undefined){

                      arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] += datosMeses.valor;

                    }

                    else{

                      arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] = datosMeses.valor;

                    }

                  }

                }

              }

               //piechart

              
              serieMini = {nombre: nombreAnterior, total: total };
              serie.push(serieMini);
              total = 0;
              nombreAnterior = nombre;
              total += datos.sird_value;
              serieMini = {nombre: nombreAnterior, total: total };
              serie.push(serieMini);

            }
            else{

              //tabla
                arregloTabla[datos.nickname] = {};
                arregloTabla[datos.nickname]['nombre'] = datos.nickname;
                if(arregloTabla[datos.nickname][datos.sird_key] != undefined){

                  arregloTabla[datos.nickname][datos.sird_key] += datos.sird_value;

                }
                else{

                  arregloTabla[datos.nickname][datos.sird_key] = datos.sird_value;

                }

                if (headers.indexOf(datos.sird_key) == -1){

                  headers.push(datos.sird_key);
                  arregloPerdidas[datos.sird_key] = {};

                  if (valores[0] != null ){

                        for (var datosMeses of valores){

                          arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] = datosMeses.valor; 

                        }

                  }

                }

                else{

                  if (valores[0] != null ){
  
                    for (var datosMeses of valores){
  
                      if(arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] != undefined){
  
                        arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] += datosMeses.valor;
  
                      }
  
                      else{
  
                        arregloPerdidas[datos.sird_key][this.traducirFechaALetra(datosMeses.desde, 3).slice(0,3)] = datosMeses.valor;
  
                      }
  
                    }
  
                  }
  
                }

                //piechart

                serieMini = {nombre: nombreAnterior, total: total };
                serie.push(serieMini);
                nombreAnterior = nombre;
                total = 0;
                total += datos.sird_value;
                
              }

              counter++;
         
          }

          serie.sort(function(a, b) {
            return b.total - a.total;
          });

          var dataPie = serie.slice(0,10);
          var dataPieFinal = [];

          for (var key of dataPie){

            if (contador == 0){
               dataPieFinal.push({name:key.nombre, y: key.total,sliced: true,selected: true });
            }

            else{

                dataPieFinal.push({name:key.nombre, y: key.total});

            }

               contador++;
          }

          
          seriePie = [{
            name: 'Top 10 Equipos',
            colorByPoint: true,
            data: dataPieFinal
        }];

        

        for (var key in arregloPerdidas){

              var seriePerdidasTipo = [];
              var acumulado = 0;

              for (var key2 of this.diccionario){

                  if(arregloPerdidas[key][key2] != undefined){

                    seriePerdidasTipo.push({"name": key2 ,"y":arregloPerdidas[key][key2]});

                    acumulado += arregloPerdidas[key][key2];

                    if(tick == 0){

                      categoria.push(key2);
  
                    }

                  }

                  
              }

              seriePerdidasTipo.push({"name": "Acumulado" ,"y":acumulado});
              categoria.push('Acumulado');
              
              serieSumasTabla[key] = acumulado;

              seriePerdidas.push({ name: key, data: seriePerdidasTipo, color: this.setColores[tick] })

              tick++;

        }


  
      return [serie,seriePie,arregloTabla, headers, arregloPerdidas,seriePerdidas, categoria, serieSumasTabla, arregloTest];
        

      break;

      case 'oeeImpacto':

          var serieImpacto = [];
          var serieFinalImpacto = [];
          var datoPrevio = 0;
          var counter = 0;
          var acumulado = 0;
          var categoria = [];

          serieImpacto.push({ "high":this.variablesOeeImpacto[0],"low" : 0 , "color": "#285367" ,"nb" : this.variablesOeeImpacto[1]});
          categoria.push(this.variablesOeeImpacto[1]);
          for (var datos of this.datos[0]) {

            if(counter == 0){
                serieImpacto.push({ "high":this.variablesOeeImpacto[0],"low" : this.variablesOeeImpacto[0] - datos.total , "color": "rgb(230 84 0)" ,"nb" : datos.nombre});
                datoPrevio = this.variablesOeeImpacto[0] - datos.total;
                categoria.push(datos.nombre);
                
            }
            else if (counter > 0 && counter < 10){
                 serieImpacto.push({ "high":datoPrevio,"low" : datoPrevio - datos.total , "color": "rgb(230 84 0)" ,"nb" : datos.nombre});
                 datoPrevio = datoPrevio - datos.total;
                 categoria.push(datos.nombre);
            }
            else{

                acumulado += datos.total;

                if(counter == this.datos[0].length - 1){
                  
                    serieImpacto.push({ "high":datoPrevio,"low" : datoPrevio - acumulado , "color": "rgb(230 84 0)" ,"nb" : "Otros"});
                    categoria.push('Otros');
                    serieImpacto.push({ "high": datoPrevio - acumulado,"low" : 0 , "color": "#285367" ,"nb" :  this.variablesOeeImpacto[2]});
                    categoria.push(this.variablesOeeImpacto[2]);
                }
            }
            
            
              counter ++;
            }

          serieFinalImpacto.push({data: serieImpacto, color: this.setColores[tick] })
          

          return [serieFinalImpacto, categoria];

      break;

      case 'oeeImpacto2':

        var serieImpacto = [];
        var serieFinalImpacto = [];
        var datoPrevio = 0;
        var counter = 0;
        var acumulado = 0;
        var categoria = [];
        var arregloModelo = [];

        serieImpacto.push({ "high":this.variablesOeeImpacto[0],"low" : 0 , "color": "#285367" ,"nb" : this.variablesOeeImpacto[1]});
        categoria.push(this.variablesOeeImpacto[1]);
        
        arregloModelo = this.variablesOeeImpacto[3].slice();

        for (var corte of this.datos[3]){
          if (corte.substring(0,2) == 'MC'){
            arregloModelo.unshift(corte);
          }

        }

        for (var key of arregloModelo) {

              if(this.datos[3].indexOf(key) != -1){

                      if(counter == 0){
                          serieImpacto.push({ "high":this.variablesOeeImpacto[0],"low" : this.variablesOeeImpacto[0] - this.datos[8][key] , "color": "rgb(230 84 0)" ,"nb" : key});
                          datoPrevio = this.variablesOeeImpacto[0] - this.datos[8][key];
                          categoria.push(key);
                          
                      }
                      else if (counter < Object.keys(this.datos[8]).length){
                          serieImpacto.push({ "high":datoPrevio,"low" : datoPrevio - this.datos[8][key] , "color": "rgb(230 84 0)" ,"nb" : key});
                          datoPrevio = datoPrevio - this.datos[8][key];
                          categoria.push(key);
                      }
                      
                      
                        counter ++;
                }

          }

          
        serieImpacto.push({ "high": datoPrevio - acumulado,"low" : 0 , "color": "#285367" ,"nb" :  this.variablesOeeImpacto[2]});
        categoria.push(this.variablesOeeImpacto[2]);

        serieFinalImpacto.push({data: serieImpacto, color: this.setColores[tick] })
        

        return [serieFinalImpacto, categoria];

    break;

    case 'oeeImpacto3':

        var serieImpacto = [];
        var serieFinalImpacto = [];
        var datoPrevio = 0;
        var counter = 0;
        var acumulado = 0;
        var categoria = [];
        var arregloOrdenado = [];

        serieImpacto.push({ "high":this.variablesOeeImpacto[0],"low" : 0 , "color": "#285367" ,"nb" : this.variablesOeeImpacto[1]});
        categoria.push(this.variablesOeeImpacto[1]);

        for( var key in this.datos[8]){
            arregloOrdenado.push({ 'key': key , 'total': this.datos[8][key] }) ;
        }

        arregloOrdenado.sort(function(a, b) {
          return b.total - a.total;
        });

        for (var key of arregloOrdenado) {

              

                      if(counter == 0){

                        if(key.key == '-1'){
                          key.key = 'N/A';
                        }
                          serieImpacto.push({ "high":this.variablesOeeImpacto[0],"low" : this.variablesOeeImpacto[0] - key.total , "color": "rgb(230 84 0)" ,"nb" : key.key});
                          datoPrevio = this.variablesOeeImpacto[0] - key.total;

                          
                          categoria.push(key.key);
                          
                      }
                      else if (counter > 0 && counter < 10){

                        if(key.key == '-1'){
                          key.key = 'N/A';
                        }
                        serieImpacto.push({ "high":datoPrevio,"low" : datoPrevio - key.total , "color": "rgb(230 84 0)" ,"nb" : key.key});
                        datoPrevio = datoPrevio - key.total;
                       
                        categoria.push(key.key);
                       }
                      else{

                        acumulado += key.total;

                        if(counter == Object.keys(this.datos[8]).length - 1){

                        serieImpacto.push({ "high":datoPrevio,"low" : datoPrevio - acumulado , "color": "rgb(230 84 0)" ,"nb" : "Otros"});
                        categoria.push('Otros');


                        }


                    }
                      
                      
                        counter ++;

          }

          
        serieImpacto.push({ "high": datoPrevio - acumulado,"low" : 0 , "color": "#285367" ,"nb" :  this.variablesOeeImpacto[2]});
        categoria.push(this.variablesOeeImpacto[2]);

        serieFinalImpacto.push({data: serieImpacto, color: this.setColores[tick] })
        

        return [serieFinalImpacto, categoria];

    break;

      case 'paretoModoDeFallaImpacto':

        var serie = [];
        var serieAlt = [];
        var categoria = [];
        var arregloOrdenado = [];
        
        for( var key in this.datos[8]){
          arregloOrdenado.push({ 'key': key , 'total': this.datos[8][key] }) ;
        } 

        arregloOrdenado.sort(function(a, b) {
          return b.total - a.total;
        });

          for (var datos of arregloOrdenado){

            
              
            serie.push(this.truncar(datos.total,2));
            if(datos.key == '-1'){
              datos.key = 'N/A';
            }
            categoria.push(datos.key);
                

          }

          for (var datos2 in this.datos[2]){

              var serieCreada = [];
            
              for (var key in  this.datos[2][datos2]){

                if(this.datos[2][datos2][key] != 0){

                  if(key == 'nombre'){
                    var nombre = this.datos[2][datos2][key];
                  }
                  else{
                    if(key == '-1'){
                        key = 'N/A';
                    }
                    serieCreada.push({x: categoria.indexOf(key) , y: this.truncar(this.datos[2][datos2][((key == 'N/A')?'-1':key)],2)});
                  }

                }

              }

              serieAlt.push({
                name: nombre,
                data: serieCreada
              });

          }

          var serieFinal = {
            name: 'Hr',
            data: serie
          };

      return [[serieFinal],categoria, serieAlt]; 

      break

      case 'paretoModoDeFallaImpacto2':

        var serie = [];
        var serieAlt = [];
        var categoria = [];
        var arregloOrdenado = [];

        var valores = [];
        var equipos = [];

        for (let i = 0; i < this.datos[0].length; i++) {
          valores.push(this.datos[0][i].total);
          equipos.push(this.datos[0][i].nombre);
        }

        for (let i = 0; i < this.datos[3].length; i++) {
          var serieMDF = [];

          for (const key in this.datos[2]) {
            for (const key2 in this.datos[2][key]) {
              if (this.datos[3][i] == key2) {
                for (let j = 0; j < equipos.length; j++) {
                  if (equipos[j] == key) {

                    serieMDF.push({
                      x: j,
                      y: this.truncar(this.datos[2][key][key2],2)
                    });
                    
                  }
                }
              }
            }
          }

          serieAlt.push({
            name: this.datos[3][i],
            data: serieMDF
          });
        }

        var serieFinal = {
          name: 'Hr',
          data: valores
        };

      return [[serieFinal], equipos, serieAlt]; 

      break

      default:
        console.log("no existe este tipo de grafico");

        break;
    }
  }

  setFechasLimites(desde, hasta){
    var fechasLimites = [];
    var oneDay;
    var today;
    var todayDayYear;
    var dayToday;
    var thisDayYear;
    if(desde != "00-00-00 00:00:00.000" && hasta != "00-00-00 00:00:00.000"){ 
      oneDay = 24*60*60*1000;
      
      today = new Date(hasta);  
      todayDayYear = new Date(desde);
      dayToday = String(today.getDate()).padStart(2, '0');
      
      thisDayYear = Math.round(Math.abs((today.getTime() - todayDayYear.getTime())/(oneDay)));

      fechasLimites=[parseInt(dayToday),31,thisDayYear,365];
    }else{
      fechasLimites = [0,1,0,1];
    }
    return fechasLimites;
  }

  crearSerieSinCKPI(periodo,periodoArray,jsonIcon){
  
        var ejecutado = 0
        var ckpi ={"from":periodo.desde,"to":(periodo.hasta != 'Invalid date' ? periodo.hasta : periodo.desde), "data":{} }
        var abrIndic;
        var counter = 0;
        var ckpi_fake_mes;
        var arrayCkpiAll = [];
        var lastMont = JSON.parse(localStorage.getItem('mesesDisp'));
        var mesActual = localStorage.getItem('periodoObs');
        lastMont = lastMont[lastMont.length - 1];
        var ultimoMes = false;

        if(lastMont == mesActual){
          
          ultimoMes = true;

        }

        for(var replace of jsonIcon){

          if(counter == 0){
              var nodoActual = replace.ds_nick_nodo;
          }
          if(counter < jsonIcon.length){


            if(nodoActual != replace.ds_nick_nodo){

                if(Object.keys(ckpi.data).length >0 ){

                  var indicCKPI = JSON.stringify(ckpi);
                  var ckpi_fake = {co_indic_catg: 1, co_indic_tipo: 21,co_metrica: 5,co_proceso:  jsonIcon[counter - 1].co_proceso,ds_nick_nodo:  jsonIcon[counter - 1].ds_nick_nodo, ds_val: indicCKPI,fe_desde: jsonIcon[counter - 1].fe_desde,fe_hasta: jsonIcon[counter - 1].fe_hasta, nb: jsonIcon[counter - 1].nb,original:"fake"};
                  var ckpi_fake_mes = {co_indic_catg: 1, co_indic_tipo: 21,co_metrica: 6,co_proceso:  jsonIcon[counter - 1].co_proceso,ds_nick_nodo:  jsonIcon[counter - 1].ds_nick_nodo, ds_val: indicCKPI,fe_desde: jsonIcon[counter - 1].fe_desde,fe_hasta: jsonIcon[counter - 1].fe_hasta, nb: jsonIcon[counter - 1].nb, original: "fake"};
                  arrayCkpiAll.push({ datos :[ckpi_fake,ckpi_fake_mes], name : jsonIcon[counter - 1].ds_nick_nodo });
                  nodoActual = replace.ds_nick_nodo;
                  // jsonIcon.push(ckpi_fake);
                  ejecutado = 1
                  ckpi ={"from":periodo.desde,"to":(periodo.hasta != 'Invalid date' ? periodo.hasta : periodo.desde), "data":{} }
                }

            }

            for(var indic of Globals.INDICADORESEXTENDIDO){
                if (indic[2] == replace.co_indic_tipo){
                    abrIndic = indic[1];
                    break;
                }
            }

            var numero = JSON.parse('[' + replace.ds_val + ']');

            if(replace.co_metrica == Globals.MENSUAL && this.ckpiSemanal == false){

              for(var num of numero){

                var date = (num.desde).split('-');
                
                if(moment([date[2],date[1] - 1]).isSame([periodoArray[2],periodoArray[1] - 1])){

                    ckpi['data'][abrIndic] = num.valor;
                    break;
                }
              }

            }
            else if (replace.co_metrica == Globals.SEMANAL && this.ckpiSemanal == true){

              for(var num of numero){

                var date = (num.desde).split('-');
                
                if(moment([date[2],Number(date[1]) - 1 ,date[0]]).week() == periodoArray){

                    ckpi['data'][abrIndic] = num.valor;
                    break;
                }
              }

            }
            else if (replace.co_metrica == Globals.CKPI_ANO && ultimoMes == true){

              for(var ckpimes of jsonIcon){
                   if(ckpimes.co_metrica == 6){
                      var ckpiAlt = ckpimes.ds_val;
                   }
              }


              var ckpi_fake = {co_indic_catg: 1, co_indic_tipo: 21,co_metrica: 5,co_proceso:  jsonIcon[counter].co_proceso,ds_nick_nodo:  jsonIcon[counter].ds_nick_nodo, ds_val: ckpiAlt,fe_desde: jsonIcon[counter].fe_desde,fe_hasta: jsonIcon[counter].fe_hasta, nb: jsonIcon[counter].nb, original: "fake"};
              var ckpi_fake_mes = {co_indic_catg: 1, co_indic_tipo: 21,co_metrica: 6,co_proceso:  jsonIcon[counter].co_proceso,ds_nick_nodo:  jsonIcon[counter].ds_nick_nodo, ds_val: ckpiAlt,fe_desde: jsonIcon[counter].fe_desde,fe_hasta: jsonIcon[counter].fe_hasta, nb: jsonIcon[counter].nb, original:"fake"};
              arrayCkpiAll.push({ datos :[ckpi_fake,ckpi_fake_mes], name : jsonIcon[counter].ds_nick_nodo });
              ejecutado = 1 

            }

            

          }
          if(counter == jsonIcon.length - 1){

              if(Object.keys(ckpi.data).length >0 ){

                var indicCKPI = JSON.stringify(ckpi);
                var ckpi_fake = {co_indic_catg: 1, co_indic_tipo: 21,co_metrica: 5,co_proceso:  jsonIcon[counter - 1].co_proceso,ds_nick_nodo:  jsonIcon[counter - 1].ds_nick_nodo, ds_val: indicCKPI,fe_desde: jsonIcon[counter - 1].fe_desde,fe_hasta: jsonIcon[counter - 1].fe_hasta, nb: jsonIcon[counter - 1].nb, original:"fake"};
                var ckpi_fake_mes = {co_indic_catg: 1, co_indic_tipo: 21,co_metrica: 6,co_proceso:  jsonIcon[counter - 1].co_proceso,ds_nick_nodo:  jsonIcon[counter - 1].ds_nick_nodo, ds_val: indicCKPI,fe_desde: jsonIcon[counter - 1].fe_desde,fe_hasta: jsonIcon[counter - 1].fe_hasta, nb: jsonIcon[counter - 1].nb,original:"fake"};
                arrayCkpiAll.push({ datos :[ckpi_fake,ckpi_fake_mes], name : jsonIcon[counter - 1].ds_nick_nodo });
                // jsonIcon.push(ckpi_fake);
                ejecutado = 1
                ckpi ={"from":periodo.desde,"to":(periodo.hasta != 'Invalid date' ? periodo.hasta : periodo.desde), "data":{} }
              }

          }

          counter++;
      }

        if (ejecutado == 1){
           return [ckpi_fake, 1,ckpi_fake_mes, arrayCkpiAll];
        }
        else{
          return [ckpi_fake, ejecutado = 0,ckpi_fake_mes];
        }
      

  
  }


    valorCorrectoFiltro(valor, metrica,fecha){

        var fechaFormateada = (fecha.desde).split('');

        var numero =  JSON.parse(valor.ds_val);

        if(metrica == 'mensual'){

            var date = [moment(numero.desde).format('MM') , moment(numero.desde).format('YYYY') ];

            var valorIndicadorFinal;

            for (var key of numero){

              if(moment([date[1],date[0] - 1]).isSame([fechaFormateada[2],fechaFormateada[1] - 1])){

                valorIndicadorFinal = key.valor;
                
              }


            }

        }

        else{

          var date = [moment(numero.desde).format('DD'),moment(numero.desde).format('MM') , moment(numero.desde).format('YYYY') ];

          var valorIndicadorFinal;

          for (var key of numero){

            if(moment([date[2],date[1] - 1, date[0]]).isSame([fechaFormateada[2],fechaFormateada[1] - 1, fechaFormateada[0]])){

              valorIndicadorFinal = key.valor;
              
            }


          }


        }


        return valorIndicadorFinal;




    }


    exportarDatos(view){


      


      if(view == 'c2n1'){

          var wb = XLSX.utils.book_new();


          for (var key of this.datosSplineColumn){

            if(key.co_indic_tipo == Globals.CKPI && key.co_metrica == Globals.CKPI_ANO){

                var ws_data =  JSON.parse(key.ds_val);
                var ws_name = key.nb;
                var worksheet = wb.Sheets[ws_name];
              if (worksheet == undefined){
                  var ws = XLSX.utils.json_to_sheet([{[this.tipoIndicador]:ws_data.data[this.tipoIndicador]}],{origin : 'F3',skipHeader: true});
                  XLSX.utils.book_append_sheet(wb, ws, ws_name);
                  var worksheet = wb.Sheets[ws_name];
                  var ws = XLSX.utils.sheet_add_aoa(worksheet, [['Acumulados:']], {origin: 'E1'});
                  var ws = XLSX.utils.sheet_add_aoa(worksheet, [['YTD:']], {origin: 'E3'});
              }
              else{
                  var ws = XLSX.utils.sheet_add_aoa(worksheet, [['YTD:']], {origin: 'E4'});
                  var ws = XLSX.utils.sheet_add_json(worksheet, [{[this.tipoIndicador]:ws_data.data[this.tipoIndicador]}], {origin : 'F4',skipHeader: true});
              }


            }
            else if(key.co_indic_tipo == Globals.CKPI && key.co_metrica == Globals.CKPI_MES){

                var ws_data =  JSON.parse(key.ds_val);
                var ws_name = key.nb;
                var worksheet = wb.Sheets[ws_name];
              if (worksheet == undefined){
                var ws = XLSX.utils.json_to_sheet([{[this.tipoIndicador]:ws_data.data[this.tipoIndicador]}],{origin : 'F3',skipHeader: true});
                XLSX.utils.book_append_sheet(wb, ws, ws_name);
                var worksheet = wb.Sheets[ws_name];
                XLSX.utils.sheet_add_aoa(worksheet, [['Acumulados:']], {origin: 'E1'});
                XLSX.utils.sheet_add_aoa(worksheet, [['MTD:']], {origin: 'E3'});
              }
              else{
                var ws = XLSX.utils.sheet_add_aoa(worksheet, [['MTD:']], {origin: 'E4'});
                var ws = XLSX.utils.sheet_add_json(worksheet, [{[this.tipoIndicador]:ws_data.data[this.tipoIndicador]}], {origin : 'F4', skipHeader: true});
              }

            }
            else if(key.co_metrica == Globals.MENSUAL){


                var ws_data =  JSON.parse('['+ key.ds_val+']');
                var ws_name = key.nb;
                var worksheet = wb.Sheets[ws_name];
                var ws = XLSX.utils.sheet_add_aoa(worksheet, [[this.tipoIndicador + ": "]], {origin: 'A1'});
                var ws = XLSX.utils.sheet_add_json(worksheet, ws_data, {origin: 'A3'});

            }

            /* Add the worksheet to the workbook */
            // if(worksheet == undefined){
            //     XLSX.utils.book_append_sheet(wb, ws, ws_name);
            // }

          }

          for (var key2 of this.datosOEE){

            var ws_data =  JSON.parse(key2.ds_val).data;
            var ws_name = key2.nb;
            var worksheet = wb.Sheets[ws_name];
            var ws = XLSX.utils.sheet_add_aoa(worksheet, [['OEE:']], {origin:'H1'});
            var ws = XLSX.utils.sheet_add_json(worksheet, ws_data, {origin: 'H3'});
            
          }

          // XLSX.utils.book_append_sheet(wb, ws, ws_name);

          
          
        

          XLSX.writeFile(wb, 'dashboardData.xlsb');





      }

      else if (view == 'c2n2'){


        var wb = XLSX.utils.book_new();


          for (var key of this.datosVersus){

            if(key.co_indic_tipo == Globals.CKPI && key.co_metrica == Globals.CKPI_ANO){

                var ws_data =  JSON.parse(key.ds_val);
                var ws_name = key.nb;
                var worksheet = wb.Sheets[ws_name];
              if (worksheet == undefined){
                  var ws = XLSX.utils.json_to_sheet([ws_data.data]);
              }
              else{
                  var ws = XLSX.utils.sheet_add_json(worksheet, [ws_data.data], {origin: 2});
              }


            }
            else if(key.co_indic_tipo == Globals.CKPI && key.co_metrica == Globals.CKPI_MES){

                var ws_data =  JSON.parse(key.ds_val);
                var ws_name = key.nb;
                var worksheet = wb.Sheets[ws_name];
              if (worksheet == undefined){
                var ws = XLSX.utils.json_to_sheet([ws_data.data]);
              }
              else{
                var ws = XLSX.utils.sheet_add_json(worksheet, [ws_data.data], {origin: 2});
              }

            }
            else if(key.co_metrica == Globals.MENSUAL){


                var ws_data =  JSON.parse('['+ key.ds_val+']');
                var ws_name = key.nb;
                var worksheet = wb.Sheets[ws_name];
                var ws = XLSX.utils.sheet_add_json(worksheet, ws_data, {origin: 5});

            }

            /* Add the worksheet to the workbook */
            if(worksheet == undefined){
                XLSX.utils.book_append_sheet(wb, ws, ws_name);
            }

          }

          for (var key2 of this.datosOEE){

            var ws_data =  JSON.parse(key2.ds_val).data;
            var ws_name = key2.nb;
            var worksheet = wb.Sheets[ws_name];
            var ws = XLSX.utils.sheet_add_json(worksheet, ws_data, {origin: 'E6'});
            
          }

          for (var key2 of this.jacknife){

            var ws_data =  JSON.parse(key2.ds_val).data;
            var ws_name = key2.nb;
            var worksheet = wb.Sheets[ws_name];
            var ws = XLSX.utils.sheet_add_json(worksheet, ws_data, {origin: 'E6'});
            
          }

          for (var key2 of this.paretoModoFalla){

            var ws_data =  JSON.parse(key2.ds_val).data;
            var ws_name = key2.nb;
            var worksheet = wb.Sheets[ws_name];
            var ws = XLSX.utils.sheet_add_json(worksheet, ws_data, {origin: 'E6'});
            
          }

          // XLSX.utils.book_append_sheet(wb, ws, ws_name);

          
          
        

          XLSX.writeFile(wb, 'dashboardData.xlsb');




      }

      else{
        
      }







        return 







    }




}
