templates/ubicacion/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block stylesheets %}
  3.     <link rel="stylesheet" href="{{ asset('plugins/datatables-bs4/css/dataTables.bootstrap4.min.css') }}">
  4.     <link rel="stylesheet" href="{{ asset('plugins/datatables-responsive/css/responsive.bootstrap4.min.css') }}">
  5.     <link rel="stylesheet" href="{{ asset('plugins/datatables-buttons/css/buttons.bootstrap4.min.css') }}">
  6.     <style>
  7.         td.descripcion {
  8.             max-width: 300px !important;
  9.             text-overflow: ellipsis;
  10.             white-space: nowrap;
  11.             overflow: hidden;
  12.         }
  13.     </style>
  14. {% endblock %}
  15. {% block title %}Áreas{% endblock %}
  16. {% block body %}
  17.     <div class="content-wrapper">
  18.         <section class="content-header">
  19.             <div class="card">
  20.                 <div class="card-header">
  21.                     <h1 class="card-title">Ubicación</h1>
  22.                     <div class="card-tools">
  23.                         <ol class="breadcrumb float-sm-right">
  24.                             <li class="breadcrumb-item">Lista</li>
  25.                             <li class="breadcrumb-item active">Ubicaciones</li>
  26.                         </ol>
  27.                     </div>
  28.                 </div>
  29.             </div>
  30.         </section>
  31.         <section class="content">
  32.             <div class="card">
  33.                 <div class="card-header">
  34.                     <div class="row">
  35.                         {# {{ form_start(form, {'attr': {'class': 'form-inline col-md-auto', 'id': 'form_unidad_filtro'}}) }}
  36.                         {{ form_row(form.filtro) }}
  37.                         {% if form.unidad is defined %}
  38.                             {{ form_row(form.unidad) }}
  39.                         {% endif %}
  40.                         {{ form_end(form) }} #}
  41.                         <div class="col text-right">
  42.                             <button id="descargar_excel" type="button" class="btn btn-outline-success mr-2" onclick="descargarExcel()">
  43.                                 <i class="fas fa-file-excel mr-2"></i> Descargar
  44.                             </button>
  45.                             {% if nivel <= 2 %}
  46.                                 <a href="{{ path('app_ubicacion_new') }}" class="btn btn-outline-success">
  47.                                     <i class="fas fa-file mr-2"></i> Agregar Ubicación
  48.                                 </a>
  49.                             {% endif %}
  50.                         </div>
  51.                     </div>
  52.                 </div>
  53.                 <div class="card-body">
  54.                     <table class="table table-striped w-100" id="table-ubicacion">
  55.                         <thead>
  56.                         <tr>
  57.                             <th>ID</th>
  58.                             <th>Ubicación</th>
  59.                             <th>Unidad</th>
  60.                             <th class="text-center">Estatus</th>
  61.                             <th class="text-center">Acciones</th>
  62.                         </tr>
  63.                         </thead>
  64.                         <tbody>
  65.                         {% for ubicacion in ubicacions %}
  66.                             <tr id="idUbi-{{ ubicacion.idUbi }}">
  67.                                 <td class="id">{{ ubicacion.idUbi }}</td>
  68.                                 <td class="area">{{ ubicacion.area }}</td>
  69.                                 <td class="unidad">{{ ubicacion.unidad}}</td>
  70.                                 <td class="activo">
  71.                                     {% if ubicacion.activo == 1 %}
  72.                                         <span class="badge bg-gradient-primary d-block">Activo</span>
  73.                                     {% elseif ubicacion.activo == 0 %}
  74.                                         <span class="badge bg-gradient-yellow d-block">Inactivo</span>
  75.                                     {% endif %}
  76.                                 </td>
  77.                                 <td class="text-center">
  78.                                     <a href="#editar-ubicacion" class="btn" onclick="editarInforUbicacion('{{ path('app_ubicacion_show', {'idUbi': ubicacion.idUbi}) }}')" data-toggle="modal"><i class="fas fa-eye"></i></a>
  79.                                     {% if nivel <= 2 %}
  80.                                         <a href="#editar-ubicacion" class="btn" onclick="editarInforUbicacion('{{ path('app_ubicacion_edit', {'idUbi': ubicacion.idUbi}) }}')" data-toggle="modal"><i class="fas fa-pen"></i></a>
  81.                                     {% endif %}
  82.                                     {% if nivel in [2] %}
  83.                                         <button type="button" onclick="confirmDelete('{{ path('app_ubicacion_delete', {'idUbi': ubicacion.idUbi}) }}', '{{ csrf_token('delete' ~ ubicacion.idUbi) }}')" class="btn btn-link text-danger p-0" title="Eliminar equipo">
  84.                                             <i class="fas fa-trash-alt"></i>
  85.                                         </button>
  86.                                     {% endif %}
  87.                                 </td>
  88.                             </tr>
  89.                         {% else %}
  90.                             <tr>
  91.                                 <td colspan="5">No records found</td>
  92.                             </tr>
  93.                         {% endfor %}
  94.                         </tbody>
  95.                     </table>
  96.                 </div>
  97.             </div>
  98.         </section>
  99.     </div>
  100.     <div class="modal fade" id="confirmDeleteModal" tabindex="-1" role="dialog" aria-labelledby="confirmDeleteModalLabel" aria-hidden="true">
  101.         <div class="modal-dialog" role="document">
  102.             <div class="modal-content">
  103.                 <div class="modal-header">
  104.                     <h5 class="modal-title" id="confirmDeleteModalLabel">Confirmar Eliminación</h5>
  105.                     <button type="button" class="close" data-dismiss="modal" aria-label="Cerrar">
  106.                         <span aria-hidden="true">&times;</span>
  107.                     </button>
  108.                 </div>
  109.                 <div class="modal-body">
  110.                     ¿Estás seguro de que deseas eliminar este registro?
  111.                 </div>
  112.                 <div class="modal-footer">
  113.                     <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
  114.                     <!-- Botón para confirmar eliminación -->
  115.                     <form id="deleteForm" method="post">
  116.                         <input type="hidden" name="_token" id="csrfToken" value="">
  117.                         <button type="submit" class="btn btn-danger">Eliminar</button>
  118.                     </form>
  119.                 </div>
  120.             </div>
  121.         </div>
  122.     </div>
  123.     <div class="modal hide" id="editar-ubicacion"></div>
  124. {% endblock %}
  125. {% block javascripts %}
  126.     <script src="{{ asset('plugins/datatables/jquery.dataTables.min.js') }}"></script>
  127.     <script src="{{ asset('plugins/datatables-bs4/js/dataTables.bootstrap4.min.js') }}"></script>
  128.     <script src="{{ asset('plugins/datatables-responsive/js/dataTables.responsive.min.js') }}"></script>
  129.     <script src="{{ asset('plugins/datatables-responsive/js/responsive.bootstrap4.min.js') }}"></script>
  130.     <script src="{{ asset('plugins/datatables-buttons/js/dataTables.buttons.min.js') }}"></script>
  131.     <script src="{{ asset('plugins/datatables-buttons/js/buttons.bootstrap4.min.js') }}"></script>
  132.     <script src="{{ asset('plugins/jszip/jszip.min.js') }}"></script>
  133.     <script src="{{ asset('plugins/pdfmake/pdfmake.min.js') }}"></script>
  134.     <script src="{{ asset('plugins/pdfmake/vfs_fonts.js') }}"></script>
  135.     <script src="{{ asset('plugins/datatables-buttons/js/buttons.html5.min.js') }}"></script>
  136.     <script src="{{ asset('plugins/datatables-buttons/js/buttons.print.min.js') }}"></script>
  137.     <script src="{{ asset('plugins/datatables-buttons/js/buttons.colVis.min.js') }}"></script>
  138.     <script type="text/javascript">
  139.         // Menú lateral
  140.         $("#catalogo").addClass("menu-open");
  141.         $("#catalogo").find('.nav-link:first').addClass("active");
  142.         $("#ubicacion").addClass("active");
  143.         $(function () {
  144.             // Inicialización del DataTable
  145.             $('#table-ubicacion').DataTable({
  146.                 "aaSorting": [],
  147.                 orderCellsTop: true,
  148.                 "pageLength": 10,
  149.                 "scrollX": true,
  150.                 "bLengthChange": true,
  151.                 language: {
  152.                     url: 'https://cdn.datatables.net/plug-ins/1.10.22/i18n/Spanish.json'
  153.                 }
  154.             });
  155.             // Filtro de unidad
  156.             /*{% if form.unidad is defined %}
  157.             $("#unidad_filtro_unidad").on('change', function () {
  158.                 aplicarFiltro();
  159.             });
  160.             {% endif %}*/
  161.         });
  162.         // Función para editar información de una ubicación
  163.         function editarInforUbicacion(url) {
  164.             $('#editar-ubicacion').load(url, function () {
  165.                 // Configuración del modal
  166.                 $("#editar-ubicacion").on('hide.bs.modal', function () {
  167.                     $(this).html('Cargando');
  168.                 });
  169.                 $(".modal-dialog").draggable;
  170.                 editarInforUbicacionAjax(url)
  171.             });
  172.         }
  173.         function editarInforUbicacionAjax(url){
  174.             let send = $("#btn_ubicacion_guardar");
  175.             $('#btn_ubicacion_guardar').on('click', function () {
  176.                 let formData = new FormData(document.getElementById("form-editar-ubicacion"));
  177.                 $.ajax({
  178.                     type: "POST",
  179.                     url: url,
  180.                     data: formData, // Adjuntar los campos del formulario enviado.
  181.                     dataType: "json",
  182.                     cache: false,
  183.                     contentType: false,
  184.                     processData: false,
  185.                     beforeSend: function () {
  186.                         send.text("Actualizando "); // Para input de tipo button
  187.                         send.append("<i class='fa fa-spinner fa-spin' style='font-size:16px'></i>");
  188.                         send.prop("disabled", true);
  189.                     },
  190.                     success: function (data) {
  191.                         console.log(data);
  192.                         let datos = data;
  193.                         let row = $('#idUbi-' + datos.idUbi);
  194.                         row.find('.area').html(datos.area);
  195.                         row.find('.unidad').html(datos.unidad.getNombre);
  196.                         //row.find('.activo').html(datos.activo);
  197.                         if (datos.activo === "Activo") {
  198.                             row.find('.activo').html('<div class="badge bg-gradient-primary d-block">' + datos.activo + '</div>');
  199.                         }
  200.                         if(datos.activo === "Inactivo") {
  201.                             row.find('.activo').html('<div class="badge bg-gradient-yellow d-block">' + datos.activo + '</div>');
  202.                         }
  203.                         $("#editar-ubicacion").modal('hide');
  204.                     },
  205.                     error: function (data, text, error) {
  206.                         let datos = data.responseJSON;
  207.                         $("#editar-ubicacion").html(datos.form);
  208.                         editarInforUbicacionAjax(url);
  209.                     },
  210.                     complete: function (data) {
  211.                         // Se ejecuta al termino de la petición
  212.                     }
  213.                 });
  214.                 return false; // Evitar ejecutar el submit del formulario.
  215.             });
  216.         }
  217.         <!-- Actualizar tabla de bitácora -->
  218.         function actualizarUbicacion(data) {
  219.             $("#table-ubicacion").dataTable().fnClearTable();
  220.             $("#table-ubicacion").dataTable().fnDestroy();
  221.             var edit = "";
  222.             var html = "";
  223.             $.each(data, function (key, ubicacion) {
  224.                 if (nivel in [2]){ {# modificar #}
  225.                     edit = '&nbsp;|&nbsp;<a href="#editar-ubicacion" onclick="editarInforUbicacion(\'' + ubicacion.editar + '\')" data-toggle="modal"><i class="fas fa-pen"></i></a>';
  226.                 }
  227.                 html += '<tr id="idUbi' + ubicacion.idUbi + '">' +
  228.                     '<td>' + ubicacion.area + '</td>' +
  229.                     '<td>' + ubicacion.unidad + '</td>' +
  230.                     '<td class="activo">' + ubicacion.activo + '</td>' +
  231.                     '<td class="text-right">' +
  232.                     '<a href="' + ubicacion.ver + '"><i class="fas fa-eye"></i></a>' + edit +
  233.                     '</td>' +
  234.                     '</tr>';
  235.             });
  236.             $("#table-ubicacion").find($("tbody")).html(html);
  237.             $('#table-ubicacion').DataTable({
  238.                 "aaSorting": [],
  239.                 orderCellsTop: true,
  240.                 {# Define un valor predeterminado para LengthChange #}
  241.                 "pageLength": 10,
  242.                 "scrollX": true,
  243.                 {# sDom: 'lrtip', #}
  244.                 "bLengthChange" : true,
  245.                 language: {
  246.                     url: 'https://cdn.datatables.net/plug-ins/1.10.22/i18n/Spanish.json'
  247.                 },
  248.             });
  249.         }
  250.         function cambiarEstatus(url, accion) {
  251.             $.ajax({
  252.                 url: url,
  253.                 dataType: "json",
  254.                 cache: false,
  255.                 contentType: false,
  256.                 processData: false,
  257.                 success: function (data) {
  258.                     let datos = data;
  259.                     let row = $('#idUbi-'+ datos.idUbi);
  260.                     if (accion === "Activo"){
  261.                         row.find('.activo').html('<div class="badge bg-gradient-primary d-block">' + datos.activo + '</div>');
  262.                     } else {
  263.                         row.find('.activo').html('<div class="badge bg-gradient-yellow d-block">' + datos.activo + '</div>');
  264.                     }
  265.                     //alertMessage(0, datos.mensaje);
  266.                 },
  267.                 error: function (data, text, error) {
  268.                     alertMessage(1, error);
  269.                 },
  270.                 complete: function (data) {
  271.                     // Se ejecuta al termino de la petición
  272.                 }
  273.             });
  274.         }
  275.         function aplicarFiltro() {
  276.             $("#table-otro").find($("tbody")).html("<tr><td colspan='8' class='text-center'><i class='fas fa-spinner fa-pulse'></i></td></tr>");
  277.             let formData = new FormData(document.getElementById("form_unidad_filtro"));
  278.             $.ajax({
  279.                 type: "POST",
  280.                 url: '{{ path('app_ubicacion_index') }}',
  281.                 data: formData, // Adjuntar los campos del formulario enviado.
  282.                 dataType: "html",
  283.                 cache: false,
  284.                 contentType: false,
  285.                 processData: false,
  286.                 success: function (data) {
  287.                     let datos = jQuery.parseJSON(data);
  288.                     console.log(datos);
  289.                     actualizarOtro(datos);
  290.                 },
  291.                 error: function (data, text, error) {
  292.                     let datos = jQuery.parseJSON(data.responseText);
  293.                     console.log(datos);
  294.                 }
  295.             });
  296.         }
  297.         function descargarExcel() {
  298.             let btn = $("#descargar_excel");
  299.             
  300.             let formElement = document.getElementById("form_unidad_filtro");
  301.             let formData = new FormData();
  302.             if (formElement) {
  303.                 formData = new FormData(formElement);
  304.             }
  305.             
  306.             $.ajax({
  307.                 type: "POST",
  308.                 url: '{{ path('app_reporte_ubicacion_excel') }}',
  309.                 data: formData, // Adjuntar los campos del formulario enviado.
  310.                 cache: false,
  311.                 contentType: false,
  312.                 processData: false,
  313.                 xhrFields: {
  314.                     responseType: 'blob'
  315.                 },
  316.                 beforeSend: function () {
  317.                     btn.prop('disabled', true);
  318.                     btn.html("<i class='fas fa-spinner fa-pulse'></i> Descargar");
  319.                 },
  320.                 success: function (data) {
  321.                     let a = document.createElement('a');
  322.                     a.href = window.URL.createObjectURL(data);
  323.                     a.download = "Ubicaciones-Área.xlsx"
  324.                     a.click();
  325.                 },
  326.                 complete: function () {
  327.                     btn.prop('disabled', false);
  328.                     btn.html("<i class='fas fa-file-excel mr-2'></i> Descargar");
  329.                 }
  330.             });
  331.         }
  332.     </script>
  333.     <script>
  334.         function confirmDelete(actionUrl, csrfToken) {
  335.             // Configura la acción del formulario en el modal
  336.             const deleteForm = document.getElementById('deleteForm');
  337.             deleteForm.action = actionUrl;
  338.             // Configura el token CSRF
  339.             document.getElementById('csrfToken').value = csrfToken;
  340.             // Muestra el modal
  341.             $('#confirmDeleteModal').modal('show');
  342.         }
  343.     </script>
  344. {% endblock %}