16 🎟️ Impresión y Cancelación de Tickets | Sistema de Parqueo con Laravel 12 FullStack

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

Descripción

🎟️ Lección 16: Impresión y Cancelación de Tickets | Sistema de Parqueo con Laravel 12 FullStack

Este capítulo se enfoca en perfeccionar la experiencia del usuario en la impresión de tickets y en la implementación de la función de cancelación de tickets para anular registros por errores o salidas inmediatas.

1. Optimización de la Impresión del Ticket (Frontend) 🖨️

  • Implementación de Modal para Impresión: Se modifica el flujo para que, al hacer clic en el botón de imprimir, se cierre el modal de "Finalizar Ticket" y se abra un nuevo modal (modal-pdf-ticket) que contiene el PDF del ticket dentro de un iframe [04:15].
  • Carga Dinámica del PDF:
    • Se utiliza jQuery para capturar el ID del ticket y construir dinámicamente la URL del PDF [07:07].
    • Se asigna esta URL dinámica al atributo src del iframe dentro del nuevo modal, evitando la redirección de página [10:03].
  • Apertura Automática del Ticket al Registrar: Se añade lógica en el controlador (store) para que, una vez registrado el vehículo, se envíe el ticket_ID a la sesión [14:15].
    • En la vista principal (index), un script de Laravel Blade/JavaScript detecta la sesión y, si existe, abre automáticamente el modal de impresión con el ticket recién creado, listando el ticket para imprimir inmediatamente [17:19].

2. Implementación de la Función "Cancelar Ticket" 🗑️

  • Recopilación de Datos del Ticket: Se utiliza el modal de "Finalizar Ticket" para mostrar la información esencial del ticket activo (código, cliente, placa, espacio, hora) mediante la lectura de atributos data y su inyección en span con jQuery [21:03].
  • Diseño del Botón de Cancelación: Se añade un botón de "Cancelar Ticket" con estilo de peligro (btn-danger) dentro del modal [34:10].
  • Ruta y Método Destroy:
    • Se define la ruta DELETE (/admin/ticket/{id}) para manejar la eliminación, utilizando la función destroy del controlador [36:38].
  • Implementación de SweetAlert: Se utiliza una alerta de confirmación (SweetAlert) para evitar eliminaciones accidentales [49:36].
    • Al confirmar, se utiliza jQuery para tomar el ID del ticket (oculto en un input hidden dentro del formulario) y se le asigna la URL de DELETE al formulario [51:18].
  • Lógica de Eliminación (Controlador): La función destroy busca el ticket por ID y lo elimina de la base de datos ($ticket->delete()), retornando la vista con un mensaje de "Ticket Cancelado Correctamente", lo que libera el espacio para su uso inmediato [52:46].

3. Preparación para la Facturación 💰

  • Botón "Facturar": Se añade un botón de "Facturar" al modal de finalización de ticket, preparando la interfaz para la siguiente etapa del sistema [54:40].
  • Próximo Paso (Facturación): Se adelanta que la siguiente lección se centrará en el algoritmo para calcular el tiempo de parqueo, aplicar la tarifa correspondiente y generar la factura [55:40].