// Gráficas de indicadores. 
function chartIndicadores(id_formulario, id_usuario, accion, id_proceso, id_perfil, controlador){

    // Parámetros obtenidos del formulario
    let parametros = new FormData($('#'+id_formulario)[0]);
    parametros.append('peticion', 'ajax');
    parametros.append('accion', accion);
    parametros.append('id_usuario', id_usuario);
    parametros.append('id_proceso_actual', id_proceso);
    parametros.append('id_perfil', id_perfil);

    // Leyendo parámetros
    // parametros.forEach(function(value, key){
    //     console.log("key: "+key+", value: "+value);
    // });

    // informe_meta_resultado
    var periodos   = [];
    var metas      = [];
    var resultados = []; 

    $.ajax({
        url: controlador,
        type: 'POST',
        data: parametros,
        cache: false,
        processData: false,
        contentType: false,
        dataType: 'json',
    }).done(function(respuesta){
      
      console.log(respuesta);

      $('#charts').html('');
      
      if(respuesta.datos != null){

        for(var x=0; x < respuesta.datos.length; x++){

          let nombre_indicador = "'"+respuesta.datos[x][0]['nombre']+"'";
          let periodicidad = "'"+respuesta.datos[x][0]['periodicidad']+"'";
          var namechart = "'chart"+x+"'";

          var html = '<div class="row">'+
                          ' <input type="hidden" name="base64'+x+'" id="base64'+x+'"/>'+
                          '<div class="col-sm-10">'+
                            '<canvas id="chart'+x+'" width="400" height="150"></canvas>'+
                          '</div>'+
                          '<div class="col-sm-2" style="padding-top: 100px;">'+
                            '<button class="btn btn-success btn-block" type="button" style="margin-top: 8px;" onclick="descargaChart('+namechart+', '+nombre_indicador+');">Descargar gráfica</button>'+
                            '<a href="modulos/graficas_indicadores_excel.php?nombre_indicador='+respuesta.datos[x][0]['nombre']+'&id_proceso='+respuesta.datos[x][0]['id_proceso']+'&id_indicador='+respuesta.datos[x][0]['id_indicador']+'&ano_desde='+respuesta.datos[x][0]['ano_desde']+'&ano_hasta='+respuesta.datos[x][0]['ano_hasta']+'&mes_desde='+respuesta.datos[x][0]['mes_desde']+'&mes_hasta='+respuesta.datos[x][0]['mes_hasta']+'" class="btn btn-success btn-block" style="margin-top: 8px;">Descargar excel <i class="fa fa-file-excel-o fa-2x" aria-hidden="true"></i></a>'+
                            '<button class="btn btn-success btn-block" type="button" style="margin-top: 8px;" onclick="abreModalIndicadoresVeredas('+respuesta.datos[x][0]['id_proceso']+', '+respuesta.datos[x][0]['id_indicador']+', '+nombre_indicador+', '+periodicidad+');">Por veredas</button>'+
                            '<button class="btn btn-success btn-block" type="button" style="margin-top: 8px;" onclick="abreModalComparaVeredas('+respuesta.datos[x][0]['id_proceso']+', '+respuesta.datos[x][0]['id_indicador']+', '+nombre_indicador+', '+periodicidad+');">Comparar veredas</button>'+
                          '</div>'+
                      '</div>';

          var periodos = [];
          var metas = [];
          var resultados = [];

          for (var y=0; y < respuesta.datos[x].length; y++){

            if(respuesta.datos[x][0]['id_indicador'] == respuesta.datos[x][y]['id_indicador']){
              
              periodos.push(respuesta.datos[x][y]['periodo']);
              metas.push(respuesta.datos[x][y]['meta']);
              resultados.push(respuesta.datos[x][y]['resultado']); 
            
            }

            // periodos.push(respuesta.datos[x][y]['periodo']);
            // metas.push(respuesta.datos[x][y]['meta']);
            // resultados.push(respuesta.datos[x][y]['resultado']);
            
          }

          $('#charts').append(html);
          // console.log("********************** Tamaño *******************");
          // console.log(respuesta.datos.length);
          // console.log("********************** Periodos *******************");
          // console.log(periodos);
          // console.log("********************** metas *******************");
          // console.log(metas);
          // console.log("********************** Periodos *******************");
          // console.log(resultados);

            var ctx = document.getElementById('chart'+x);
            var myChart = new Chart(ctx, {
              type: 'bar',
              data: {
                labels: periodos,
                datasets: [{
                  type: 'line',
                  label: 'Metas',
                  data: metas,
                  // backgroundColor: "#007BFF"
                  fill: false,
                  borderColor: "#E67E2E",
                  tension: 0.1
                }, {
                  type: 'bar',
                  label: 'Resultados',
                  data: resultados,
                  backgroundColor: "#3498DB"
                }]
              },
              options: {
                tooltips: {
                  titleFontSize: 20,
                  bodyFontSize: 20
                },
                scales: {
                    yAxes: [{
                        ticks: {
                          beginAtZero:true
                        }
                    }]
                },
                legend: { 
                    display: true,
                    position: 'top',
                    labels: {
                        fontSize: 15,
                    }
                },
                scales: {
                    yAxes: [{
                        ticks: { 
                            beginAtZero: true,
                            fontSize: 10
                        }
                    }],
                    xAxes: [{
                        ticks: { 
                            beginAtZero: true,
                            fontSize: 9
                        }
                    }],
                },
                pointLabels: { 
                    fontSize: 30
                },
                title: {
                    display: true,
                    text: respuesta.datos[x][0]['nombre'],
                    fontSize: 20,
                //     fontFamily: "candara",
                //     fontColor: '#000',  
                //     position: 'top',
                },
              }
            });

        }

      }else{

        $('#charts').html('<p>No se encontraron resultados.</p>'); 
      
      }

    });

}

// Abre modal informe veredas
function abreModalIndicadoresVeredas(id_proceso, id_indicador, nombre_indicador, periodicidad){

  $('#id_proceso_modal').val(id_proceso);
  $('#id_indicador_modal').val(id_indicador);
  $('#periodicidad').html(periodicidad);
  $('#title_modal_veredas').html(nombre_indicador);
  $('#modal_charts_veredas').modal('show');
  // alert(nombre_indicador);

}

function abreModalComparaVeredas(id_proceso, id_indicador, nombre_indicador, periodicidad){

  $('#id_proceso_modal_compara_vereda').val(id_proceso);
  $('#id_indicador_modal_compara_vereda').val(id_indicador);
  $('#periodicidad_modal_compara_vereda').val(periodicidad);
  $('#title_modal_compara_veredas').html(nombre_indicador);
  $('#modal_charts_compara_veredas').modal('show');

}

// Gráficas indicadores veredas
function chartComparaVeredas(id_formulario, id_usuario, accion, id_proceso, id_perfil, controlador){

    let parametros = new FormData($('#'+id_formulario)[0]);
    parametros.append('peticion', 'ajax');
    parametros.append('accion', accion);
    parametros.append('id_usuario', id_usuario);
    parametros.append('id_proceso_actual', id_proceso);
    parametros.append('id_perfil', id_perfil);

    // Leyendo parámetros
    // parametros.forEach(function(value, key){
    //     console.log("key: "+key+", value: "+value);
    // });

    // informe_meta_resultado
    var periodos   = [];
    var metas      = [];
    var resultados = []; 

    $.ajax({
        url: controlador,
        type: 'POST',
        data: parametros,
        cache: false,
        processData: false,
        contentType: false,
        dataType: 'json',
    }).done(function(respuesta){
      
      console.log(respuesta);

      $('#charts_modal_compara_veredas').html('');
      
      if(respuesta.datos != null){

        for(var x=0; x < respuesta.datos.length; x++){

          var namechart = "'chart_modal_compara_vereda"+x+"'";
          var nombre_imagen = "'"+respuesta.datos[x][0]['nombre']+" - "+respuesta.datos[x][0]['periodo']+"'";

          var html = '<div class="row">'+
                          '<div class="col-sm-12 text-right">'+
                            '<button class="btn btn-success mr-4" type="button" id="btn_compara_vereda'+x+'" disabled="" style="margin-top: 8px;" onclick="descargaChart('+namechart+', '+nombre_imagen+');" >Descargar gráfica</button>'+
                            '<a href="modulos/graficas_compara_veredas_excel.php?nombre_indicador='+respuesta.datos[x][0]['nombre']+'&id_proceso='+respuesta.datos[x][0]['id_proceso']+'&id_indicador='+respuesta.datos[x][0]['id_indicador']+'&mes='+respuesta.datos[x][0]['mes']+'&id_grupo_zona='+respuesta.datos[x][0]['id_grupo_zona']+'" class="btn btn-success" style="margin-top: 8px;">Descargar excel <i class="fa fa-file-excel-o fa-2x" aria-hidden="true"></i></a>'+
                          '</div>'+  
                          '<div class="col-sm-12">'+
                            '<canvas id="chart_modal_compara_vereda'+x+'" width="400" height="150"></canvas>'+
                          '</div>'+
                      '</div>';

          var periodos = [];
          var metas = [];
          var resultados = [];

          for (var y=0; y < respuesta.datos[x].length; y++){
            
            periodos.push(respuesta.datos[x][y]['descripcion']);
            metas.push(respuesta.datos[x][y]['meta']);
            resultados.push(respuesta.datos[x][y]['resultado']);
            
          }

          $('#charts_modal_compara_veredas').append(html);
          // console.log("********************** Tamaño *******************");
          // console.log(respuesta.datos.length);
          // console.log("********************** Periodos *******************");
          // console.log(periodos);
          // console.log("********************** metas *******************");
          // console.log(metas);
          // console.log("********************** Periodos *******************");
          // console.log(resultados);

            var ctx = document.getElementById('chart_modal_compara_vereda'+x);
            var myChart = new Chart(ctx, {
              type: 'bar',
              data: {
                labels: periodos,
                datasets: [
                {
                  type: 'line',
                  label: 'Metas',
                  data: metas,
                  // backgroundColor: "#007BFF"
                  fill: false,
                  borderColor: "#E67E2E",
                  tension: 0.1
                }, 
                {
                  type: 'bar',
                  label: 'Resultados',
                  data: resultados,
                  backgroundColor: "#3498DB"
                }]
              },
                        options: {
                            tooltips: {
                              titleFontSize: 20,
                              bodyFontSize: 20
                            },
                            scales: {
                                yAxes: [{
                                    ticks: {
                                      beginAtZero:true
                                    }
                                }]
                            },
                            legend: { 
                                display: true,
                                position: 'top',
                                labels: {
                                    fontSize: 15,
                                }
                            },
                            scales: {
                                yAxes: [{
                                    ticks: { 
                                        beginAtZero: true,
                                        fontSize: 10
                                    }
                                }],
                                xAxes: [{
                                    ticks: { 
                                        beginAtZero: true,
                                        fontSize: 9
                                    }
                                }],
                            },
                            pointLabels: { 
                                fontSize: 30
                            },

                            title: {
                                display: true,
                                text: respuesta.datos[x][0]['periodo'],
                                fontSize: 20,
                            //     fontFamily: "candara",
                            //     fontColor: '#000',  
                            //     position: 'top',
                            },
                        }  
            });

          
          setTimeout(function(){ 
          
            for(var x=0; x < respuesta.datos.length; x++){

              $('#btn_compara_vereda'+x).attr('disabled', false);

            }

          }, 4000);

        } 


      }else{

        $('#charts_modal_compara_veredas').html('<p>No se encontraron resultados.</p>'); 
      
      }



    });

}

function descargaChart(namechart, nombre_imagen){

  var canvas = document.getElementById(namechart);

  const image = canvas.toDataURL();
  const link = document.createElement("a");
  link.href = image;
  link.download = nombre_imagen+".png";
  link.click();

}

