15 🎟️ Generar pdf de Tickets | Sistema de Parqueo con Laravel 12 FullStack

Duración: 59 min
Módulo: 🎟️ Gestión de Tickets y Cobro Lección 4 de 8

Descripción

🎟️ Lección 15: Generar PDF de Tickets | Sistema de Parqueo con Laravel 12 FullStack

Este video se centra en la implementación de la funcionalidad para generar e imprimir el ticket de parqueo en formato PDF, incluyendo la solución de un problema de lógica de negocio y la mejora de la interfaz de usuario para la visualización de espacios ocupados.

1. Actualización de la Interfaz de Espacios (Vista Principal) 💻

  • Validación de Espacios Ocupados:
    • Se añade una consulta al controlador para recuperar todos los tickets activos (estado = 'activo') en la base de datos [02:29].
    • Se itera sobre los espacios en la vista principal y se compara si el espacio_ID del ticket activo coincide con el espacio_ID del forage principal [06:02].
    • Si el espacio está ocupado, se muestra la imagen del vehículo y se añade un botón de "Finalizar Ticket"; de lo contrario, se muestra como "Libre" o "Mantenimiento" [07:19].
  • Detalles del Espacio Ocupado:
    • Se muestra en la interfaz la placa del vehículo [17:22], la fecha de ingreso y la hora de ingreso [18:11] en el espacio ocupado.
  • Diseño Responsive: Se ajusta el diseño de la grilla de espacios para que sea totalmente responsive, utilizando columnas de Bootstrap (ej. col-md-4) para mejorar la organización en diferentes tamaños de pantalla [22:16].

2. Validación de Lógica de Negocio (Backend) 🛡️

  • Prevención de Tickets Duplicados:
    • En el controlador (store), antes de crear un nuevo ticket, se consulta si ya existe un ticket con el mismo vehiculo_ID y que su estado_del_ticket sea activo [11:38].
    • Si se encuentra un ticket activo para ese vehículo, se devuelve un mensaje de error a la ruta anterior, impidiendo que el mismo vehículo ocupe múltiples espacios al mismo tiempo [14:00].

3. Generación del Reporte en PDF (Tickets) 🖨️

  • Instalación de la Librería: Se instala el paquete de Laravel barryvdh/laravel-dompdf para la generación de PDFs [24:47].
  • Creación de la Ruta: Se define una nueva ruta de tipo GET (/admin/ticket/{id}/imprimir) para manejar la generación del PDF, recibiendo el ID del ticket como parámetro [26:34].
  • Recuperación del ID Dinámico (Frontend):
    • Se utiliza jQuery para capturar el ticket_ID del botón al hacer clic en un espacio ocupado [33:09].
    • Se sobrescribe dinámicamente el atributo href del botón "Imprimir" dentro del modal, inyectando el ID de ticket correcto en la URL [35:12].
  • Implementación en el Controlador:
    • En la función imprimirTicket, se busca el registro del ticket por el ID recibido, incluyendo la relación con el cliente (with('cliente')) [40:30].
    • Se recupera la configuración general del sistema (ajuste) para el encabezado del ticket [40:55].
    • Se configura el paquete Barryvdh/PDF para una impresora de tickets (ancho de 80 mm, alto automático) [41:24].
    • Se retorna la vista del PDF con el nombre ticket.pdf [31:03].
  • Diseño del Ticket (ticket-pdf.blade.php):
    • Se diseña la plantilla del ticket para adaptarla al formato de impresión de tickets [41:57].
    • Encabezado: Muestra el nombre del parqueo, descripción, sucursal, dirección y teléfonos [46:17].
    • Cuerpo: Muestra el código de ticket único [48:50], los datos del cliente (nombre, documento), la placa del vehículo [52:25], el espacio asignado, la fecha de ingreso y la hora de ingreso [53:31].
    • Pie de página (Footer): Incluye el usuario que atendió el ticket y la hora de impresión actual [54:50].