templates/dashboard/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% if form is defined %}
  3.     {% form_theme form 'bootstrap_4_layout.html.twig' %}
  4. {% endif %}
  5. {% block stylesheets %}
  6.     <link href="https://unpkg.com/gijgo@1.9.14/css/gijgo.min.css" rel="stylesheet" type="text/css" />
  7.     <link rel="stylesheet" href="{{ asset('plugins/toastr/toastr.min.css') }}">
  8.     <style>
  9.         label {
  10.             margin: 0 5px;
  11.         }
  12.         .form-group {
  13.             margin-right: 10px;
  14.         }
  15.         .barra-contenedor {
  16.             display: flex;
  17.             align-items: flex-end; /* Para que la barra crezca desde abajo */
  18.             height: 300px; /* Misma altura que el pie chart */
  19.             border: 1px solid #4d4d4d;
  20.             width: 70px; /* Ancho de la barra */
  21.             margin: 10px auto;
  22.         }
  23.         .barra-progreso {
  24.             width: 100%;
  25.             background-color: red; /* Color rojo */
  26.             transition: height 0.5s; /* Efecto suave */
  27.         }
  28.         .titulo-vertical {
  29.             /* Estilos para girar el texto a la izquierda */
  30.             transform: rotate(-90deg);
  31.             transform-origin: left top;
  32.             position: absolute;
  33.             margin-top: 150px; /* Ajuste manual para centrar */
  34.             left: 110px;
  35.             width: 300px;
  36.             text-align: center;
  37.         }
  38.     </style>
  39. {% endblock %}
  40. {% block body %}
  41. <div class="content-wrapper">
  42.     <!-- Content Header (Page header) -->
  43.     <section class="content-header">
  44.         <div class="card">
  45.             <div class="card-header">
  46.                 <h1 class="card-title">Indicadores</h1>
  47.                 <div class="card-tools">
  48.                     <ol class="breadcrumb float-sm-right">
  49.                         <li class="breadcrumb-item">Inicio</li>
  50.                         <li class="breadcrumb-item active">Indicadores</li>
  51.                     </ol>
  52.                 </div>
  53.             </div>
  54.         </div>
  55.     </section>
  56.     <!-- Main content -->
  57.     <section class="content">
  58.         <!-- Default box -->
  59.         <div class="card">
  60.             <div class="card-header">
  61.                 <div class="row">
  62.                     {% if form is defined %}
  63.                         {{ form_start(form, {'attr': {'class': 'form-inline col-md-auto', 'id': 'form_dashboard_filtro'}}) }}
  64.                         {{ form_row(form.date_inicio) }}
  65.                         {{ form_row(form.date_fin) }}
  66.                         {% if form.unidad is defined %}
  67.                             <div class="ml-3">{{ form_row(form.unidad) }}</div>
  68.                         {% endif %}
  69.                         {{ form_end(form) }}
  70.                     {% endif %}
  71.                     <div class="col text-right">
  72.                         <button id="consultar" type="button" class="btn btn-outline-success mr-2" onclick="consultar()">
  73.                             <i class="fas fa-search mr-2"></i> Consultar
  74.                         </button>
  75.                     </div>
  76.                 </div>
  77.             </div>
  78.         </div>
  79.         <!-- /.card -->
  80.         <div class="row">
  81.             <div class="col">
  82.                 <!-- Default box -->
  83.                 <div class="card">
  84.                     <div class="card-header">
  85.                         <h3 class="card-title"><b>Índice de Equipo de Cómputo Actualizado (ECA).</b></h3>
  86.                     </div>
  87.                     <div class="card-body table-responsive p-0">
  88.                         <div id="equipo"></div>
  89.                     </div>
  90.                     <!-- /.card-body -->
  91.                     <div class="card-footer pb-0 pt-0">
  92.                         <div class="row">
  93.                             <div class="col-sm-9">
  94.                                 <span style="font-size: 0.8rem">
  95.                                     <b>ECA</b>: Índice de Equipo de Cómputo Actualizado<br>
  96.                                     <b>TE</b>: Total de equipos en el inventario (no considera equipo en estatus de baja).<br>
  97.                                     <b>EMHV</b>: Total de equipos en el inventario que cumplen con el Estándar Mínimo de Hardware Vigente.<br>
  98.                                     <b>Fórmula ECA</b>: <em> EMHV / TE *100.</em>
  99.                                 </span>
  100.                             </div>
  101.                             <div class="col-sm-3" style="font-size: 0.8rem">
  102.                                 <p>Fecha inicial: <span class="date-inicial"></span></p>
  103.                                 <p>Fecha final: <span class="date-final"></span></p>
  104.                                 <p>Fecha consulta: <span class="date-actual"></span></p>
  105.                             </div>
  106.                         </div>
  107.                     </div>
  108.                     <!-- /.card-footer-->
  109.                 </div>
  110.                 <!-- /.card -->
  111.             </div>
  112.             <div class="col">
  113.                 <!-- Default box -->
  114.                 <div class="card">
  115.                     <div class="card-header">
  116.                         <h3 class="card-title"><b>Eficacia del Mantenimiento Preventivo (EMP).</b></h3>
  117.                     </div>
  118.                     <div class="card-body table-responsive p-0">
  119.                         <div class="row">
  120.                             <div class="col-sm-3 col-md-2" style="padding-top: 15px;">
  121.                                 <div id="barra-pamp-col" class="barra-contenedor" style="display: none;">
  122.                                     <div id = 'titu' class="titulo-vertical"></div>
  123.                                     <div id="barraPAMP" class="barra-progreso"></div>
  124.                                 </div>
  125.                             </div>
  126.                             <div class="col-sm-9 col-md-10">
  127.                                 <div id="solicitud"></div>
  128.                             </div>
  129.                         </div>
  130.                     </div>
  131.                     <!-- /.card-body -->
  132.                     <div class="card-footer pb-0 pt-0">
  133.                         <div class="row">
  134.                             <div class="col-sm-9">
  135.                                 <span style="font-size: 0.8rem;">
  136.                                     <b>EMP</b>: Eficacia de Mantenimiento Preventivo.<br>
  137.                                     <b>ST-Ev</b>: Total de Soportes Técnicos evaluados.<br>
  138.                                     <b>MP-Ev</b>: Total de mantenimientos preventivos evaluados.<br>
  139.                                     <b>MC-Ev</b>: Total de mantenimientos correctivos evaluados.<br>
  140.                                     <b>Fórmula EMP</b>: <em> MP-Ev / (MP-Ev + MC-Ev) *100</em>
  141.                                 </span>
  142.                             </div>
  143.                             <div class="col-sm-3" style="font-size: 0.8rem">
  144.                                 <p>Fecha inicial: <span class="date-inicial"></span></p>
  145.                                 <p>Fecha final: <span class="date-final"></span></p>
  146.                                 <p>Fecha consulta: <span class="date-actual"></span></p>
  147.                             </div>
  148.                         </div>
  149.                     </div>
  150.                     <!-- /.card-footer-->
  151.                 </div>
  152.                 <!-- /.card -->
  153.             </div>
  154.         </div>
  155.         <div class="row">
  156.             <div class="col">
  157.                 <!-- Default box -->
  158.                 <div class="card">
  159.                     <div class="card-header">
  160.                         <h3 class="card-title"><b>Resultados de la encuesta de evaluación de los mantenimientos</b></h3>
  161.                     </div>
  162.                     <div class="card-body table-responsive p-0">
  163.                         <div id="evaluacion"></div>
  164.                     </div>
  165.                     <!-- /.card-body -->
  166.                     <div class="card-footer p-0">
  167.                         <ol style="font-size: 0.8rem">
  168.                             <li><b>Sol-Ev</b>: Total de solicitudes de mantenimiento evaluadas.</li>
  169.                             <li><b>Reincidencias</b>: Total de respuestas que manifiestan una reincidencia en la falla.</li>
  170.                             <li><b>Reincidencia en fallas</b>: Porcentaje en la residencia de fallas.<b> Fórmula:</b> <em>Reincidencias / Sol-Ev * 100</em></li>
  171.                             <li><b>TR</b>: Sumatoria de valoración del tiempo de respuesta en las solicitudes evaluadas (1->Deficiente … 5->Muy bueno).</li>
  172.                             <li><b>S. tiempos de respuesta</b>: Porcentaje de satisfacción en los tiempos de respuesta. <b> Fórmula:</b> <em>TR / Sol-Ev * 100 (1->Deficiente … 5->Muy bueno).</em></li>
  173.                             <li><b>Satisfacción</b>: Nivel de satisfacción en la solución en las solicitudes evaluadas (1->Deficiente … 5->Muy bueno).</li>
  174.                             <li><b>S. solución proporcionada</b>: Porcentaje de satisfacción en la solución proporcionada.<b> Fórmula :</b> <em>Satisfacción / Sol-Ev * 100 (1->Deficiente … 5->Muy bueno).</em></li>
  175.                             <li><b>SG</b>: Percepción de la satisfacción general en la atención de las solicitudes evaluadas (1->Deficiente … 5->Muy bueno).</li>
  176.                             <li><b>S. general</b>: Porcentaje de satisfacción general de los servicios. <b> Fórmula:</b> <em>SG / Sol-Ev * 100 (1->Deficiente … 5->Muy bueno).</em></li>
  177.                             <!--<li><b>Reincidencia en fallas presentadas</b>: <em>Sumatoria de reincidencias * 100 / Total de servicios evaluados.</em></li>
  178.                             <li><b>Porcentaje de satisfacción en los tiempos de respuesta</b>: <em>(Sumatoria de satisfacción en los tiempos de respuesta * 100) / (Total de servicios evaluados * Calificación máxima <<5>>).</em></li>
  179.                             <li><b>Porcentaje de satisfacción en la solución proporcionada</b>: <em>(Sumatoria de satisfacción en la solución proporcionada  * 100) / (Total de servicios evaluados * Calificación máxima <<5>>).</em></li>
  180.                             <li><b>Porcentaje de satisfacción general de los servicios</b>: <em>(Sumatoria de satisfacción general de los servicios * 100) / (Total de servicios evaluados * Calificación máxima <<5>>).</em></li>-->
  181.                         </ol>
  182.                     </div>
  183.                     <!-- /.card-footer-->
  184.                 </div>
  185.                 <!-- /.card -->
  186.             </div>
  187.         </div>
  188.     </section>
  189.     <!-- /.content -->
  190. </div>
  191. {% endblock %}
  192. {% block javascripts %}
  193.     <script src="https://code.highcharts.com/highcharts.js"></script>
  194.     <script src="https://code.highcharts.com/highcharts-more.js"></script>
  195.     <script src="https://code.highcharts.com/modules/exporting.js"></script>
  196.     <script src="https://code.highcharts.com/modules/export-data.js"></script>
  197.     <script src="https://code.highcharts.com/modules/accessibility.js"></script>
  198.     <script src="https://unpkg.com/gijgo@1.9.14/js/gijgo.min.js" type="text/javascript"></script>
  199.     <script src="https://unpkg.com/gijgo@1.9.14/js/messages/messages.es-es.js" type="text/javascript"></script>
  200.     <script src="{{ asset('plugins/toastr/toastr.min.js') }}"></script>
  201.     <script>
  202.         // Menu lateral
  203.         $("#reporte").addClass("menu-open");
  204.         $("#reporte").find('.nav-link:first').addClass("active");
  205.         $("#indicador").addClass("active");
  206.         /*$(function() {
  207.             let firstDayYear = new Date().getFullYear() + '-01-01';
  208.             let today = new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate();
  209.             $('#dashboard_filtro_date_inicio').datepicker({
  210.                 showOtherMonths: true,
  211.                 uiLibrary: 'bootstrap4',
  212.                 modal: true,
  213.                 header: true,
  214.                 footer: true,
  215.                 iconsLibrary: 'fontawesome',
  216.                 locale: 'es-es',
  217.                 format: 'dd-mm-yyyy',
  218.                 value: firstDayYear,
  219.                 maxDate: function () {
  220.                     return $('#dashboard_filtro_date_fin').val();
  221.                 }
  222.             });
  223.             $('#dashboard_filtro_date_fin').datepicker({
  224.                 showOtherMonths: true,
  225.                 uiLibrary: 'bootstrap4',
  226.                 modal: true,
  227.                 header: true,
  228.                 footer: true,
  229.                 iconsLibrary: 'fontawesome',
  230.                 locale: 'es-es',
  231.                 value: today,
  232.                 format: 'dd-mm-yyyy',
  233.                 minDate: function () {
  234.                     return $('#dashboard_filtro_date_inicio').val();
  235.                 }
  236.             });
  237.         });*/
  238.         function consultar(mpIndice) {
  239.             //$("#table-pamp").find($("tbody")).html("<tr><td colspan='18' class='text-center'><i class='fas fa-spinner fa-pulse'></i></td></tr>");
  240.             let btn = $("#consultar");
  241.             let formData = new FormData(document.getElementById("form_dashboard_filtro"));
  242.             const fecha = new Date();
  243.             // Formatear la fecha al formato "d/m/Y H:i:s"
  244.             const fechaFormateada = fecha.toLocaleString('es-MX', {
  245.                 day: '2-digit',
  246.                 month: '2-digit',
  247.                 year: 'numeric',
  248.                 hour: '2-digit',
  249.                 minute: '2-digit',
  250.                 second: '2-digit',
  251.                 hour12: false
  252.             }).replace(',', ''); // Eliminar la coma que agrega toLocaleString()
  253.             $.ajax({
  254.                 type: 'POST',
  255.                 url: '{{ path('app_dashboard') }}',
  256.                 data: formData, // Adjuntar los campos del formulario enviado.
  257.                 dataType: "json",
  258.                 cache: false,
  259.                 contentType: false,
  260.                 processData: false,
  261.                 beforeSend: function () {
  262.                     btn.html('<i class="fas fa-spinner fa-pulse mr-2"></i> Consultar').prop('disabled', true);
  263.                 },
  264.                 success: function (data) {
  265.                     let sumatoria = [
  266.                         { inicial: '{{ form.date_inicio.vars.value|date("d/m/Y") }}', final: '{{ form.date_fin.vars.value|date("d/m/Y") }}', actual: fechaFormateada},
  267.                         { tequipo: 0, temhv: 0, teca: 0},
  268.                         { tmc: 0, tmp: 0, temp: 0}
  269.                     ];
  270.                     let equipo = data.data.equipo;
  271.                     let solicitud = data.data.solicitud;
  272.                     let evaluacion = data.data.evaluacion;
  273.                     let equipoHTML =
  274.                         `<figure class='highcharts-figure'>
  275.                             <div id='equipoGrafico'></div>
  276.                         </figure>
  277.                         <br>
  278.                         <table class='table table-sm table-hover text-nowrap'>
  279.                         <thead>
  280.                         <tr class='text-lightblue'>
  281.                             <th>Unidad administrativa</th>
  282.                             <th>TE</th>
  283.                             <th>EMHV</th>
  284.                             <th>ECA</th>
  285.                             </tr>
  286.                         </thead>
  287.                         <tbody>`;
  288.                     $.each(equipo, function (key, eq) {
  289.                         equipoHTML +=
  290.                             `<tr>
  291.                                 <td>${eq.nombre}</td>
  292.                                 <td>${eq.total}</td>
  293.                                 <td>${eq.emhv}</td>
  294.                                 <td>${eq.indice}</td>
  295.                             </tr>`;
  296.                         sumatoria[1].tequipo += parseInt(eq.total);
  297.                         sumatoria[1].temhv += parseInt(eq.emhv);
  298.                     });
  299.                     sumatoria[1].teca = (sumatoria[1].temhv / sumatoria[1].tequipo) * 100;
  300.                     // Agrega una fila al final con las sumas
  301.                     equipoHTML +=
  302.                         `<tr>
  303.                             <td class="text-right"><strong>Totales estatales:&nbsp&nbsp&nbsp&nbsp</strong></td>
  304.                             <td><strong>${sumatoria[1].tequipo}</strong></td>
  305.                             <td><strong>${sumatoria[1].temhv}</strong></td>
  306.                             <td><strong>${sumatoria[1].teca.toFixed(2)}%</strong></td>
  307.                         </tr>
  308.                         </tbody>
  309.                         </table>`;
  310.                     let solicitudHTML =
  311.                         `<figure class='highcharts-figure'>
  312.                             <div id='solicitudGrafico'></div>
  313.                         </figure>
  314.                         <br>
  315.                         <table class='table table-sm table-hover text-nowrap'>
  316.                         <thead>
  317.                         <tr class='text-lightblue'>
  318.                             <th>Unidad administrativa</th>
  319.                             <th>PAMP</th>
  320.                             <th>ST-Ev</th>
  321.                             <th>MC-Ev</th>
  322.                             <th>MP-Ev</th>
  323.                             <th>EMP</th>
  324.                         </tr>
  325.                         </thead>
  326.                         <tbody>`;
  327.                         let totalMpIndice = 0;
  328.                     $.each(solicitud, function (key, sol) {
  329.                         let st = sol.total - sol.mp - sol.mc;
  330.                         totalMpIndice = (sol.equipoCont / sol.total) * 100;
  331.                         solicitudHTML +=
  332.                             `<tr>
  333.                                 <td>${sol.nombre}</td>
  334.                                 <td>${totalMpIndice.toFixed(2)}%</td>
  335.                                 <td>${st}</td>
  336.                                 <td>${sol.mc}</td>
  337.                                 <td>${sol.mp}</td>
  338.                                 <td>${sol.indice}%</td>
  339.                             </tr>`;
  340.                         sumatoria[2].tmc += parseInt(sol.mc);
  341.                         sumatoria[2].tmp += parseInt(sol.mp);
  342.                     });
  343.                     sumatoria[2].temp = parseInt(sumatoria[2].tmp) / (parseInt(sumatoria[2].tmp) + parseInt(sumatoria[2].tmc)) * 100;
  344.                     solicitudHTML +=
  345.                         `<tr>
  346.                             <td colspan="3" class="text-right"><strong>Totales estatales:&nbsp&nbsp&nbsp&nbsp</strong></td>
  347.                             <td><strong>${sumatoria[2].tmc}</strong></td>
  348.                             <td><strong>${sumatoria[2].tmp}</strong></td>
  349.                             <td><strong>${sumatoria[2].temp.toFixed(2)}%</strong></td>
  350.                         </tr>
  351.                         </tbody>
  352.                         </table>`;
  353.                     let evaluacionHTML =
  354.                         "<figure class='highcharts-figure'>" +
  355.                             "<div id='evaluacionGrafico'></div>" +
  356.                         "</figure>" +
  357.                         "<br>" +
  358.                         "<table class='table table-sm table-hover text-nowrap'>" +
  359.                         "<thead>" +
  360.                         "<tr class='text-lightblue'>" +
  361.                             "<th>Unidad administrativa</th>" +
  362.                             "<th class='text-center'>Sol-Ev</th>" +
  363.                             "<th class='text-center'>Reincidencia en fallas</th>" +
  364.                             "<th class='text-center'>S. tiempos de respuesta</th>" +
  365.                             "<th class='text-center'>S. solución proporcionada</th>" +
  366.                             "<th class='text-center'>S. general</th>" +
  367.                         "</tr>" +
  368.                         "</thead>" +
  369.                         "<tbody>";
  370.                     $.each(evaluacion, function (key, ev) {
  371.                         evaluacionHTML +=
  372.                             "<tr>" +
  373.                                 "<td>" + ev.nombre + "</td>" +
  374.                                 "<td class='text-center'>" + ev.total + "</td>" +
  375.                                 "<td class='text-center'>" + parseFloat(ev.reincidencia).toFixed(2) + "%</td>" +
  376.                                 "<td class='text-center'>" + parseFloat(ev.tiempo).toFixed(2) + "%</td>" +
  377.                                 "<td class='text-center'>" + parseFloat(ev.solucion).toFixed(2) + "%</td>" +
  378.                                 "<td class='text-center'>" + parseFloat(ev.general).toFixed(2) + "%</td>" +
  379.                                 /*"<td class='text-center'>" + ev.reincidencia + "%</td>" +
  380.                                 "<td class='text-center'>" + ev.tiempo + "%</td>" +
  381.                                 "<td class='text-center'>" + ev.solucion + "%</td>" +
  382.                                 "<td class='text-center'>" + ev.general + "%</td>" +*/
  383.                             "</tr>";
  384.                     });
  385.                     evaluacionHTML +=
  386.                         "</tbody>" +
  387.                         "</table>";
  388.                     $("#equipo").html(equipoHTML);
  389.                     $("#solicitud").html(solicitudHTML);
  390.                     $("#evaluacion").html(evaluacionHTML);
  391.                     $(".date-inicial").text(sumatoria[0].inicial);
  392.                     $(".date-final").text(sumatoria[0].final);
  393.                     $(".date-actual").text(sumatoria[0].actual);
  394.                     if (equipo.length === 1) {
  395.                         equipoGraficoPie(equipo[0].indice);
  396.                     }
  397.                     if (solicitud.length === 1) {
  398.                         let mp = parseInt(solicitud[0].mp);
  399.                         let mc = parseInt(solicitud[0].mc);
  400.                         let total = parseInt(solicitud[0].total);
  401.                         let totalMp = parseInt(solicitud[0].equipoCont);
  402.                         let totalMpIndice = (totalMp / total) * 100;
  403.                         let mpIndice = (mp / total) * 100;
  404.                         let mcIndice = (mc / total) * 100;
  405.                         let stIndice = ((total - (mp + mc)) / total) * 100;
  406.                         solicitudGraficoPie(mpIndice, mcIndice, stIndice);
  407.                         actualizarBarraPAMP(totalMpIndice);
  408.                     }
  409.                     if (evaluacion.length === 1) {
  410.                         evaluacionGraficoSpider(evaluacion[0].reincidencia, evaluacion[0].tiempo, evaluacion[0].solucion, evaluacion[0].general);
  411.                     }
  412.                 },
  413.                 error: function (data, text, error) {
  414.                     let datos = jQuery.parseJSON(data.responseText);
  415.                     console.log(datos);
  416.                 },
  417.                 complete: function () {
  418.                     btn.html('<i class="fas fa-search mr-2"></i> Consultar').prop('disabled', false);
  419.                 }
  420.             });
  421.         }
  422.         function actualizarBarraPAMP(porcentajePAMP) {
  423.             var barra = document.getElementById('barraPAMP');
  424.             var titulo = document.getElementById('titu');
  425.             var porcentajeFormateado = parseFloat(porcentajePAMP).toFixed(2);
  426.             // Establece la altura de la barra en porcentaje (e.g., '70%')
  427.             barra.style.height = porcentajePAMP + '%';
  428.             barra.title = '% de Atención del PAMP: ' + porcentajeFormateado + '%';
  429.             titulo.innerHTML = '<b>Atención del PAMP: ' + porcentajeFormateado + '%</b>';
  430.             $('#barra-pamp-col').show();
  431.         }
  432.         function equipoGraficoPie(indice) {
  433.             // Data retrieved from https://netmarketshare.com
  434.             Highcharts.chart('equipoGrafico', {
  435.                 chart: {
  436.                     plotBackgroundColor: null,
  437.                     plotBorderWidth: null,
  438.                     plotShadow: false,
  439.                     type: 'pie'
  440.                 },
  441.                 title: {
  442.                     text: 'Equipo actualizado'
  443.                 },
  444.                 tooltip: {
  445.                     pointFormat: '{series.name}: <b>{point.percentage:.2f}%</b>'
  446.                 },
  447.                 accessibility: {
  448.                     point: {
  449.                         valueSuffix: '%'
  450.                     }
  451.                 },
  452.                 plotOptions: {
  453.                     pie: {
  454.                         allowPointSelect: true,
  455.                         cursor: 'pointer',
  456.                         dataLabels: {
  457.                             enabled: true,
  458.                             format: '<b>{point.name}</b>: {point.percentage:.2f} %'
  459.                         }
  460.                     }
  461.                 },
  462.                 series: [{
  463.                     name: 'Equipos',
  464.                     colorByPoint: true,
  465.                     data: [{
  466.                         name: 'Con EMHV',
  467.                         y: parseFloat(indice),
  468.                         sliced: true,
  469.                         selected: true,
  470.                         color: '#00ff00'
  471.                     }, {
  472.                         name: 'Sin EMHV',
  473.                         y: parseFloat(100 - indice),
  474.                         color: '#226f04'
  475.                     }]
  476.                 }],
  477.                 credits: {
  478.                     enabled: false
  479.                 }
  480.             });
  481.         }
  482.         function solicitudGraficoPie(mp, mc, st) {
  483.             Highcharts.chart('solicitudGrafico', {
  484.                 chart: {
  485.                     plotBackgroundColor: null,
  486.                     plotBorderWidth: null,
  487.                     plotShadow: false,
  488.                     type: 'pie'
  489.                 },
  490.                 title: {
  491.                     text: 'Eficacia del mantenimiento'
  492.                 },
  493.                 tooltip: {
  494.                     pointFormat: '{series.name}: <b>{point.percentage:.2f}%</b>'
  495.                 },
  496.                 accessibility: {
  497.                     point: {
  498.                         valueSuffix: '%'
  499.                     }
  500.                 },
  501.                 plotOptions: {
  502.                     pie: {
  503.                         allowPointSelect: true,
  504.                         cursor: 'pointer',
  505.                         dataLabels: {
  506.                             enabled: true,
  507.                             format: '<b>{point.name}</b>: {point.percentage:.2f} %'
  508.                         }
  509.                     }
  510.                 },
  511.                 series: [{
  512.                     name: 'Solicitudes',
  513.                     colorByPoint: true,
  514.                     data: [{
  515.                         name: 'MP-Ev',
  516.                         y: parseFloat(mp),
  517.                         sliced: true,
  518.                         selected: true,
  519.                         color: '#00ff00',
  520.                         slicedOffset: 5
  521.                     }, {
  522.                         name: 'MC-Ev',
  523.                         y: parseFloat(mc),
  524.                         color: '#226f04'
  525.                     }/*, {
  526.                         name: 'ST-Ev',
  527.                         y: parseFloat(st),
  528.                         color: '#00fabf'
  529.                     }*/]
  530.                 }],
  531.                 credits: {
  532.                     enabled: false
  533.                 }
  534.             });
  535.         }
  536.         function evaluacionGraficoSpider(reincidencia, tiempo, solucion, general) {
  537.             Highcharts.chart('evaluacionGrafico', {
  538.                 chart: {
  539.                     polar: true,
  540.                     type: 'line'
  541.                 },
  542.                 title: null,
  543.                 pane: {
  544.                     size: '75%'
  545.                 },
  546.                 xAxis: {
  547.                     categories: ['Reincidencia en fallas presentadas', 'Satisfacción en los tiempos de respuesta', 'Satisfacción en la solución proporcionada', 'Satisfacción general de los servicios'],
  548.                     tickmarkPlacement: 'on',
  549.                     lineWidth: 0
  550.                 },
  551.                 yAxis: {
  552.                     gridLineInterpolation: 'polygon',
  553.                     lineWidth: 0,
  554.                     min: 0
  555.                 },
  556.                 tooltip: {
  557.                     enabled: false
  558.                     // shared: true,
  559.                      //pointFormat: '<span style="color:{series.color}">{series.name}: <b>{point.y:,.0f}%</b><br/>'
  560.                 },
  561.                 legend: {
  562.                     enabled: false
  563.                 },
  564.                 series: [{
  565.                     name: 'Porcentaje',
  566.                     data: [parseFloat(reincidencia), parseFloat(tiempo), parseFloat(solucion), parseFloat(general)],
  567.                     dataLabels: {
  568.                         enabled: true,
  569.                         format: '<span>{y:.2f} %</span>',
  570.                     },
  571.                     pointPlacement: 'on'
  572.                 }],
  573.                 credits: {
  574.                     enabled: false
  575.                 }
  576.             });
  577.         }
  578.     </script>
  579. {% endblock %}