// Gráficas indicadores veredas
function chartVeredas(id_formulario, id_usuario, accion, id_proceso, id_perfil, controlador){

    let parametros = new FormData($('#'+id_formulario)[0]);
    parametros.append('peticion', 'ajax');
    parametros.append('accion', accion);
    parametros.append('id_usuario', id_usuario);
    parametros.append('id_proceso_actual', id_proceso);
    parametros.append('id_perfil', id_perfil);

    // Leyendo parámetros
    // parametros.forEach(function(value, key){
    //     console.log("key: "+key+", value: "+value);
    // });
    
    // informe_meta_resultado
    var periodos   = [];
    var metas      = [];
    var resultados = []; 

    $.ajax({
        url: controlador,
        type: 'POST',
        data: parametros,
        cache: false,
        processData: false,
        contentType: false,
        dataType: 'json',
    }).done(function(respuesta){
      
      // console.log(respuesta);

      $('#charts_modal').html('');
      
      if(respuesta.datos != null){

        for(var x=0; x < respuesta.datos.length; x++){

          var namechart = "'chart_modal"+x+"'";
          var nombre_imagen = "'"+respuesta.datos[x][0]['nombre']+" - "+respuesta.datos[x][0]['descripcion']+"'";

          var html = '<div class="row">'+
                          '<div class="col-sm-10">'+
                            '<canvas id="chart_modal'+x+'" width="400" height="150"></canvas>'+
                          '</div>'+
                          '<div class="col-sm-2" style="padding-top: 100px;">'+
                            '<button class="btn btn-success btn-block" type="button" style="margin-top: 8px;" onclick="descargaChart('+namechart+', '+nombre_imagen+');">Descargar gráfica</button>'+
                            '<a href="modulos/graficas_indicadores_veredas_excel.php?nombre_indicador='+respuesta.datos[x][0]['nombre']+'&nombre_zona='+respuesta.datos[x][0]['descripcion']+'&id_proceso='+respuesta.datos[x][0]['id_proceso']+'&id_indicador='+respuesta.datos[x][0]['id_indicador']+'&ano_desde='+respuesta.datos[x][0]['ano_desde']+'&ano_hasta='+respuesta.datos[x][0]['ano_hasta']+'&mes_desde='+respuesta.datos[x][0]['mes_desde']+'&mes_hasta='+respuesta.datos[x][0]['mes_hasta']+'&id_zona='+respuesta.datos[x][0]['id_zona']+'" class="btn btn-success btn-block" style="margin-top: 8px;">Descargar excel <i class="fa fa-file-excel-o fa-2x" aria-hidden="true"></i></a>'+
                          '</div>'+
                      '</div>';

          var periodos = [];
          var metas = [];
          var resultados = [];

          for (var y=0; y < respuesta.datos[x].length; y++){
            
            periodos.push(respuesta.datos[x][y]['periodo']);
            metas.push(respuesta.datos[x][y]['meta']);
            resultados.push(respuesta.datos[x][y]['resultado']);
            
          }

          $('#charts_modal').append(html);
          // console.log("********************** Tamaño *******************");
          // console.log(respuesta.datos.length);
          // console.log("********************** Periodos *******************");
          // console.log(periodos);
          // console.log("********************** metas *******************");
          // console.log(metas);
          // console.log("********************** Periodos *******************");
          // console.log(resultados);

            var ctx = document.getElementById('chart_modal'+x);
            var myChart = new Chart(ctx, {
              type: 'bar',
              data: {
                labels: periodos,
                datasets: [{
                  type: 'line',
                  label: 'Metas',
                  data: metas,
                  // backgroundColor: "#007BFF"
                  fill: false,
                  borderColor: "#E67E2E",
                  tension: 0.1
                }, {
                  label: 'Resultados',
                  data: resultados,
                  backgroundColor: "#3498DB"
                }]
              },
              options: {
                tooltips: {
                  titleFontSize: 20,
                  bodyFontSize: 20
                },
                scales: {
                    yAxes: [{
                        ticks: {
                          beginAtZero:true
                        }
                    }]
                },
                legend: { 
                    display: true,
                    position: 'top',
                    labels: {
                        fontSize: 15,
                    }
                },
                scales: {
                    yAxes: [{
                        ticks: { 
                            beginAtZero: true,
                            fontSize: 10
                        }
                    }],
                    xAxes: [{
                        ticks: { 
                            beginAtZero: true,
                            fontSize: 9
                        }
                    }],
                },
                pointLabels: { 
                    fontSize: 30
                },
                title: {
                    display: true,
                    text: respuesta.datos[x][0]['descripcion'],
                    fontSize: 20,
                //     fontFamily: "candara",
                //     fontColor: '#000',  
                //     position: 'top',
                },
              } 

            });

        }

      }else{

        $('#charts_modal').html('<p>No se encontraron resultados.</p>'); 
      
      }

    });

}

// Consulta usuario
function cargarDatosProceso(id_proceso, accion, controlador){

    $.ajax({
        url: controlador,
        type: 'POST',
        data: "id_proceso="+id_proceso+"&accion="+accion+"&peticion=ajax",
        dataType: 'json',
        success:function(respuesta){
  
          // console.log(respuesta);
          // console.log(respuesta['id']);

          $('#admin_id_macro_proceso').val(respuesta['id_macro_proceso']).trigger('change.select2');
          $('#admin_objetivo').val(respuesta['objetivo']);
          $('#admin_estado_proceso').val(respuesta['estado']).trigger('change.select2');
          $('#admin_id_responsable_proceso').val(respuesta['id_responsable']).trigger('change.select2');
          $('#icono').val(respuesta['icono']);

        }
    });

}

// Edita proceso
function editaProceso(id_formulario, id_usuario, accion, controlador){

    // Parámetros obtenidos del formulario
    let parametros = new FormData($('#'+id_formulario)[0]);
    parametros.append('peticion', 'ajax');
    parametros.append('accion', accion);
    parametros.append('id_usuario', id_usuario);

    // Leyendo parámetros
    parametros.forEach(function(value, key){
        console.log("key: "+key+", value: "+value);
    });

    $.ajax({
        url: controlador,
        type: 'POST',
        data: parametros,
        cache: false,
        processData: false,
        contentType: false,
        dataType: 'json',
    }).done(function(respuesta){

        console.log(respuesta);

        if(respuesta.hasOwnProperty('success')){

            Swal.fire({
              icon: 'success',
              title: 'Proceso exitoso',
              html: respuesta.success,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'

            })
            
            // document.getElementById(id_formulario).reset();

            $('#proceso').val(0).trigger('change.select2');
            $('#admin_id_macro_proceso').val(0).trigger('change.select2');
            $('#admin_objetivo').val('');
            $('#admin_estado_proceso').val(10).trigger('change.select2');
            $('#admin_id_responsable_proceso').val(0).trigger('change.select2');

        }else{

            Swal.fire({
              icon: 'error',
              // title: 'Error',
              html: respuesta.error,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'
            })
            
        }

    });

}

// Puebla el campo icono del formulario del modal nuevo procesos; 
function asignaIconoModal(id, icono){
  
  $('#id_icono_modal').val(id);
  $('#icono_modal').val(icono);
  $('#showiconmodal').html('<i class="fa fa-'+icono+' fa-2x"></i>');
  $('#modal_iconos_modal').modal('hide');

}

function asignaIcono(id, icono){
  
  $('#id_icono').val(id);
  $('#icono').val(icono);
  $('#showicon').html('<i class="fa fa-'+icono+' fa-2x"></i>');
  $('#modal_iconos').modal('hide');

}

// Consulta indicador
function consutaIndicador(id_indicador, accion, controlador){
  
  $.ajax({
        url: controlador,
        type: 'POST',
        data: "id_indicador="+id_indicador+"&accion="+accion+"&peticion=ajax",
        dataType: 'json',
        success:function(respuesta){
  
          console.log(respuesta);
          if(respuesta != false){

            $('#formula').val(respuesta['formula']);
            $('#id_proceso').val(respuesta['id_proceso']).trigger('change.select2');
            $('#admin_id_responsable_indicador').val(respuesta['id_responsable']).trigger('change.select2');
            $('#tipo_indicador').val(respuesta['id_tipo']).trigger('change.select2');
            $('#periodicidad').val(respuesta['id_periodicidad']).trigger('change.select2');
            $('#id_proceso').val(respuesta['id_proceso']).trigger('change.select2');
            $('#meta').val(respuesta['meta']);
            $('#estado').val(respuesta['estado']).trigger('change.select2');
            $('#meta').val(respuesta['meta']);
            $('#gestion_bajo').val(respuesta['gestion_bajo']);
            $('#gestion_medio').val(respuesta['gestion_medio']);
            $('#gestion_alto').val(respuesta['gestion_alto']);
          
          }else{

            $('#formula').val('');
            $('#id_proceso').val(0).trigger('change.select2');
            $('#admin_id_responsable_indicador').val(0).trigger('change.select2');
            $('#tipo_indicador').val(0).trigger('change.select2');
            $('#periodicidad').val(0).trigger('change.select2');
            $('#id_proceso').val(0).trigger('change.select2');
            $('#meta').val('');
            $('#estado').val(10).trigger('change.select2');
            $('#meta').val(0);
            $('#gestion_bajo').val(0);
            $('#gestion_medio').val(0);
            $('#gestion_alto').val(0);
          
          }

        }
    });

}

// Consulta zona
function cargarDatosZona(id_zona, accion, controlador){

  $.ajax({
        url: controlador,
        type: 'POST',
        data: "id_zona="+id_zona+"&accion="+accion+"&peticion=ajax",
        dataType: 'json',
        success:function(respuesta){
  
          console.log(respuesta);
          if(respuesta != false){

            $('#id_tipozona').val(respuesta['id_tipo']).trigger('change.select2');
            $('#descripcion_zona').val(respuesta['descripcion']);
            $('#estado').val(respuesta['estado']).trigger('change.select2');
            $('#latitud').val(respuesta['latitud']);
            $('#longitud').val(respuesta['longitud']);
          
          }
          // else{

          //   $('#formula').val('');
          //   $('#id_proceso').val(0).trigger('change.select2');
          //   $('#admin_id_responsable_indicador').val(0).trigger('change.select2');
          //   $('#tipo_indicador').val(0).trigger('change.select2');
          //   $('#periodicidad').val(0).trigger('change.select2');
          //   $('#id_proceso').val(0).trigger('change.select2');
          //   $('#meta').val('');
          //   $('#estado').val(10).trigger('change.select2');
          //   $('#meta').val(0);
          //   $('#gestion_bajo').val(0);
          //   $('#gestion_medio').val(0);
          //   $('#gestion_alto').val(0);
          
          // }

        }
    });

}

// Edita zona
function editaZona(id_formulario, id_usuario, accion, controlador){

    // Parámetros obtenidos del formulario
    let parametros = new FormData($('#'+id_formulario)[0]);
    parametros.append('peticion', 'ajax');
    parametros.append('accion', accion);
    parametros.append('id_usuario', id_usuario);

    // Leyendo parámetros
    parametros.forEach(function(value, key){
        console.log("key: "+key+", value: "+value);
    });

    $.ajax({
        url: controlador,
        type: 'POST',
        data: parametros,
        cache: false,
        processData: false,
        contentType: false,
        dataType: 'json',
    }).done(function(respuesta){

        console.log(respuesta);

        if(respuesta.hasOwnProperty('success')){

            Swal.fire({
              icon: 'success',
              title: 'Proceso exitoso',
              html: respuesta.success,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'

            })
            
            // document.getElementById(id_formulario).reset();

            $('#id_zona').val(0).trigger('change.select2');
            $('#id_tipozona').val(0).trigger('change.select2');
            $('#descripcion_zona').val('');
            $('#estado').val(10).trigger('change.select2');
            $('#latitud').val('');
            $('#longitud').val('');

        }else if(respuesta.hasOwnProperty('info')){

          Swal.fire({
              icon: 'info',
              // title: 'Error',
              html: respuesta.info,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'
            })

        }else{

            Swal.fire({
              icon: 'error',
              // title: 'Error',
              html: respuesta.error,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'
            })
            
        }

    });

}

