templates/consulta_solicitud/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %} - Consulta y Reporte de Solicitudes{% endblock %}
  3. {% if form is defined %}
  4.     {% form_theme form 'bootstrap_4_layout.html.twig' %}
  5. {% endif %}
  6. {% block stylesheets %}
  7.     <link rel="stylesheet" href="{{ asset('plugins/datatables-bs4/css/dataTables.bootstrap4.min.css') }}">
  8.     <link rel="stylesheet" href="{{ asset('plugins/datatables-responsive/css/responsive.bootstrap4.min.css') }}">
  9.     <link rel="stylesheet" href="{{ asset('plugins/datatables-buttons/css/buttons.bootstrap4.min.css')}}">
  10.     <link rel="stylesheet" href="{{ asset('plugins/toastr/toastr.min.css') }}">
  11.     <link href="https://unpkg.com/gijgo@1.9.14/css/gijgo.min.css" rel="stylesheet" type="text/css" />
  12.     <style>
  13.         label {
  14.             margin: 0 5px;
  15.         }
  16.         .form-group {
  17.             margin-right: 10px;
  18.         }
  19.     </style>
  20. {% endblock %}
  21. {% block body %}
  22. <div class="content-wrapper">
  23.     <!-- Content Header (Page header) -->
  24.     <section class="content-header">
  25.         <div class="card">
  26.             <div class="card-header">
  27.                 <h1 class="card-title">Consulta y Reporte de Solicitudes</h1>
  28.                 <div class="card-tools">
  29.                     <ol class="breadcrumb float-sm-right">
  30.                         <li class="breadcrumb-item"><a href="#">Inicio</a></li>
  31.                         <li class="breadcrumb-item active"><b>Consulta y Reporte Solicitudes</b></li>
  32.                     </ol>
  33.                 </div>
  34.             </div>
  35.         </div>
  36.     </section>
  37.     <!-- Main content -->
  38.     <section class="content">
  39.         <!-- Indicadores -->
  40.         <div class="row">
  41.             <div class="col-12 col-sm-6 col-md-3">
  42.                 <div id="estatusA" class="info-box">
  43.                     <span class="info-box-icon bg-warning elevation-1"><i class="fas fa-info-circle text-white"></i></span>
  44.                     <div class="info-box-content">
  45.                         <span class="info-box-text">Pendientes</span>
  46.                         <span class="info-box-number">0</span>
  47.                     </div>
  48.                 </div>
  49.             </div>
  50.             <div class="col-12 col-sm-6 col-md-3">
  51.                 <div id="estatusB" class="info-box mb-3">
  52.                     <span class="info-box-icon bg-danger elevation-1"><i class="fas fa-cog"></i></span>
  53.                     <div class="info-box-content">
  54.                         <span class="info-box-text">En proceso</span>
  55.                         <span class="info-box-number">0</span>
  56.                     </div>
  57.                 </div>
  58.             </div>
  59.             <div class="col-12 col-sm-6 col-md-3">
  60.                 <div id="estatusC" class="info-box mb-3">
  61.                     <span class="info-box-icon bg-success elevation-1"><i class="fas fa-thumbs-up"></i></span>
  62.                     <div class="info-box-content">
  63.                         <span class="info-box-text">Atendidas (por evaluar)</span>
  64.                         <span class="info-box-number">0</span>
  65.                     </div>
  66.                 </div>
  67.             </div>
  68.             <div class="col-12 col-sm-6 col-md-3">
  69.                 <div id="estatusD" class="info-box mb-3">
  70.                     <span class="info-box-icon bg-info elevation-1"><i class="fas fa-check-circle"></i></span>
  71.                     <div class="info-box-content">
  72.                         <span class="info-box-text">Evaluadas</span>
  73.                         <span class="info-box-number">0</span>
  74.                     </div>
  75.                 </div>
  76.             </div>
  77.         </div>
  78.         <!-- Indicadores -->
  79.         <!-- Default box -->
  80.         <div class="card">
  81.             <div class="card-header">
  82.                 <div class="row">
  83.                     {% if form is defined %}
  84.                         {{ form_start(form, {'attr': {'class': 'form-inline col-md-auto', 'id': 'form_dashboard_filtro'}}) }}
  85.                         {{ form_row(form.finicio) }}
  86.                         {{ form_row(form.ftermino) }}
  87.                         {% if form.unidad is defined %}
  88.                             <div class="ml-3">{{ form_row(form.unidad) }}</div>
  89.                         {% endif %}
  90.                         {{ form_end(form) }}
  91.                     {% endif %}
  92.                     <div class="col text-right">
  93.                         <button id="consultar" type="button" class="btn btn-outline-success mr-2" onclick="aplicarFiltro()">
  94.                             <i class="fas fa-search mr-2"></i> Consultar
  95.                         </button>
  96.                     </div>
  97.                 </div>
  98.             </div>
  99.         </div>
  100.         <!-- /.card -->
  101.         <div class="row justify-content-center">
  102.             <div class="col-12">
  103.                 <!-- Default box -->
  104.                 <div class="card card-outline card-teal p-3">
  105.                     <div class="card-header row">
  106.                         <h3>Solicitudes de <small class="text-success">Mantenimientos</small></h3>
  107.                         <div class="col text-right">
  108.                             <button id="descargar_excel" class="btn btn-outline-primary" onclick="descargarExcel()">
  109.                                 <i class="fas fa-file-excel mr-2"></i> Descargar reporte Excel
  110.                             </button>
  111.                         </div>
  112.                     </div>
  113.                     <div class="card-body">
  114.                         <table id="solicitud" class="table table-hover w-100">
  115.                             <thead>
  116.                             <tr>
  117.                                 <th>No. Solicitud</th>
  118.                                 <th>Marbete</th>
  119.                                 <th>Descripción</th>
  120.                                 <th>Acción a realizar</th>
  121.                                 <th>MC/MP/ST</th>
  122.                                 <th>Estatus</th>
  123.                                 <th>Accion</th>
  124.                             </tr>
  125.                             </thead>
  126.                             <tbody>
  127.                             {% for s in solicitudes %}
  128.                                 <tr id="s-{{ s.id_sol }}">
  129.                                     <th class="id">{{ s.id_sol }}</th>
  130.                                     <th class="marbete">{{ s.marbete }}</th>
  131.                                     <td class="marca"> Marca: <b>{{ s.marca }}</b><br>Modelo: <b>{{ s.modelo }}</b></td>
  132.                                     <td class="falla">{{ s.falla }}</td>
  133.                                     <td>{{ s.tipo_mantenimiento }}</td>
  134.                                     <td class="estatus">
  135.                                     </td>
  136.                                     <td>
  137.                                         <a href="#modal-vista-solicitud" class="text-info btn-sm" data-toggle="modal" onclick="vistaModalSolicitud('{{ path('consulta_solicitud_vista_solicitud', {'id': s.id_sol}) }}')">
  138.                                             <i class="fa fa-eye" data-toggle="tooltip" title="Ver"></i>
  139.                                         </a>
  140.                                     </td>
  141.                                 </tr>
  142.                             {% endfor %}
  143.                             </tbody>
  144.                         </table>
  145.                     </div>
  146.                 </div>
  147.             </div>
  148.         </div>
  149.     </section>
  150.     <!-- Modal vista de informacion de solicitud -->
  151.     <div class="modal hide" id="modal-vista-solicitud"></div>
  152.     <!-- /.modal vista de informacion de solicitud -->
  153.     <!-- Modal de evaluación de mantenimiento correctivo -->
  154.     <div class="modal hide" id="modal-solicitud-evaluacion"></div>
  155.     <!-- /.modal de evaluacion de mantenimiento preventivo correctivo -->
  156. </div>
  157. {% endblock %}
  158. {% block javascripts %}
  159.     <script src="{{ asset('plugins/datatables/jquery.dataTables.min.js') }}"></script>
  160.     <script src="{{ asset('plugins/datatables-bs4/js/dataTables.bootstrap4.min.js') }}"></script>
  161.     <script src="{{ asset('plugins/datatables-responsive/js/dataTables.responsive.min.js') }}"></script>
  162.     <script src="{{ asset('plugins/datatables-responsive/js/responsive.bootstrap4.min.js') }}"></script>
  163.     <script src="{{ asset('plugins/datatables-buttons/js/dataTables.buttons.min.js') }}"></script>
  164.     <script src="{{ asset('plugins/datatables-buttons/js/buttons.bootstrap4.min.js') }}"></script>
  165.     <script src="{{ asset('plugins/jszip/jszip.min.js') }}"></script>
  166.     <script src="{{ asset('plugins/pdfmake/pdfmake.min.js') }}"></script>
  167.     <script src="{{ asset('plugins/pdfmake/vfs_fonts.js') }}"></script>
  168.     <script src="{{ asset('plugins/datatables-buttons/js/buttons.html5.min.js') }}"></script>
  169.     <script src="{{ asset('plugins/datatables-buttons/js/buttons.print.min.js') }}"></script>
  170.     <script src="{{ asset('plugins/datatables-buttons/js/buttons.colVis.min.js') }}"></script>
  171.     <script src="https://unpkg.com/gijgo@1.9.14/js/gijgo.min.js" type="text/javascript"></script>
  172.     <script src="https://unpkg.com/gijgo@1.9.14/js/messages/messages.es-es.js" type="text/javascript"></script>
  173.     <script src="{{ asset('plugins/toastr/toastr.min.js') }}"></script>
  174.     <script type="text/javascript">
  175.         $("#reporte-mtto").addClass("active");
  176.         $(function() {
  177.             let firstDayYear = new Date().getFullYear() + '-01-01';
  178.             let today = new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate();
  179.             $('#dashboard_filtro_finicio').datepicker({
  180.                 showOtherMonths: true,
  181.                 uiLibrary: 'bootstrap4',
  182.                 modal: true,
  183.                 header: true,
  184.                 footer: true,
  185.                 iconsLibrary: 'fontawesome',
  186.                 locale: 'es-es',
  187.                 format: 'yyyy-mm-dd',
  188.                 value: firstDayYear,
  189.                 maxDate: function () {
  190.                     return $('#dashboard_filtro_ftermino').val();
  191.                 }
  192.             });
  193.             $('#dashboard_filtro_ftermino').datepicker({
  194.                 showOtherMonths: true,
  195.                 uiLibrary: 'bootstrap4',
  196.                 modal: true,
  197.                 header: true,
  198.                 footer: true,
  199.                 iconsLibrary: 'fontawesome',
  200.                 locale: 'es-es',
  201.                 value: today,
  202.                 format: 'yyyy-mm-dd',
  203.                 minDate: function () {
  204.                     return $('#dashboard_filtro_finicio').val();
  205.                 }
  206.             });
  207.         });
  208.         $(document).ready(function(){
  209.             $('[data-toggle="tooltip"]').tooltip();
  210.             $('#solicitud').DataTable({
  211.                 "aaSorting": [],
  212.                 orderCellsTop: true,
  213.                 {# Define un valor predeterminado para LengthChange #}
  214.                 "pageLength": 50,
  215.                 "scrollX": true,
  216.                 {# sDom: 'lrtip', #}
  217.                 "bLengthChange" : true,
  218.                 language: {
  219.                     url: 'https://cdn.datatables.net/plug-ins/1.10.22/i18n/Spanish.json'
  220.                 }
  221.             });
  222.             vistaDashboard();
  223.             var datos_estatus = {{ solicitudes|json_encode|raw }};
  224.             vistaInformacionTabla(datos_estatus); 
  225.         });
  226.         function vistaInformacionTabla(data){
  227.             let dash = ({
  228.                 'pendiente': 0,
  229.                 'proceso': 0,
  230.                 'atendido': 0,
  231.                 'evaluado': 0
  232.             })
  233.             $.each(data, function (key, s) {
  234.                 row = $('#s-' + s.id_sol);
  235.                 if (s.estatus === '1') {
  236.                     dash.pendiente = dash.pendiente + 1;
  237.                     $('#estatusA').find('.info-box-number').text(dash.pendiente);
  238.                     row.find('.estatus').html('<div class="badge bg-gradient-warning text-white" style="width: 6rem;">Pendiente</div>');
  239.                 }
  240.                 if (s.estatus === '2') {
  241.                     dash.proceso = dash.proceso + 1;
  242.                     $('#estatusB').find('.info-box-number').text(dash.proceso);
  243.                     row.find('.estatus').html('<div class="badge bg-gradient-danger" style="width: 6rem;">En proceso</div>');
  244.                 }
  245.                 if (s.estatus === '3') {
  246.                     dash.atendido = dash.atendido + 1;
  247.                     $('#estatusC').find('.info-box-number').text(dash.atendido);
  248.                     row.find('.estatus').html('<div class="badge bg-gradient-primary" style="width: 6rem;">Atendido</div>');
  249.                     row.find('.evaluacion').css('display', 'inline-block');
  250.                 }
  251.                 if (s.estatus === '4') {
  252.                     dash.evaluado = dash.evaluado + 1;
  253.                     $('#estatusD').find('.info-box-number').text(dash.evaluado);
  254.                     row.find('.estatus').html('<div class="badge bg-gradient-success" style="width: 6rem;">Evaluado</div>');
  255.                     row.find('.evaluacion').css('display', 'inline-block');
  256.                 }
  257.             });
  258.         }
  259.         function aplicarFiltro() {
  260.             $("#solicitud").find($("tbody")).html("<tr><td colspan='8' class='text-center'><i class='fas fa-spinner fa-pulse'></i></td></tr>");
  261.             let formData = new FormData(document.getElementById("form_dashboard_filtro"));
  262.             //let formData = new FormData(document.getElementById("form_filtro"));
  263.             $.ajax({
  264.                 type: "POST",
  265.                 url: '{{ path('consulta_solicitud_index') }}',
  266.                 data: formData, // Adjuntar los campos del formulario enviado.
  267.                 dataType: "html",
  268.                 cache: false,
  269.                 contentType: false,
  270.                 processData: false,
  271.                 success: function (data) {
  272.                     let datos = jQuery.parseJSON(data);
  273.                     actualizarTabla(datos);
  274.                     vistaInformacionTabla(datos);
  275.                 },
  276.                 error: function (data, text, error) {
  277.                     let datos = jQuery.parseJSON(data.responseText);
  278.                     console.log("error: " + datos);
  279.                 }
  280.             });
  281.         }
  282.         <!-- Actualizar tabla de bitácora -->
  283.         function actualizarTabla(data) {
  284.             $("#solicitud").dataTable().fnClearTable();
  285.             $("#solicitud").dataTable().fnDestroy();
  286.             var edit = "";
  287.             var html = "";
  288.             $.each(data, function (key, s) {
  289.                 html += '<tr id="s-' + s.id_sol + '">' +
  290.                     '<th class="id">' + s.id_sol + '</th>' +
  291.                     '<th class="marbete">' + s.marbete + '</th>' +
  292.                     '<td class="marca"> Marca: <b>' + s.marca + '</b><br>Modelo: <b>' + s.modelo + '</b></td>' +
  293.                     '<td class="falla">' + s.falla + '</td>' +
  294.                     '<td>' + s.tipo_mantenimiento + '</td>' +
  295.                     '<td class="estatus">' +
  296.                         '<div style="width: 5rem; height: 0.4rem;">' + s.estatus + '</div>' +
  297.                     '</td>' +
  298.                     '<td>' +
  299.                         '<a href="#modal-vista-solicitud" class="text-info btn-sm" data-toggle="modal" onclick="vistaModalSolicitud(\'' + s.ver + '\')">' +
  300.                             '<i class="fa fa-eye" data-toggle="tooltip" title="Ver"></i>' +
  301.                         '</a>';
  302.                     if (s.estatus === '4') {
  303.                         html += '&nbsp;' +
  304.                             '<a href="#modal-solicitud-evaluacion" class="evaluacion btn-sm" style="display: none" data-toggle="modal" onclick="evaluacion(\'' + s.evaluacion + '\')">' +
  305.                             '<i class="fas fa-clipboard-check text-primary" data-toggle="tooltip" title="Ver evaluacion"></i>' +
  306.                             '</a>';
  307.                     }
  308.                 {% if app.user.rol.idRol != 3 %}
  309.                     if (s.estatus !== '4') {
  310.                         html += '&nbsp;' +
  311.                             '<a href="#modal-solicitud-evaluacion" class="evaluacion btn-sm" style="display: none" data-toggle="modal" onclick="evaluacion(\'' + s.evaluacion + '\')">' +
  312.                             '<i class="fa fa-check-circle text-primary" data-toggle="tooltip" title="Realizar evaluacion"></i>' +
  313.                             '</a>';
  314.                     }
  315.                 {% endif %}
  316.                 /*if (s.estatus !== '4') {
  317.                     html += '&nbsp;' +
  318.                         '<a href="#modal-solicitud-evaluacion" class="evaluacion" style="display: none" data-toggle="modal" onclick="evaluacion(\'' + s.evaluacion + '\')">' +
  319.                             '<i class="fa fa-check-circle text-primary" data-toggle="tooltip" title="Realizar evaluacion"></i>' +
  320.                         '</a>';
  321.                 }else if (s.estatus === '4'){
  322.                     html += '&nbsp;' +
  323.                         '<a href="#modal-solicitud-evaluacion" class="evaluacion" style="display: none" data-toggle="modal" onclick="evaluacion(\'' + s.evaluacion + '\')">' +
  324.                         '<i class="fas fa-clipboard-check text-primary" data-toggle="tooltip" title="Ver evaluacion"></i>' +
  325.                         '</a>';
  326.                 }*/
  327.                     html += '</td>' +
  328.                 '</tr>';
  329.             });
  330.             $("#solicitud").find($("tbody")).html(html);
  331.             $('#solicitud').DataTable({
  332.                 "aaSorting": [],
  333.                 orderCellsTop: true,
  334.                 {# Define un valor predeterminado para LengthChange #}
  335.                 "pageLength": 50,
  336.                 "scrollX": true,
  337.                 {# sDom: 'lrtip', #}
  338.                 "bLengthChange" : true,
  339.                 language: {
  340.                     url: 'https://cdn.datatables.net/plug-ins/1.10.22/i18n/Spanish.json'
  341.                 },
  342.             });
  343.         }
  344.         function vistaDashboard()
  345.         {
  346.             $.ajax({
  347.                 type: "POST",
  348.                 url: '{{ path('consulta_solicitud_vista') }}',
  349.                 dataType: "json",
  350.                 cache: false,
  351.                 contentType: false,
  352.                 processData: false,
  353.                 success: function (data) {
  354.                     let datos = data;
  355.                     if(datos.data[1]){
  356.                         row = $('#estatusA');
  357.                         row.find('.info-box-number').text(datos.data[1].solicitudCont);
  358.                     }
  359.                     if(datos.data[2]){
  360.                         row = $('#estatusB');
  361.                         row.find('.info-box-number').text(datos.data[2].solicitudCont);
  362.                     }
  363.                     if(datos.data[3]){
  364.                         row = $('#estatusC');
  365.                         row.find('.info-box-number').text(datos.data[3].solicitudCont);
  366.                     }
  367.                     if(datos.data[4]){
  368.                         row = $('#estatusD');
  369.                         row.find('.info-box-number').text(datos.data[4].solicitudCont);
  370.                     }
  371.                 },
  372.                 error: function (data, text, error) {
  373.                     $(document).Toasts('create', {
  374.                         autohide: true,
  375.                         delay: 3000,
  376.                         class: 'bg-danger',
  377.                         title: 'Actualización de Dashboard',
  378.                         subtitle: 'Ocurrio un error',
  379.                         body: data.responseJSON.mensaje
  380.                     });
  381.                 },
  382.                 complete: function () {
  383.                 }
  384.             });
  385.         }
  386.         function descargarExcel() {
  387.             let data_usuario = {{ app.user.idUsu }};
  388.             let data_rol = {{ app.user.rol.idRol }};
  389.             let data_unidad = {{ app.user.unidad.idUni }};
  390.             {# let form_unidad = $("#form_unidad").val(); #}
  391.             let form_finicio = $("#form_finicio").val();
  392.             let form_ftermino = $("#form_ftermino").val();
  393.             var url = "{{ path("consulta_solicitud_reporte_excel", {'id': 'id', 'finicio': 'finicio', 'ftermino': 'ftermino'}) }}";
  394.             if (form_finicio != "" && form_ftermino != ""){
  395.                 if (data_rol === 3){
  396.                     url = url.replace("id", data_unidad);
  397.                 }
  398.                 if (data_rol === 4){
  399.                     url = url.replace("id", data_usuario);
  400.                 }
  401.                 url = url.replace("finicio", form_finicio);
  402.                 url = url.replace("ftermino", form_ftermino);
  403.             }
  404.             let btn = $("#descargar_excel");
  405.             $.ajax({
  406.                 type: "POST",
  407.                 url: url,
  408.                 cache: false,
  409.                 contentType: false,
  410.                 processData: false,
  411.                 xhrFields: {
  412.                     responseType: 'blob'
  413.                 },
  414.                 beforeSend: function () {
  415.                     btn.prop('disabled', true);
  416.                     btn.html("<i class='fas fa-spinner fa-pulse'></i> Descargar reporte Excel");
  417.                 },
  418.                 success: function (data) {
  419.                     let a = document.createElement('a');
  420.                     a.href = window.URL.createObjectURL(data);
  421.                     a.download = "ReporteSolicitud.xlsx"
  422.                     a.click();
  423.                 },
  424.                 error: function (data, text, error) {
  425.                     $(document).Toasts('create', {
  426.                         autohide: true,
  427.                         delay: 3000,
  428.                         class: 'bg-danger',
  429.                         title: 'Descarga de Excel',
  430.                         subtitle: 'Ocurrio un error',
  431.                         body: data.responseJSON.mensaje
  432.                     });
  433.                 },
  434.                 complete: function () {
  435.                     btn.prop('disabled', false);
  436.                     btn.html("<i class='fas fa-file-excel mr-2'></i> Descargar reporte Excel");
  437.                 }
  438.             });
  439.         }
  440.         function vistaSolicitud(data)
  441.         {
  442.             let datos = data;
  443.             row = $('#solicitud-' + datos.id);
  444.             row.find('.evaluacion').css('display', 'inline-block');
  445.             row.find('.estatus').html(datos.estatus);
  446.             vistaDashboard();
  447.         }
  448.         function vistaModalSolicitud(url)
  449.         {
  450.             $('#modal-vista-solicitud').load(url, function ()
  451.             {
  452.                 // configuración del Modal
  453.                 $("#modal-vista-solicitud").on('hide.bs.modal', function () {
  454.                     $(this).html('Cargando');
  455.                 });
  456.                 $(".modal-dialog").draggable;
  457.                 vistaModalSolicitudAjax(url);
  458.             })
  459.         }
  460.         function vistaModalSolicitudAjax(url)
  461.         {
  462.             $.ajax({
  463.                 type: "POST",
  464.                 url: url,
  465.                 dataType: "json",
  466.                 cache: false,
  467.                 contentType: false,
  468.                 processData: false,
  469.                 success: function (data){
  470.                 },
  471.                 error: function (data, text, error) {
  472.                 },
  473.                 complete: function () {
  474.                 }
  475.             });
  476.         }
  477.         function evaluacion(url)
  478.         {
  479.             $('#modal-solicitud-evaluacion').load(url, function ()
  480.             {
  481.                 // configuración del Modal
  482.                 $("#modal-solicitud-evaluacion").on('hide.bs.modal', function () {
  483.                     $(this).html('Cargando');
  484.                 });
  485.                 $(".modal-dialog").draggable;
  486.                 evaluacionAjax(url)
  487.             })
  488.         }
  489.         function evaluacionAjax(url)
  490.         {
  491.             let send = $("#evaluacion_correctivo_guardar");
  492.             $('#evaluacion_correctivo_guardar').on('click', function () {
  493.                 let formData = new FormData(document.getElementById("form-evaluacion-solicitud"));
  494.                 $.ajax({
  495.                     type: "POST",
  496.                     url: url,
  497.                     data: formData, // Adjuntar los campos del formulario enviado.
  498.                     dataType: "json",
  499.                     cache: false,
  500.                     contentType: false,
  501.                     processData: false,
  502.                     beforeSend: function () {
  503.                         send.text("Actualizando "); // Para input de tipo button
  504.                         send.append("<i class='fa fa-spinner fa-spin' style='font-size:16px'></i>");
  505.                         send.prop("disabled", true);
  506.                     },
  507.                     success: function (data) {
  508.                         closeModal('modal-solicitud-evaluacion');
  509.                         vistaSolicitud(data);
  510.                         $(document).Toasts('create', {
  511.                             autohide: true,
  512.                             delay: 3000,
  513.                             class: 'bg-success',
  514.                             title: 'Éxito',
  515.                             subtitle: 'Evaluación de solicitud de mantenimiento',
  516.                             body: data.mensaje
  517.                         });
  518.                     },
  519.                     error: function (data, text, error) {
  520.                         let datos = data.responseJSON;
  521.                         $("#modal-solicitud-evaluacion").html(datos.form);
  522.                         evaluacionAjax(url);
  523.                     },
  524.                     complete: function () {
  525.                     }
  526.                 });
  527.                 return false; // Evitar ejecutar el submit del formulario.
  528.             });
  529.         }
  530.     </script>
  531. {% endblock %}