// Consulta indicadores
function consultaKPI(descripcion_kpi, accion, id_proceso, id_perfil, controlador){

  $.ajax({
        url: controlador,
        type: 'POST',
        data: "descripcion_kpi="+descripcion_kpi+"&id_proceso="+id_proceso+"&id_perfil="+id_perfil+"&accion="+accion+"&peticion=ajax",
        dataType: 'json',
        success:function(respuesta){
  
          console.log(respuesta);
          let elementos = respuesta.datoskpi.length;
          let html = '';

          console.log(elementos);
          console.log(respuesta.datoskpi);

          for (var i = 0; i < elementos; i++) {
            console.log(i);
            console.log(respuesta.datoskpi[i]);
            html += '<tr onclick="consultaIndicadorId('+respuesta.datoskpi[i]['id']+');">'+
                      '<td>'+respuesta.datoskpi[i]['id']+'</td>'+
                      '<td>'+respuesta.datoskpi[i]['nombre']+'<td>'+
                    '</tr>';  

          }

          $('#lista_indicadores').html(html);

        }

    });

}

// Consulta un indicador
function consultaIndicadorId(id){

  $.ajax({
        url: '../controlador/administracion.controlador.php',
        type: 'POST',
        data: "id="+id+"&accion=consulta_indicador_id&peticion=ajax",
        dataType: 'json',
        success:function(respuesta){
  
          console.log(respuesta);

          $('#id_kpi').val(respuesta['id']);  
          $('#descricion_kpi').val(respuesta['nombre']);
          $('#modal_kpi').modal('hide');

        }
    });

}
 
// Consulta resultados 
function consultaResultados(id_formulario, id_usuario, id_perfil, accion, controlador){

  // Parámetros obtenidos del formulario
  let parametros = new FormData($('#'+id_formulario)[0]);
  parametros.append('peticion', 'ajax');
  parametros.append('accion', accion);
  parametros.append('id_usuario', id_usuario);

  // Leyendo parámetros
  parametros.forEach(function(value, key){
      console.log("key: "+key+", value: "+value);
  });

  $.ajax({
    url: controlador,
    type: 'POST',
    data: parametros,
    cache: false,
    processData: false,
    contentType: false,
    dataType: 'json',
    }).done(function(respuesta){
  
          console.log(respuesta);
          if(respuesta != null){
            let elementos = respuesta.length;
            let html = '';

            console.log(elementos);

            for (var i = 0; i < elementos; i++) {

              let colobotonestado = '';
              let icono = '';
              // Fecha actual 
              let f = new Date();
              // var fecha = f.getFullYear()+'-'+f.getMonth();
              let month = (f.getMonth()+1);
              // propuedad de lectura para el campo resultado.
              let atributo = '';
              let buttondisabled = '';
              let fecha_registro = '';

              // Definimos icono y color para el estado del resultado.
              if(respuesta[i]['porcentaje'] <= respuesta[i]['gestion_bajo']){
                
                colobotonestado = 'background: red;';
                icono = 'fa-times';

              }else if(respuesta[i]['porcentaje'] > respuesta[i]['gestion_bajo'] && respuesta[i]['porcentaje'] <= respuesta[i]['gestion_medio']){
                
                colobotonestado = 'background: #F39C12;';
                icono = 'fa-exclamation-triangle';

              }else if(respuesta[i]['porcentaje'] > respuesta[i]['gestion_medio']){
                
                colobotonestado = 'background: #00A65A;';
                icono = 'fa-check';

              }

              console.log(month);
              // De a cuerdo al periodo definimos si se puede o no registrar un resultado.
              if(id_perfil == 11 || id_perfil == 16 && respuesta[i]['mes'] < month ){
                // Si el usuario logueado es ADMINISTRADORES (id = 11) o SUPERADMIN (id = 16)
                atributo = '';
                buttondisabled = '';

              }else if(respuesta[i]['mes'] > month || respuesta[i]['mes'] < month){

                atributo = 'readonly=""';
                buttondisabled = 'disabled=""';

              }

              html += '<tr>'+
                        '<form id="registra_resultado_indicador'+respuesta[i]['id_periodo_indicador']+'">'+
                          '<input type="hidden" name="id_indicador'+respuesta[i]['id_periodo_indicador']+'" id="id_indicador'+respuesta[i]['id_periodo_indicador']+'" value="'+respuesta[i]['id_indicador']+'">'+
                          '<td><input type="hidden" name="id_result'+respuesta[i]['id_periodo_indicador']+'" id="id_result'+respuesta[i]['id_periodo_indicador']+'" value="'+respuesta[i]['id_periodo_indicador']+'">'+respuesta[i]['desc_proceso']+'</td>'+
                          '<td><input type="hidden" id="periodo'+respuesta[i]['id_periodo_indicador']+'" name="periodo'+respuesta[i]['id_periodo_indicador']+'" value="'+respuesta[i]['periodo']+'">'+respuesta[i]['periodo']+'</td>'+
                          '<td><input class="form-control" type="number" min="0" '+atributo+' name="resultado'+respuesta[i]['id_periodo_indicador']+'" id="resultado'+respuesta[i]['id_periodo_indicador']+'" value="'+respuesta[i]['resultado']+'" style="height: 30px;"></td>'+
                          '<td>'+respuesta[i]['nombre_usuario_registra_resultado']+'</td>'+
                          '<td>'+respuesta[i]['fecha_registro_resultado']+'</td>'+
                          '<td>'+
                            '<button class="btn" style="'+colobotonestado+'" type="button"><i class="fas '+icono+'"></i></button>'+
                          '</td>'+
                          '<td><button class="btn btn-success" type="button" '+buttondisabled+' onclick="registraResultado('+respuesta[i]['id_periodo_indicador']+', '+id_usuario+', '+id_perfil+', '+respuesta[i]['mes']+',0);"><i class="far fa-save"></i></button></td>'+
                        '</form>'+
                      '</tr>';  

            }

            $('#lista_resultados').html(html); 
          }else{
            $('#lista_resultados').html("No se encontraron resultados");
          }
        
    });

}

// Registra resultado de indicadores
function registraResultado(id_resultado, id_usuario, id_perfil, mes, c){
  
  // registra_resultado_indicador
  let parametros = new FormData($('#registra_resultado_indicador'+id_resultado)[0]);
  parametros.append('peticion', 'ajax');
  parametros.append('accion', 'registrar_resultado_indicador');
  parametros.append('id_usuario', id_usuario);
  parametros.append('id_result', $('#id_result'+id_resultado).val());
  parametros.append('resultado', $('#resultado'+id_resultado).val());
  parametros.append('periodo', $('#periodo'+id_resultado).val());
  parametros.append('id_indicador', $('#id_indicador'+id_resultado).val());
  parametros.append('mes', mes);
  parametros.append('c', c);
  parametros.append('fecha_desde', $('#fecha_desde').val());
  parametros.append('fecha_hasta', $('#fecha_hasta').val());
  parametros.append('id_zona', $('#id_zona').val());
  
  // Leyendo parámetros
  parametros.forEach(function(value, key){
    console.log("key: "+key+", value: "+value);
  });


   $.ajax({
    url: '../controlador/administracion.controlador.php',
    type: 'POST',
    data: parametros,
    cache: false,
    processData: false,
    contentType: false,
    dataType: 'json',
    }).done(function(respuesta){
      
      console.log(respuesta);

        if(respuesta.hasOwnProperty('success')){

          consultaResultados('frm_consulta_resultado', id_usuario, id_perfil, 'consulta_resultados_indicador', '../controlador/administracion.controlador.php');

            Swal.fire({
                icon: 'success',
                title: 'Proceso exitoso',
                html: respuesta.success,
                showConfirmButton: false,
                timer: 1200
              })

        }else if(respuesta.hasOwnProperty('info')){

          Swal.fire({
              icon: 'info',
              // title: 'Error',
              html: respuesta.info,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'
            })

        }else if(respuesta.hasOwnProperty('confirm')){

          Swal.fire({
            icon: 'warning',
            // title: '',
            html: respuesta.confirm,
            showDenyButton: true,
            showCancelButton: true,
            denyButtonText: 'Cancelar',
            cancelButtonText: 'cancelar',
            confirmButtonText: 'Confirmar',
            confirmButtonColor: '#28A745',
            cancelButtonColor: 'red',
          }).then((result) => {
            /* Read more about isConfirmed, isDenied below */
            if (result.value == true) {
              
              registraResultado(id_resultado, id_usuario, id_perfil, mes, 1);

            }else{
               
              Swal.fire({
                icon: 'success',
                title: 'Proceso cancelado',
                showConfirmButton: false,
                timer: 1200
              })

            }
            console.log(result);

          })

        }else{

            Swal.fire({
              icon: 'error',
              // title: 'Error',
              html: respuesta.error,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'
            })
            
        }

    });      

}

// Calculamos el nivel de sonsecuencia para un riesgo
function calculaNivelConsecuenciaModalNuevoRiesgo(){

  let id_probabilidad = $('#m_id_probabilidad').val();
  let id_impacto      = $('#m_id_impacto').val();

  $.ajax({
    url: '../controlador/gestion.riesgo.controlador.php',
    type: 'POST',
    data: "id_probabilidad="+id_probabilidad+"&id_impacto="+id_impacto+"&accion=calcular_nivel_consecuencia_riesgo&peticion=ajax",
    dataType: 'json',
    success:function(data){
      
      // console.log(data);

      if(data != 'null' && id_impacto != 0 && id_probabilidad != 0){
        
        let color = '';
        // Definimos color de a cuerdo al nivel de consecuencia.
        if(data.descripcion == "Bajo"){
          color = '#28A745'; //'#00FF17';
        }else if(data.descripcion == "Moderado"){
          color = '#FBFF12';
        }else if(data.descripcion == "Alto"){
          color = '#FF8200';
        }else if(data.descripcion == "Extremo"){
          color = '#FF0011';
        }

        $('#div_nivel_consecuencia_modal').html('<p>Riesgo inicial</p><div class="alert col-sm-12 text-center" style="background: '+color+';" role="alert"><span class="mr-5 h6"><b>Nivel de consecuencia:</b> '+data.descripcion+'</span><span class="ml-5 h6"><b>Zona de riesgo:</b> '+data.zona+'</span></div>');

      }else if(id_impacto == 0 || id_probabilidad == 0){

        $('#div_nivel_consecuencia_modal').html('');        
      
      }

    }
  });

}

// Consulta riesgo
function consultaRiesgo(id_riesgo, modulo){

  $.ajax({
    url: '../controlador/gestion.riesgo.controlador.php',
    type: 'POST',
    data: "id_riesgo="+id_riesgo+"&accion=consulta_riesgo&peticion=ajax",
    dataType: 'json',
    success:function(data){
      
      let listahtml = ''; 
      let id_nivel_consecuencia = 0;
      console.log(data);
      if($.isEmptyObject(data.datos) === false){  
        
        id_nivel_consecuencia = data.datos_nivel_consecuencia.id;  

        $('#id_proceso').val(data.datos.id_proceso).trigger('change.select2');
        $('#estado').val(data.datos.estado).trigger('change.select2');
        $('#clasificacion').val(data.datos.id_clase).trigger('change.select2');
        $('#titulo').val(data.datos.titulo);
        $('#descripcion').val(data.datos.descripcion);
        $('#clasificacion').val(data.datos.id_clase).trigger('change.select2');
        $('#id_probabilidad').val(data.datos.id_probabilidad).trigger('change.select2');
        $('#id_impacto').val(data.datos.id_impacto).trigger('change.select2');

          let color = '';
          let color_residual = '';
          // Definimos color de a cuerdo al nivel de consecuencia.
          if(data.datos_nivel_consecuencia.descripcion == "Bajo"){
            color = '#28A745'; //'#00FF17';
          }else if(data.datos_nivel_consecuencia.descripcion == "Moderado"){
            color = '#FBFF12';
          }else if(data.datos_nivel_consecuencia.descripcion == "Alto"){
            color = '#FF8200';
          }else if(data.datos_nivel_consecuencia.descripcion == "Extremo"){
            color = '#FF0011';
          }
          
          $('#div_nivel_consecuencia').html('<p>Riesgo inicial</p><div class="alert col-sm-12 text-center" style="background: '+color+';" role="alert"><span class="mr-5 h6"><b>Nivel de consecuencia:</b> '+data.datos_nivel_consecuencia.descripcion+'</span><span class="ml-5 h6"><b>Zona de riesgo:</b> '+data.datos_nivel_consecuencia.zona+'</span></div>');

          $('#div_modal_agregar_control_nivel_consecuencia').html('<div class="alert col-sm-12 text-center" style="background: '+color+';" role="alert"><span class="mr-5 h6"><b>Nivel de consecuencia:</b> '+data.datos_nivel_consecuencia.descripcion+'</span><span class="ml-5 h6"><b>Zona de riesgo:</b> '+data.datos_nivel_consecuencia.zona+'</span></div>');

          // Definimos color de a cuerdo al nivel de consecuencia recidiual.
          if(data.nivel_consecuencia_residual.descripcion == "Bajo"){
            color_residual = '#28A745'; //'#00FF17';
          }else if(data.nivel_consecuencia_residual.descripcion == "Moderado"){
            color_residual = '#FBFF12';
          }else if(data.nivel_consecuencia_residual.descripcion == "Alto"){
            color_residual = '#FF8200';
          }else if(data.nivel_consecuencia_residual.descripcion == "Extremo"){
            color_residual = '#FF0011';
          }

          $('#div_nivel_consecuencia_residual').html('<p>Riesgo residual</p><div class="alert col-sm-12 text-center" style="background: '+color_residual+';" role="alert"><span class="mr-5 h6"><b>Nivel de consecuencia:</b> '+data.nivel_consecuencia_residual.descripcion+'</span><span class="ml-5 h6"><b>Zona de riesgo:</b> '+data.nivel_consecuencia_residual.zona+'</span></div>');
          
          $('#div_modal_agregar_control_nivel_consecuencia_residual').html('<div class="alert col-sm-12 text-center" style="background: '+color_residual+';" role="alert"><span class="mr-5 h6"><b>Nivel de consecuencia:</b> '+data.nivel_consecuencia_residual.descripcion+'</span><span class="ml-5 h6"><b>Zona de riesgo:</b> '+data.nivel_consecuencia_residual.zona+'</span></div>');

        }else{

          cargarVista('contenido', modulo);
        
        }

        // Validamos las causas y consecuencias relacionadas al riesgo
        if(data.datos_causa_consecuencia != null){
          
          console.log('Con consecuencias...');

          // Recorremos causas
          for (var i = 0; i < data.datos_causa_consecuencia.length; i++) {
            
            // Almaceno en variable la acción que se ejecutará en el botón Actualizar causa.
            let accion            = "'actualizar'";
            let id_causa          = "'"+data.datos_causa_consecuencia[i]['id_causa']+"'";
            let id_consecuencia   = "'"+data.datos_causa_consecuencia[i]['id_consecuencia']+"'";
            let desc_causa        = "'"+data.datos_causa_consecuencia[i]['descripcion_causa']+"'";
            let desc_consecuencia = "'"+data.datos_causa_consecuencia[i]['descripcion_consecuancia']+"'";
            let titulo_riesgo     = "'"+data.datos_causa_consecuencia[i]['titulo_riesgo']+"'";
            let desc_riesgo       = "'"+data.datos_causa_consecuencia[i]['desc_riesgo']+"'";

            listahtml += '<tr>'+
                            '<td>'+data.datos_causa_consecuencia[i]['descripcion_tipo_causa']+'</td>'+
                            '<td>'+data.datos_causa_consecuencia[i]['descripcion_causa']+'</td>'+
                            '<td>'+data.datos_causa_consecuencia[i]['descripcion_tipo_consecuencia']+'</td>'+
                            '<td>'+data.datos_causa_consecuencia[i]['descripcion_consecuancia']+'</td>'+
                            '<td><button class="btn btn-success" onclick="abreModalCausa('+accion+', '+data.datos_causa_consecuencia[i]['id']+', '+id_causa+', '+id_consecuencia+', '+desc_causa+', '+desc_consecuencia+', '+data.datos_causa_consecuencia[i]['estado']+');">Editar <i class="fa fa-pen"></i></button></td>'+
                            '<td>'+
                              '<button class="btn btn-success" onclick="abreModalControl('+data.datos_causa_consecuencia[i]['id']+', '+id_causa+', '+id_consecuencia+', '+
                                                                                           desc_causa+', '+desc_consecuencia+', '+data.datos_causa_consecuencia[i]['id_proceso']+','+
                                                                                           data.datos_causa_consecuencia[i]['estado']+', '+data.datos_causa_consecuencia[i]['id_clase']+', '+
                                                                                           titulo_riesgo+', '+desc_riesgo+','+data.datos_causa_consecuencia[i]['id_probabilidad']+', '+
                                                                                           data.datos_causa_consecuencia[i]['id_impacto']+', '+id_nivel_consecuencia+');">'+
                                'Agregar control <i class="fa fa-plus"></i>'+
                              '</button>'+
                            '</td>'+
                         '</tr>';

          }


          $('#lista_causa_consecuencia').html(listahtml);

        }else{
          
          // cargarVista('contenido', modulo);

          $('#lista_causa_consecuencia').html('No se encontraron causas y consecuencias relacionadas.');

        }

    }
  });

}

// Consulta los controles relacionados a un riesgo
function consultaRiesgoControl(id_riesgo, modulo){

  $.ajax({
    url: '../controlador/gestion.riesgo.controlador.php',
    type: 'POST',
    data: "id_riesgo="+id_riesgo+"&accion=consulta_riesgo&peticion=ajax",
    dataType: 'json',
    success:function(data){
      
      let listahtml = ''; 
      let id_nivel_consecuencia = 0;
      
      console.log(data);
      if($.isEmptyObject(data.datos) === false){  

        id_nivel_consecuencia = data.datos_nivel_consecuencia.id;

        $('#id_proceso').val(data.datos.id_proceso).trigger('change.select2');
        $('#estado').val(data.datos.estado).trigger('change.select2');
        $('#clasificacion').val(data.datos.id_clase).trigger('change.select2');
        $('#titulo').val(data.datos.titulo);
        $('#descripcion').val(data.datos.descripcion);
        $('#clasificacion').val(data.datos.id_clase).trigger('change.select2');
        $('#input_id_probabilidad').val(data.datos.id_probabilidad)
        $('#id_probabilidad').val(data.datos.id_probabilidad).trigger('change.select2');
        $('#id_impacto').val(data.datos.id_impacto).trigger('change.select2');
        $('#input_id_impacto').val(data.datos.id_impacto);
        
          let color = '';
          let color_residual = '';
          // Definimos color de a cuerdo al nivel de consecuencia.
          if(data.datos_nivel_consecuencia.descripcion == "Bajo"){
            color = '#28A745'; //'#00FF17';
          }else if(data.datos_nivel_consecuencia.descripcion == "Moderado"){
            color = '#FBFF12';
          }else if(data.datos_nivel_consecuencia.descripcion == "Alto"){
            color = '#FF8200';
          }else if(data.datos_nivel_consecuencia.descripcion == "Extremo"){
            color = '#FF0011';
          }
          
          $('#div_nivel_consecuencia').html('<p class="mt-3">Riesgo inicial</p><div class="alert col-sm-12 text-center" style="background: '+color+';" role="alert"><span class="mr-5 h6"><b>Nivel de consecuencia:</b> '+data.datos_nivel_consecuencia.descripcion+'</span><span class="ml-5 h6"><b>Zona de riesgo:</b> '+data.datos_nivel_consecuencia.zona+'</span></div>');


          if(data.nivel_consecuencia_residual.descripcion == "Bajo"){
            color_residual = '#28A745'; //'#00FF17';
          }else if(data.nivel_consecuencia_residual.descripcion == "Moderado"){
            color_residual = '#FBFF12';
          }else if(data.nivel_consecuencia_residual.descripcion == "Alto"){
            color_residual = '#FF8200';
          }else if(data.nivel_consecuencia_residual.descripcion == "Extremo"){
            color_residual = '#FF0011';
          }

          if(data.nivel_consecuencia_residual.descripcion){
            $('#div_nivel_consecuencia_recidual').html('<p class="mt-3">Riesgo residual</p><div class="alert col-sm-12 text-center" style="background: '+color_residual+';" role="alert"><span class="mr-5 h6"><b>Nivel de consecuencia:</b> '+data.nivel_consecuencia_residual.descripcion+'</span><span class="ml-5 h6"><b>Zona de riesgo:</b> '+data.nivel_consecuencia_residual.zona+'</span></div>');
          }else{
            $('#div_nivel_consecuencia_recidual').html('');
          }
          
        }else{

          cargarVista('contenido', modulo);
        
        }

        // Validamos las causas y consecuencias relacionadas al riesgo
        if(data.datos_causa_consecuencia != null){
          
          console.log('Con consecuencias...');

          // Recorremos causas
          for (var i = 0; i < data.datos_causa_consecuencia.length; i++) {
            
            // Almaceno en variable la acción que se ejecutará en el botón Actualizar causa.
            let accion            = "'actualizar'";
            let id_causa          = "'"+data.datos_causa_consecuencia[i]['id_causa']+"'";
            let id_consecuencia   = "'"+data.datos_causa_consecuencia[i]['id_consecuencia']+"'";
            let desc_causa        = "'"+data.datos_causa_consecuencia[i]['descripcion_causa']+"'";
            let desc_consecuencia = "'"+data.datos_causa_consecuencia[i]['descripcion_consecuancia']+"'";
            let titulo_riesgo     = "'"+data.datos_causa_consecuencia[i]['titulo_riesgo']+"'";
            let desc_riesgo       = "'"+data.datos_causa_consecuencia[i]['desc_riesgo']+"'";

            listahtml += '<tr class="bg-success">'+
                            '<th>'+data.datos_causa_consecuencia[i]['descripcion_tipo_causa']+'</th>'+
                            '<th colspan=2>'+data.datos_causa_consecuencia[i]['descripcion_causa']+'</th>'+
                            '<th>'+data.datos_causa_consecuencia[i]['descripcion_tipo_consecuencia']+'</th>'+
                            '<th colspan=2>'+data.datos_causa_consecuencia[i]['descripcion_consecuancia']+'</th>'+
                            '<th></th>'+
                         '</tr>';

                         listahtml += '<tr>'+
                                  '<th>Descripción control</th>'+
                                  '<th>Tipo de control</th>'+
                                  '<th colspan="2">Fecha de creación</th>'+
                                    '<th>Editar</th>'+
                                    '<th>Evaluar</th>'+
                                '</tr>';

                      // Condicional utilizado para validar que se reciban los datos de un control.
                      if(data.datos_causa_consecuencia[i].datos_control){

                        for (var x = 0; x < data.datos_causa_consecuencia[i].datos_control.length; x++) {

                            if(data.datos_causa_consecuencia[i]['id'] == data.datos_causa_consecuencia[i].datos_control[x]['id_causa']){

                              let estado_control = '';
                              let desc_control = "'"+data.datos_causa_consecuencia[i].datos_control[x]['desc_control']+"'";

                              if(data.datos_causa_consecuencia[i].datos_control[x]['estado_control'] == 1){
                                estado_control = 'Activo';
                              }else{
                                estado_control = 'Inactivo';
                              }

                              listahtml += '<tr>'+
                                      '<td>'+data.datos_causa_consecuencia[i].datos_control[x]['desc_control']+'</td>'+
                                      '<td>'+data.datos_causa_consecuencia[i].datos_control[x]['desc_tipo_control']+'</td>'+
                                      '<td colspan="2">'+data.datos_causa_consecuencia[i].datos_control[x]['fecha_creacion']+'</td>'+
                                      '<td>'+
                                        '<button class="btn btn-success" onclick="abreModalActualizaControl('+data.datos_causa_consecuencia[i]['id']+', '+data.datos_causa_consecuencia[i].datos_control[x]['id_clase']+', '+data.datos_causa_consecuencia[i].datos_control[x]['estado_control']+', '+desc_control+', '+data.datos_causa_consecuencia[i].datos_control[x]['id_tipo_control']+', '+data.datos_causa_consecuencia[i].datos_control[x]['id_control']+');">'+
                                          'Editar'+
                                        '</button>'+
                                      '</td>'+
                                      '<td>'+
                                        '<button class="btn btn-success" onclick="abreModalEvaluacionControl('+data.datos_causa_consecuencia[i]['id']+', '+data.datos_causa_consecuencia[i].datos_control[x]['id_clase']+', '+data.datos_causa_consecuencia[i].datos_control[x]['estado_control']+', '+desc_control+', '+data.datos_causa_consecuencia[i].datos_control[x]['id_tipo_control']+', '+data.datos_causa_consecuencia[i].datos_control[x]['id_control']+', '+data.datos.id_nivel_consecuencia_residual+', '+data.datos_causa_consecuencia[i]['id_impacto']+', '+data.datos_causa_consecuencia[i]['id_probabilidad']+');">'+
                                          'Evaluar'+
                                        '</button>'+
                                      '</td>'+
                                    '</tr>';
                            }

                        }

                      }

                         


          }


          $('#lista_causa_consecuencia').html(listahtml);

        }else{
          
          $('#lista_causa_consecuencia').html('No se encontraron causas y consecuencias relacionadas.');

        }

    }
  });

}
  
// Carga riesgo en modal nueva causa
function abreModalCausa(accion, id, id_causa, id_consecuencia, desc_causa, desc_consecuencia, estado_riesgo){

  let id_riesgo = $('#id_riesgo').val(); // Obtenemos id_riesgo

  if(id_riesgo == 0){

    Swal.fire({
      icon: 'info',
      title: '',
      html: 'Asegurate de seleccionar un riesgo',
      confirmButtonText: 'Aceptar',
      confirmButtonColor: '#28A745',
      showConfirmButton: true,
      // footer: '<a href>Why do I have this issue?</a>'
    })

  }else if(estado_riesgo == 0){
    // Si el estado del riesgo es 0 (Inactivo) imprimimos un mensaje indicando que no es posible Editar una causa

    Swal.fire({
      icon: 'info',
      title: 'Riesgo inactivo',
      html: 'No es posible editar esta causa.',
      showConfirmButton: false,
      timer: 2500
    })

    return false;

  }else{

    // Si esta función se ejecuta desde el botón agregar causa, ocultamos el botón actualizar
    if(accion == 'agregar'){
      
      // Titulo modal causa
      $('#title_modal_causa').html('Nueva causa');

      document.getElementById('modal_nc_btn_actualiza_causa').style.display='none';
      document.getElementById('modal_nc_btn_agregar_causa').style.display='block';

      // Limpiamos los campos del formulario "frm_nueva_causa" en el modal "modal_nueva_causa"
      $('#nc_id_causa_consecuencia').val(id);
      $('#nc_id_causa').val(0).trigger('change.select2');
      $('#nc_id_consecuencia').val(0).trigger('change.select2');
      $('#nc_descripcion_causa').val('');
      $('#nc_descripcion_consecuencia').val('');

      // Habilitamos tipo de causa y tipo de consecuencia
      $('#nc_id_causa').attr('disabled', false);
      $('#nc_id_consecuencia').attr('disabled', false);

    }else if(accion == 'actualizar'){
      
      // Titulo modal causa
      $('#title_modal_causa').html('Editar causa');

      document.getElementById('modal_nc_btn_actualiza_causa').style.display='block';
      document.getElementById('modal_nc_btn_agregar_causa').style.display='none';

      // Poblamos los campos del formulario "frm_nueva_causa" en el modal "modal_nueva_causa"
      $('#nc_id_causa_consecuencia').val(id);
      $('#nc_id_causa').val(id_causa).trigger('change.select2');
      $('#nc_id_consecuencia').val(id_consecuencia).trigger('change.select2');
      $('#nc_descripcion_causa').val(desc_causa);
      $('#nc_descripcion_consecuencia').val(desc_consecuencia);

      // Deshabilitamos tipo de causa y tipo de consecuencia
      $('#nc_id_causa').attr('disabled', true);
      $('#nc_id_consecuencia').attr('disabled', true);

    }

     $('#nc_id_riesgo').val(id_riesgo); 
     $('#modal_nueva_causa').modal('show');

  }

}

// Registra causa
function registraCausa(id_formulario, id_usuario, accion, controlador, modulo, modal){

    // Parámetros obtenidos del formulario
    let parametros = new FormData($('#'+id_formulario)[0]);
    parametros.append('peticion', 'ajax');
    parametros.append('accion', accion);
    parametros.append('id_usuario', id_usuario);

    // Leyendo parámetros
    parametros.forEach(function(value, key){
        console.log("key: "+key+", value: "+value);
    });

    $.ajax({
        url: controlador,
        type: 'POST',
        data: parametros,
        cache: false,
        processData: false,
        contentType: false,
        dataType: 'json',
    }).done(function(respuesta){

        console.log(respuesta);

        if(respuesta.hasOwnProperty('success')){

            Swal.fire({
                icon: 'success',
                title: 'Proceso exitoso',
                html: respuesta.success,
                showConfirmButton: false,
                timer: 1200
              })

            // Cerramos modal
            if(modal != ""){
                $('#'+modal).modal('hide');
            }

          // Ejecutamos la función consultaRiesgo()
          consultaRiesgo(respuesta.id_riesgo, ''); 

        }else if(respuesta.hasOwnProperty('info')){

            Swal.fire({
              icon: 'info',
              // title: 'Error',
              html: respuesta.info,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'
            })
            
        }else{

            Swal.fire({
              icon: 'error',
              // title: 'Error',
              html: respuesta.error,
              confirmButtonText: 'Aceptar',
              confirmButtonColor: '#28A745',
              showConfirmButton: true,
              // footer: '<a href>Why do I have this issue?</a>'
            })
            
        }

    });

}

// Abre modal control
function abreModalControl(id, id_causa, id_consecuencia, desc_causa, desc_consecuencia, id_proceso, id_estado, id_clase, titulo_riesgo, desc_riesgo, id_probabilidad, id_impacto, id_nivel_consecuencia){
  
  $('#mc_id_causa').val(id);
  $('#mc_id_nivel_consecuencia').val(id_nivel_consecuencia);
  $('#mc_id_proceso').val(id_proceso).trigger('change.select2');
  $('#mc_estado').val(id_estado).trigger('change.select2');
  $('#mc_clasificacion').val(id_clase).trigger('change.select2');
  $('#mc_titulo').val(titulo_riesgo);
  $('#mc_descripcion').val(desc_riesgo);
  $('#mc_id_probabilidad').val(id_probabilidad).trigger('change.select2');
  $('#mc_id_impacto').val(id_impacto).trigger('change.select2');

  // Si esl estado del riesgo es 0 (INACTIVO), imprimimos un mensaje indicando que no se puede agregar un control.
  if(id_estado == 0){
    Swal.fire({
      icon: 'info',
      title: 'Riesgo inactivo',
      html: 'No es posible agregar un control.',
      showConfirmButton: false,
      timer: 2500
    })
  }else{
    $('#modal_nuevo_control').modal('show');
  }

}

// Desabilita efectividades de control 
function abilitaDesabilitaEfectividadControl(id_checkbox, id_verificacion, id_formulario, id_usuario, accion, controlador, modulo, modal){

  let value_check = $('input:checkbox[name='+id_checkbox+']:checked').val()
  console.log('******************** check ****************************');
  console.log('id_checkbox: '+value_check+', id_verificacion: '+id_verificacion);
  
  if(id_checkbox == 'check1' && value_check == 'on'){

    $('#check3').prop('checked', false);
    $('#check4').prop('checked', false);
    $('#check5').prop('checked', false);

    $('#check2').attr('disabled',false);
    $('#check3').attr('disabled',true);
    $('#check4').attr('disabled',true);
    $('#check5').attr('disabled',true);

  }else if(id_checkbox == 'check1' && value_check != 'on'){

    $('#check2').prop('checked', false);
    $('#check3').prop('checked', false);
    $('#check4').prop('checked', false);
    $('#check5').prop('checked', false);

    $('#check2').attr('disabled',true);
    $('#check3').attr('disabled',true);
    $('#check4').attr('disabled',true);
    $('#check5').attr('disabled',true);

  }else if(id_checkbox == 'check2' && value_check == 'on'){

    $('#check4').prop('checked', false);
    $('#check5').prop('checked', false);

    $('#check3').attr('disabled',false);
    $('#check4').attr('disabled',true);
    $('#check5').attr('disabled',true);

  }else if(id_checkbox == 'check2' && value_check != 'on'){

    $('#check3').prop('checked', false);
    $('#check4').prop('checked', false);
    $('#check5').prop('checked', false);

    $('#check3').attr('disabled',true);
    $('#check4').attr('disabled',true);
    $('#check5').attr('disabled',true);

  }else if(id_checkbox == 'check3' && value_check == 'on'){

    $('#check5').prop('checked', false);

    $('#check4').attr('disabled',false);
    $('#check5').attr('disabled',true);

  }else if(id_checkbox == 'check3' && value_check != 'on'){

    $('#check4').prop('checked', false);
    $('#check5').prop('checked', false);

    $('#check4').attr('disabled',true);
    $('#check5').attr('disabled',true);

  }else if(id_checkbox == 'check4' && value_check == 'on'){

    $('#check5').attr('disabled',false);

  }else if(id_checkbox == 'check4' && value_check != 'on'){

    $('#check5').prop('checked', false);

    $('#check5').attr('disabled',true);

  }

    // Parámetros obtenidos del formulario
    let parametros = new FormData($('#'+id_formulario)[0]);
    parametros.append('peticion', 'ajax');
    parametros.append('accion', accion);
    parametros.append('id_usuario', id_usuario);
    parametros.append('id_casilla', id_verificacion);

    // Leyendo parámetros
    parametros.forEach(function(value, key){
        console.log("key: "+key+", value: "+value);
    });

    $.ajax({
        url: controlador,
        type: 'POST',
        data: parametros,
        cache: false,
        processData: false,
        contentType: false,
        dataType: 'json',
    }).done(function(respuesta){

      console.log(respuesta);

      if(respuesta){

        // Imprimimos texto
        $('#puntaje_evaluacion').html(respuesta.puntaje);
        $('#casilla_valoracion').html(respuesta.casilla);

        // Almacenamos en inputs
        $('#input_puntaje_evaluacion').val(respuesta.puntaje);
        $('#input_casilla_valoracion').val(respuesta.casilla);

        if(respuesta.casilla == 1){
          $('#text_casilla').html('Casilla en la Valoración');
        }else{
          $('#text_casilla').html('Casillas en la Valoración');
        }

      }else{

        // Imprimimos texto
        $('#puntaje_evaluacion').html(0);
        $('#casilla_valoracion').html(0);

        // Almacenamos en inputs
        $('#input_puntaje_evaluacion').val(0);
        $('#input_casilla_valoracion').val(0);
      
      }

    });

}

// Consulta nivel evaluación
function consultaNivelEvaluacion(id_nivel_evaluacion){

  $.ajax({
    url: '../controlador/gestion.riesgo.controlador.php',
    type: 'POST',
    data: "id_nivel_evaluacion="+id_nivel_evaluacion+"&accion=calcular_nivel_evaluacion&peticion=ajax",
    dataType: 'json',
    success:function(data){
      
      console.log(data);

      if(data){
        
        $('#detalle_nivel_calificacion').html(data.detalle);
        $('#calificacion').html(data.calificacion);

      }else{

        $('#detalle_nivel_calificacion').html('');
        $('#calificacion').html(0);        
      
      }

    }
  });

}

// Registra control
function registraControl(id_formulario, id_usuario, accion, controlador, modulo, modal){

  // Parámetros obtenidos del formulario
  let parametros = new FormData($('#'+id_formulario)[0]);
  parametros.append('peticion', 'ajax');
  parametros.append('accion', accion);
  parametros.append('id_usuario', id_usuario);

  // Leyendo parámetros
  parametros.forEach(function(value, key){
    console.log("key: "+key+", value: "+value);
  });

  $.ajax({
    url: controlador,
    type: 'POST',
    data: parametros,
    cache: false,
    processData: false,
    contentType: false,
    dataType: 'json',
  }).done(function(respuesta){

    console.log(respuesta);

    if(respuesta.hasOwnProperty('success')){

      Swal.fire({
        icon: 'success',
        title: 'Proceso exitoso',
        html: respuesta.success,
        showConfirmButton: false,
        timer: 1200
      })

      // Cerramos modal control
      $('#'+modal).modal('hide');

      $('#mc_id_tipo_control').val(0).trigger('change.select2');
      $('#mc_id_clasificacion').val(0).trigger('change.select2');
      $('#mc_descripcion_control').val('');

    }else if(respuesta.hasOwnProperty('info')){

      Swal.fire({
        icon: 'info',
        // title: 'Error',
        html: respuesta.info,
        confirmButtonText: 'Aceptar',
        confirmButtonColor: '#28A745',
        showConfirmButton: true,
        // footer: '<a href>Why do I have this issue?</a>'
      })
            
    }else{

      Swal.fire({
        icon: 'error',
        // title: 'Error',
        html: respuesta.error,
        confirmButtonText: 'Aceptar',
        confirmButtonColor: '#28A745',
        showConfirmButton: true,
        // footer: '<a href>Why do I have this issue?</a>'
      })
            
    }

  });

}

// Abre modal actualiza control
function abreModalActualizaControl(id_causa_consecuencia, id_clasificacion, estado_control, desc_control, id_tipo_control, id_control){
  
  $('#actualiza_control_id_causa').val(id_causa_consecuencia).trigger('change.select2')
  $('#actualiza_control_id_control').val(id_control).trigger('change.select2')
  $('#actualiza_control_id_clasificacion').val(id_clasificacion).trigger('change.select2')
  $('#actualiza_control_id_tipo_control').val(id_tipo_control).trigger('change.select2')
  $('#actualiza_control_estado').val(estado_control)
  $('#actualiza_control_descripcion').val(desc_control);

  // Si el estado del control es 0 (INACTIVO) mostramos un mensaje indicando que no puede ser modificado.
  if(estado_control == 0){
    Swal.fire({
      icon: 'info',
      title: 'Control inactivo',
      html: 'No es posible editar este control.',
      showConfirmButton: false,
      timer: 2500
    })

  }else{

    $('#modal_actualiza_control').modal('show');
  
  }

}


// Abre modal actualiza control
function abreModalEvaluacionControl(id_causa_consecuencia, id_clasificacion, estado_control, desc_control, id_tipo_control, id_control, nivel_consecuencia, id_impacto, id_probabilidad){

  $('#evalua_id_causa').val(id_causa_consecuencia)
  $('#evalua_id_control').val(id_control)
  $('#evalua_id_tipo_control').val(id_tipo_control)
  $('#evalua_id_clasificacion').val(id_clasificacion)
  $('#evalua_id_nival_consecuencia').val(nivel_consecuencia)
  $('#evalua_id_probabilidad').val(id_probabilidad)
  $('#evalua_id_impacto').val(id_impacto)

  $.ajax({
    url: '../controlador/gestion.riesgo.controlador.php',
    type: 'POST',
    data: "id_control="+id_control+"&accion=consultar_evaluacion_riesgo&peticion=ajax",
    dataType: 'json',
    success:function(data){
      
      console.log(data);

      if(data){
          
        $('#evalua_id_evaluacion').val(data.id_nivel_evaluacion).trigger('change.select2');
        $('#calificacion').html(data.calificacion);       
        $('#detalle_nivel_calificacion').html(data.destalle);
        $('#casilla_valoracion').html(data.casillas_valoracion);
        $('#input_casilla_valoracion').val(data.casillas_valoracion); 
        $('#input_puntaje_evaluacion').val(data.puntaje);
        $('#puntaje_evaluacion').html(data.puntaje);

        console.log("***");
        
        console.log(data.id_nivel_verificacion_definido);
        console.log("***");
        
        if(data.id_nivel_verificacion_definido){
          $('#check1').prop('checked', true);
          $('#check2').prop('disabled', false);
        }else{
          $('#check1').prop('checked', false);
          $('#check2').prop('disabled', true);
        }

        if(data.id_nivel_verificacion_documentado){
          $('#check2').prop('checked', true);
          $('#check3').prop('disabled', false);
        }else{
          $('#check2').prop('checked', false);
          $('#check3').prop('disabled', true);
        }

        if(data.id_nivel_verificacion_implementado){
          $('#check3').prop('checked', true);
          $('#check4').prop('disabled', false);
        }else{
          $('#check3').prop('checked', false);
          $('#check4').prop('disabled', true);
        }

        if(data.id_nivel_verificacion_socializado){
          $('#check4').prop('checked', true);
          $('#check5').prop('disabled', false);
        }else{
          $('#check4').prop('checked', false);
          $('#check5').prop('disabled', true);
        }

        if(data.id_nivel_verificacion_evaluado){
          $('#check5').prop('checked', true);
          $('#check5').prop('disabled', false);
        }else{
          $('#check5').prop('checked', false);
        }


      }else{

        $('#evalua_id_evaluacion').val(0).trigger('change.select2');
        $('#calificacion').html(0);
        $('#detalle_nivel_calificacion').html('');
        $('#casilla_valoracion').html(0); 
        $('#input_puntaje_evaluacion').val(0);  

        $('#check2').prop('disabled', true);
        $('#check3').prop('disabled', true);
        $('#check4').prop('disabled', true);
        $('#check5').prop('disabled', true);


      }

    }
  });

  if(estado_control == 0){
    Swal.fire({
      icon: 'info',
      title: 'Control inactivo',
      html: 'No es posible evaluar este control.',
      showConfirmButton: false,
      timer: 2500
    })

  }else{

     $('#modal_evaluacion_control').modal('show');
  
  }

  setTimeout(function(){ registraEvaluacion('frm_evalua_control', 19, 'registra_evaluacion1', '../controlador/gestion.riesgo.controlador.php', '', ''); }, 300);
  
}

// Actualiza control
function actualizaControl(id_formulario, id_usuario, accion, controlador, modulo, modal){

  // Parámetros obtenidos del formulario
  let id_riesgo = $('#id_riesgo').val();
  let parametros = new FormData($('#'+id_formulario)[0]);
  parametros.append('peticion', 'ajax');
  parametros.append('accion', accion);
  parametros.append('id_usuario', id_usuario);

  // Leyendo parámetros
  parametros.forEach(function(value, key){
    console.log("key: "+key+", value: "+value);
  });

  $.ajax({
    url: controlador,
    type: 'POST',
    data: parametros,
    cache: false,
    processData: false,
    contentType: false,
    dataType: 'json',
  }).done(function(respuesta){

    console.log(respuesta);

    if(respuesta.hasOwnProperty('success') && accion !='registra_evaluacion1'){

      Swal.fire({
        icon: 'success',
        title: 'Proceso exitoso',
        html: respuesta.success,
        showConfirmButton: false,
        timer: 2000
      })

      // Ejecutamos la función consultaRiesgo()
      consultaRiesgoControl(id_riesgo, ''); 

      // Cerramos modal actualiza control
      $('#modal_actualiza_control').modal('hide');

    }else if(respuesta.hasOwnProperty('info') && accion !='registra_evaluacion1'){

      Swal.fire({
        icon: 'info',
        // title: 'Error',
        html: respuesta.info,
        confirmButtonText: 'Aceptar',
        confirmButtonColor: '#28A745',
        showConfirmButton: true,
        // footer: '<a href>Why do I have this issue?</a>'
      })
            
    }else if(accion !='registra_evaluacion1'){

      Swal.fire({
        icon: 'error',
        // title: 'Error',
        html: respuesta.error,
        confirmButtonText: 'Aceptar',
        confirmButtonColor: '#28A745',
        showConfirmButton: true,
        // footer: '<a href>Why do I have this issue?</a>'
      })
            
    }

  });

}
 
// Registra evaluación control 
function registraEvaluacion(id_formulario, id_usuario, accion, controlador, modulo, modal){

  // Parámetros obtenidos del formulario
  let id_riesgo = $('#id_riesgo').val();
  let parametros = new FormData($('#'+id_formulario)[0]);
  parametros.append('peticion', 'ajax');
  parametros.append('accion', accion);
  parametros.append('id_usuario', id_usuario);
  parametros.append('id_riesgo', id_riesgo);

  // Leyendo parámetros
  parametros.forEach(function(value, key){
    console.log("key: "+key+", value: "+value);
  });

  $.ajax({
    url: controlador,
    type: 'POST',
    data: parametros,
    cache: false,
    processData: false,
    contentType: false,
    dataType: 'json',
  }).done(function(respuesta){

    console.log(respuesta);

    if(respuesta.hasOwnProperty('success')){

      Swal.fire({
        icon: 'success',
        title: 'Proceso exitoso',
        html: respuesta.success,
        showConfirmButton: false,
        timer: 1200
      })

      // Ejecutamos la función consultaRiesgo()
      // consultaRiesgoControl(id_riesgo, ''); 

      // Cerramos modal actualiza control

      // id_nivel_consecuencia_residual
      if(respuesta.id_nivel_consecuencia_residual){
        
        let color = '';
        // Definimos color de a cuerdo al nivel de consecuencia.
        if(respuesta.id_nivel_consecuencia_residual.descripcion == "Bajo"){
          color = '#28A745'; //'#00FF17';
        }else if(respuesta.id_nivel_consecuencia_residual.descripcion == "Moderado"){
          color = '#FBFF12';
        }else if(respuesta.id_nivel_consecuencia_residual.descripcion == "Alto"){
          color = '#FF8200';
        }else if(respuesta.id_nivel_consecuencia_residual.descripcion == "Extremo"){
          color = '#FF0011';
        }

        $('#div_nivel_consecuencia_recidual').html('<p>Riesgo residual</p><div class="alert col-sm-12 text-center" style="background: '+color+';" role="alert"><span class="mr-5 h6"><b>Nivel de consecuencia:</b> '+respuesta.id_nivel_consecuencia_residual.descripcion+'</span><span class="ml-5 h6"><b>Zona de riesgo:</b> '+respuesta.id_nivel_consecuencia_residual.zona+'</span></div>');

      }else{

        $('#div_nivel_consecuencia_recidual').html('');        
      
      }

      $('#modal_evaluacion_control').modal('hide');

      $('#casilla_valoracion').html('0');
      $('#evalua_id_evaluacion').val(0).trigger('change.select2');
      $('#text_casilla').html('Casillas en la valoración');
      $('#puntaje_evaluacion').html('0');
      $('#input_casilla_valoracion').val('0');
      $('#detalle_nivel_calificacion').html('');

      $('#check1').prop('checked', false);
      $('#check2').prop('checked', false);
      $('#check3').prop('checked', false);
      $('#check4').prop('checked', false);
      $('#check5').prop('checked', false);


    }else if(respuesta.hasOwnProperty('info')){

      Swal.fire({
        icon: 'info',
        // title: 'Error',
        html: respuesta.info,
        confirmButtonText: 'Aceptar',
        confirmButtonColor: '#28A745',
        showConfirmButton: true,
        // footer: '<a href>Why do I have this issue?</a>'
      })
            
    }else{

      Swal.fire({
        icon: 'error',
        // title: 'Error',
        html: respuesta.error,
        confirmButtonText: 'Aceptar',
        confirmButtonColor: '#28A745',
        showConfirmButton: true,
        // footer: '<a href>Why do I have this issue?</a>'
      })
            
    }

  });

}

// ======================================= Funciones relacionadas al dashboard de gestión de riesgo ======================================

function consultaNivelConsecuenciaProceso(){

  $.ajax({
    url: '../controlador/gestion.riesgo.controlador.php',
    type: 'POST',
    data: "accion=consulta_nivel_consecuencia_proceso&peticion=ajax",
    dataType: 'json',
    success:function(data){
      console.log(data);

      $('#charts_riesgos').html('');
      
      if($.isEmptyObject(data) === false){

        let colores = '';
        let colores_residual = '';
        // Riesgos por zona
        const desc_niveles_consecuencia = [];
        const cantidad_riesgos_zona = [];

        // Riesgos por proceso
        let id_proceso_ = [];
        const desc_proceso = [];
        const catidad_riesgos = [];

        // Riesgos reciduales por zona
        const desc_niveles_consecuencia_residual = [];
        const cantidad_riesgos_residual_zona = [];

        // Promedio nivel consecuencia proceso
        const id_proceso = [];
        const promedio_des_proceso = [];
        const promedio = [];
        const colorparapromedios = [];

        let matrizriesgo = '';

        let html = '<div class="row text-center">'+
                      '<div class="col-sm-12 text-center"><p class="h4"><b>Zona de riesgo inicial</b></p></div>'+
                      '<canvas id="chartconsecuencias" width="400" height="100"></canvas>'+
                      '<div class="col-sm-12 text-center" style="margin-top: 25px;"><p class="h4"><b>Zona de riesgo residual</b></p></div>'+
                      '<canvas id="chartriesgoszonaresidual" width="400" height="100" style="margin-top: 20px;"></canvas>'+
                      '<div class="col-sm-12 text-center" style="margin-top: 25px;"><p class="h4"><b>Riesgos por proceso</b></p></div>'+
                      '<canvas id="chartriesgosproceso" width="400" height="100" style="margin-top: 20px;"></canvas>'+
                      '<div class="col-sm-12 text-center" style="margin-top: 25px;"><p class="h4"><b>Promedio de consecuencias residuales</b></p></div>'+
                      '<canvas id="chartrpromedionivelconsecuenciaproceso" width="400" height="100" style="margin-top: 20px;"></canvas>'+
                    '</div>';
        
        $('#charts_riesgos').append(html);

        // Recorro la data recibida poblando los arreglo desc_nivel_consecuencia y cantidad_riesgos_zona
        for(let x=0; x < data.niveles_consecuencia.length; x++){

          desc_niveles_consecuencia.push(data.niveles_consecuencia[x]['desc_nivel_consecuencia']);
          cantidad_riesgos_zona.push(data.niveles_consecuencia[x]['cantidad']);
          console.log('test');
        }

        // Definimos los colores que se utilizarán de acuerdo a la data recibida
        if(desc_niveles_consecuencia.includes('Alto') && desc_niveles_consecuencia.includes('Bajo') && desc_niveles_consecuencia.includes('Extremo') && desc_niveles_consecuencia.includes('Moderado')){
          colores = ['#FF8200', '#28A745', '#FF0011', '#FBFF12']; 
        }else if(desc_niveles_consecuencia.includes('Alto') && desc_niveles_consecuencia.includes('Bajo') && desc_niveles_consecuencia.includes('Extremo')){
          colores = ['#FF8200', '#28A745', '#FF0011']; 
        }else if(desc_niveles_consecuencia.includes('Alto') && desc_niveles_consecuencia.includes('Extremo') && desc_niveles_consecuencia.includes('Moderado')){
          colores = ['#FF8200', '#FF0011', '#FBFF12']; 
        }else if(desc_niveles_consecuencia.includes('Bajo') && desc_niveles_consecuencia.includes('Extremo') && desc_niveles_consecuencia.includes('Moderado')){
          colores = ['#28A745', '#FF0011', '#FBFF12']; 
        }else if(desc_niveles_consecuencia.includes('Alto') && desc_niveles_consecuencia.includes('Bajo')){
          colores = ['#FF8200', '#28A745']; 
        }else if(desc_niveles_consecuencia.includes('Alto') && desc_niveles_consecuencia.includes('Extremo')){
          colores = ['#FF8200', '#FF0011']; 
        }else if(desc_niveles_consecuencia.includes('Alto') && desc_niveles_consecuencia.includes('Moderado')){
          colores = ['#FF8200', '#FBFF12']; 
        }else if(desc_niveles_consecuencia.includes('Bajo') && desc_niveles_consecuencia.includes('Extremo')){
          colores = ['#28A745', '#FF0011']; 
        }else if(desc_niveles_consecuencia.includes('Bajo') && desc_niveles_consecuencia.includes('Moderado')){
          colores = ['#28A745', '#FBFF12']; 
        }else if(desc_niveles_consecuencia.includes('Extremo') && desc_niveles_consecuencia.includes('Moderado')){
          colores = ['#FF0011', '#FBFF12'];
        }else if(desc_niveles_consecuencia.includes('Alto')){
          colores = ['#FF8200']; 
        }else if(desc_niveles_consecuencia.includes('Bajo')){
          colores = ['#28A745']; 
        }else if(desc_niveles_consecuencia.includes('Extremo')){
          colores = ['#FF0011']; 
        }else if(desc_niveles_consecuencia.includes('Moderado')){
          colores = ['#FBFF12']; 
        }

        // Chart Consecuencias
        var ctx = document.getElementById("chartconsecuencias");
        var myChart = new Chart(ctx, {
            type: 'bar',
            data: {
                labels: desc_niveles_consecuencia,
                datasets: [{
                    label: '',
                    data: cantidad_riesgos_zona,
                    backgroundColor: colores
                }]
            },
            options: {
                "hover": {
                    "animationDuration": 0
                },
                "animation": {
                    "duration": 1,
                    "onComplete": function () {
                        var chartInstance = this.chart,
                        ctx = chartInstance.ctx;

                        ctx.font = "bold 16px verdana, sans-serif";
                        ctx.textAlign = "start";
                        ctx.textBaseline = "bottom";
                        ctx.fillStyle = "#000";  //<======= and here

                        this.data.datasets.forEach(function (dataset, i) {
                            var meta = chartInstance.controller.getDatasetMeta(i);
                            meta.data.forEach(function (bar, index) {
                                var data = dataset.data[index];                            
                                ctx.fillText(data, bar._model.x, bar._model.y - 5);
                            });
                        });
                    }
                },
                legend: {
                    "display": false
                },
                tooltips: {
                    "enabled": true
                },
                tooltips: false,
                // tooltips: {
                //   "display": false,
                //   titleFontSize: 20,
                //   bodyFontSize: 20
                // },
                scales: {
                    yAxes: [{
                        display: true,
                        gridLines: {
                            display : true
                        },
                        ticks: {
                            display: true,
                            beginAtZero:true
                        }
                    }],
                    xAxes: [{
                        gridLines: {
                            display : false
                        },
                        ticks: {
                            beginAtZero:true
                        }
                    }]
                },
                pointLabels: { 
                    fontSize: 30
                },
                title: {
                    display: true,
                    // text: 'Zona de riesgo inicial',
                    fontSize: 20,
                    padding: 10,
                //     fontFamily: "candara",
                //     fontColor: '#000',  
                //     position: 'top',
                }
            }
        });

        // Recorremos riesgos proceso.
        for(let x=0; x < data.riesgos_proceso.length; x++){

          id_proceso_.push(data.riesgos_proceso[x]['id_proceso']);
          desc_proceso.push(data.riesgos_proceso[x]['desc_proceso']);
          catidad_riesgos.push(data.riesgos_proceso[x]['cantidad']);
        
        }
        
        // Chart riesgos por proceso.
        var ctx = document.getElementById("chartriesgosproceso");
        var myChart = new Chart(ctx, {
            type: 'bar',
            data: {
                labels: desc_proceso,
                datasets: [{
                    label: 'Proceso',
                    data: catidad_riesgos,
                    backgroundColor: "#3498DB"
                }]
            },
            options: {
                "hover": {
                    "animationDuration": 0
                },
                "animation": {
                    "duration": 1,
                    "onComplete": function () {
                        var chartInstance = this.chart,
                        ctx = chartInstance.ctx;

                        ctx.font = "bold 16px verdana, sans-serif";
                        ctx.textAlign = "start";
                        ctx.textBaseline = "bottom";
                        ctx.fillStyle = "#000";  //<======= and here

                        this.data.datasets.forEach(function (dataset, i) {
                            var meta = chartInstance.controller.getDatasetMeta(i);
                            meta.data.forEach(function (bar, index) {
                                var data = dataset.data[index];                            
                                ctx.fillText(data, bar._model.x, bar._model.y - 5);
                            });
                        });
                    }
                },
                legend: {
                    "display": true
                },
                tooltips: {
                    "enabled": true
                },
                onClick:function(e, items){
                    if ( items.length == 0 ) return; //Clicked outside any bar.
                      console.log('This is a test...');
                      console.log('e: '+e+' items: '+items);
                      console.log(items[0]); // objeto
                      console.log(items[0]['_index']); // index

                      console.log('id_proceso:'+id_proceso_[items[0]['_index']]+' desc: '+desc_proceso[items[0]['_index']]+', cantidad: '+catidad_riesgos[items[0]['_index']])

                      $.ajax({
                        url: '../controlador/gestion.riesgo.controlador.php',
                        type: 'POST',
                        data: "id_proceso="+id_proceso_[items[0]['_index']]+"&accion=consulta_riesgos_proceso&peticion=ajax",
                        dataType: 'json',
                        success:function(data){
                          
                          console.log(data);

                          let listariesgos = '';
                          for (let r = 0; r < data.riesgos.length; r++) {

                            listariesgos += '<tr>'+
                                              '<td>'+data.riesgos[r]['titulo']+'</td>'+
                                              '<td>'+data.riesgos[r]['descripcion']+'</td>'+
                                              '<td>'+data.riesgos[r]['estado']+'</td>'+
                                              '<td>'+data.riesgos[r]['fecha_creacion']+'</td>'+
                                           '</tr>';
                          
                          }
                          
                          // Descripción del proceso.
                          $('#titulo_riesgos_proceso').html(desc_proceso[items[0]['_index']]);

                          $('#lista_riesgo_proceso').html(listariesgos);

                          $('#modal_riesgos_proceso').modal('show');

                        }
                      })  

                },
                tooltips: false,
                // tooltips: {
                //   "display": false,
                //   titleFontSize: 20,
                //   bodyFontSize: 20
                // },
                scales: {
                    yAxes: [{
                        display: true,
                        gridLines: {
                            display : true
                        },
                        ticks: {
                            display: true,
                            beginAtZero:true
                        }
                    }],
                    xAxes: [{
                        gridLines: {
                            display : false
                        },
                        ticks: {
                            beginAtZero:true
                        }
                    }]
                },
                pointLabels: { 
                    fontSize: 30
                },
                title: {
                    // display: true,
                    // text: 'Riesgos por proceso',
                    // fontSize: 20,
                //     fontFamily: "candara",
                //     fontColor: '#000',  
                //     position: 'top',
                }
            }
        });

        // Recorremos riesgos residuales.
        for(let x=0; x < data.nivel_consecuencia_riesgo_residual.length; x++){

          desc_niveles_consecuencia_residual.push(data.nivel_consecuencia_riesgo_residual[x]['desc_nivel_consecuencia']);
          cantidad_riesgos_residual_zona.push(data.nivel_consecuencia_riesgo_residual[x]['cantidad']);
        
        }

        // console.log(desc_niveles_consecuencia_residual);promedio_nivel_consecuencia_proceso

        // Definimos los colores que se utilizarán de acuerdo a la data recibida
        if(desc_niveles_consecuencia_residual.includes('Alto') && desc_niveles_consecuencia_residual.includes('Bajo') && desc_niveles_consecuencia_residual.includes('Extremo') && desc_niveles_consecuencia_residual.includes('Moderado')){
          colores_residual = ['#FF8200', '#28A745', '#FF0011', '#FBFF12']; 
        }else if(desc_niveles_consecuencia_residual.includes('Alto') && desc_niveles_consecuencia_residual.includes('Bajo') && desc_niveles_consecuencia_residual.includes('Extremo')){
          colores_residual = ['#FF8200', '#28A745', '#FF0011']; 
        }else if(desc_niveles_consecuencia_residual.includes('Alto') && desc_niveles_consecuencia_residual.includes('Extremo') && desc_niveles_consecuencia_residual.includes('Moderado')){
          colores_residual = ['#FF8200', '#FF0011', '#FBFF12']; 
        }else if(desc_niveles_consecuencia_residual.includes('Bajo') && desc_niveles_consecuencia_residual.includes('Extremo') && desc_niveles_consecuencia_residual.includes('Moderado')){
          colores_residual = ['#28A745', '#FF0011', '#FBFF12']; 
        }else if(desc_niveles_consecuencia_residual.includes('Alto') && desc_niveles_consecuencia_residual.includes('Bajo')){
          colores_residual = ['#FF8200', '#28A745']; 
        }else if(desc_niveles_consecuencia_residual.includes('Alto') && desc_niveles_consecuencia_residual.includes('Extremo')){
          colores_residual = ['#FF8200', '#FF0011']; 
        }else if(desc_niveles_consecuencia_residual.includes('Alto') && desc_niveles_consecuencia_residual.includes('Moderado')){
          colores_residual = ['#FF8200', '#FBFF12']; 
        }else if(desc_niveles_consecuencia_residual.includes('Bajo') && desc_niveles_consecuencia_residual.includes('Extremo')){
          colores_residual = ['#28A745', '#FF0011']; 
        }else if(desc_niveles_consecuencia_residual.includes('Bajo') && desc_niveles_consecuencia_residual.includes('Moderado')){
          colores_residual = ['#28A745', '#FBFF12']; 
        }else if(desc_niveles_consecuencia_residual.includes('Extremo') && desc_niveles_consecuencia_residual.includes('Moderado')){
          colores_residual = ['#FF0011', '#FBFF12'];
        }else if(desc_niveles_consecuencia_residual.includes('Alto')){
          colores_residual = ['#FF8200']; 
        }else if(desc_niveles_consecuencia_residual.includes('Bajo')){
          colores_residual = ['#28A745']; 
        }else if(desc_niveles_consecuencia_residual.includes('Extremo')){
          colores_residual = ['#FF0011']; 
        }else if(desc_niveles_consecuencia_residual.includes('Moderado')){
          colores_residual = ['#FBFF12']; 
        }

        // Chart Consecuencias
        var ctx = document.getElementById("chartriesgoszonaresidual");
        var myChart = new Chart(ctx, {
            type: 'bar',
            data: {
                labels: desc_niveles_consecuencia_residual,
                datasets: [{
                    label: '',
                    data: cantidad_riesgos_residual_zona,
                    backgroundColor: colores_residual
                }]
            },
            options: {
                "hover": {
                    "animationDuration": 0
                },
                "animation": {
                    "duration": 1,
                    "onComplete": function () {
                        var chartInstance = this.chart,
                        ctx = chartInstance.ctx;

                        ctx.font = "bold 16px verdana, sans-serif";
                        ctx.textAlign = "start";
                        ctx.textBaseline = "bottom";
                        ctx.fillStyle = "#000";  //<======= and here

                        this.data.datasets.forEach(function (dataset, i) {
                            var meta = chartInstance.controller.getDatasetMeta(i);
                            meta.data.forEach(function (bar, index) {
                                var data = dataset.data[index];                            
                                ctx.fillText(data, bar._model.x, bar._model.y - 10);
                            });
                        });
                    }
                },
                legend: {
                    "display": false
                },
                tooltips: {
                    "enabled": true
                },
                tooltips: false,
                // tooltips: {
                //   "display": false,
                //   titleFontSize: 20,
                //   bodyFontSize: 20
                // },
                scales: {
                    yAxes: [{
                        display: true,
                        gridLines: {
                            display : true
                        },
                        ticks: {
                            display: true,
                            beginAtZero:true
                        }
                    }],
                    xAxes: [{
                        gridLines: {
                            display : false
                        },
                        ticks: {
                            beginAtZero:true
                        }
                    }]
                },
                pointLabels: { 
                    fontSize: 30
                },
                title: {
                    display: true,
                    // text: 'Zona de riesgo inicial',
                    fontSize: 20,
                    padding: 10,
                //     fontFamily: "candara",
                //     fontColor: '#000',  
                //     position: 'top',
                }
            }
        });
       
        for(let x=0; x < data.promedio_nivel_consecuencia_proceso.length; x++){

          id_proceso.push(data.promedio_nivel_consecuencia_proceso[x]['id_proceso']);
          promedio_des_proceso.push(data.promedio_nivel_consecuencia_proceso[x]['desc_proceso']);
          promedio.push(data.promedio_nivel_consecuencia_proceso[x]['promedio']);

          if(data.promedio_nivel_consecuencia_proceso[x]['promedio'] >= 1 && data.promedio_nivel_consecuencia_proceso[x]['promedio'] <= 3){

            colorparapromedios.push('#28A745');

          }else if(data.promedio_nivel_consecuencia_proceso[x]['promedio'] >= 4 && data.promedio_nivel_consecuencia_proceso[x]['promedio'] <= 8){

            colorparapromedios.push('#FBFF12');

          }else if(data.promedio_nivel_consecuencia_proceso[x]['promedio'] >= 9 && data.promedio_nivel_consecuencia_proceso[x]['promedio'] <= 15){

            colorparapromedios.push('#FF8200');

          }else if(data.promedio_nivel_consecuencia_proceso[x]['promedio'] >= 16 && data.promedio_nivel_consecuencia_proceso[x]['promedio'] <= 25){

            colorparapromedios.push('#FF0011');

          }

        }

        console.log(promedio_des_proceso)

        // Chart Consecuencias
        var ctx = document.getElementById("chartrpromedionivelconsecuenciaproceso");
        var myChart = new Chart(ctx, {
            type: 'bar',
            data: {
                labels: promedio_des_proceso,
                datasets: [{
                    label: '',
                    data: promedio,
                    backgroundColor: colorparapromedios
                }]
            },
            options: {
                "hover": {
                    "animationDuration": 0
                },
                "animation": {
                    "duration": 1,
                    "onComplete": function () {
                        var chartInstance = this.chart,
                        ctx = chartInstance.ctx;

                        ctx.font = "bold 16px verdana, sans-serif";
                        ctx.textAlign = "start";
                        ctx.textBaseline = "bottom";
                        ctx.fillStyle = "#000";  //<======= and here

                        this.data.datasets.forEach(function (dataset, i) {
                            var meta = chartInstance.controller.getDatasetMeta(i);
                            meta.data.forEach(function (bar, index) {
                                var data = dataset.data[index];                            
                                ctx.fillText(data, bar._model.x, bar._model.y - 5);
                            });
                        });
                    }
                },
                legend: {
                    "display": false
                },
                tooltips: {
                    "enabled": true
                },
                onClick:function(e, items){
                    if ( items.length == 0 ) return; //Clicked outside any bar.
                      console.log('This is a test...');
                      console.log('e: '+e+' items: '+items);
                      console.log(items[0]); // objeto
                      console.log(items[0]['_index']); // index

                      console.log('id_proceso:'+id_proceso[items[0]['_index']]+' desc: '+promedio_des_proceso[items[0]['_index']]+', promedio: '+promedio[items[0]['_index']])

                      $.ajax({
                        url: '../controlador/gestion.riesgo.controlador.php',
                        type: 'POST',
                        data: "id_proceso="+id_proceso[items[0]['_index']]+"&accion=consulta_riesgos_proceso&peticion=ajax",
                        dataType: 'json',
                        success:function(data){
                          
                          console.log(data);

                          let listariesgos = '';
                          for (let r = 0; r < data.riesgos.length; r++) {

                            listariesgos += '<tr>'+
                                              '<td>'+data.riesgos[r]['titulo']+'</td>'+
                                              '<td>'+data.riesgos[r]['descripcion']+'</td>'+
                                              '<td>'+data.riesgos[r]['estado']+'</td>'+
                                              '<td>'+data.riesgos[r]['fecha_creacion']+'</td>'+
                                           '</tr>';
                          
                          }

                          // Descripción del proceso.
                          $('#titulo_riesgos_proceso').html(promedio_des_proceso[items[0]['_index']]);

                          $('#lista_riesgo_proceso').html(listariesgos);

                          $('#modal_riesgos_proceso').modal('show');

                        }
                      })  


                },
                scales: {
                    yAxes: [{
                        display: true,
                        gridLines: {
                            display : true
                        },
                        ticks: {
                            display: true,
                            beginAtZero:true
                        }
                    }],
                    xAxes: [{
                        gridLines: {
                            display : false
                        },
                        ticks: {
                            beginAtZero:true
                        }
                    }]
                },
                pointLabels: { 
                    fontSize: 30
                },
                title: {
                    display: true,
                    // text: 'Zona de riesgo inicial',
                    fontSize: 20,
                    padding: 10,
                //     fontFamily: "candara",
                //     fontColor: '#000',  
                //     position: 'top',
                }
            }
        });

        // Matriz de riesgos detallando cantidad de riesgos por nivel de consecuencia.
        $('#matriz').html(data.datamatriz);              
        
      }else{

        $('#charts_riesgos').html('<p>No se encontraron resultados.</p>'); 
      
      }

    }
  }); 

}
