18 🧾 Impresión de la factura del ticket de parqueo | Sistema de Parqueo Laravel 12 FullStack

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

Descripción

18 🧾 Índice de Lección: Impresión de la Factura del Ticket de Parqueo | Sistema de Parqueo Laravel 12 FullStack

La lección se centra en la finalización del proceso de facturación en el controlador, la creación de una tabla de base de datos dedicada a las facturas y el diseño final de la factura en formato PDF.

1. Actualización y Finalización del Ticket

  • Verificación del Cálculo:
    • Confirmación del resultado de las variables $monto_total y $tiempo_total calculadas en el capítulo anterior [00:24].
  • Actualización de la Tabla tickets:
    • Asignación de la fecha de salida, hora de salida y tiempo total al ticket [01:40].
    • Asignación del monto total cobrado [03:18].
    • Cambio del estado del ticket a "completado" [03:37].
    • Actualización del tarifa_ID utilizado para el cobro [05:16].
    • Guardado de los cambios con el método save() [05:45].
  • Prueba de Facturación:
    • Verificación de la liberación del espacio de parqueo [08:44].
    • Corrección y verificación de que todos los campos del ticket (incluido monto_total) se actualicen correctamente [09:19].

2. Implementación del Modelo de Facturación

  • Justificación de la Tabla facturaciones:
    • Necesidad de almacenar datos inmutables (que no cambien) para la factura, independientemente de futuras modificaciones a las tablas clientes o tarifas [11:42].
  • Diseño y Campos de la Migración:
    • Definición de campos: ticket_ID, usuario_ID, numero_factura (con restricción unique), nombre_cliente, numero_documento, placa, detalle y monto [13:40] - [19:33].
  • Creación y Migración:
    • Creación del modelo Facturacion y ejecución de la migración [17:14].
  • Definición de Relaciones (Eloquent):
    • Definición de las propiedades $fillable en el modelo Facturacion [21:37].
    • Establecimiento de la relación belongsTo con Ticket y User [22:18].
    • Establecimiento de la relación inversa hasOne en el modelo Ticket [23:25].

3. Registro y Guardado de la Factura

  • Lógica de Consecutivo:
    • Implementación de la lógica para calcular el siguiente número de factura consecutivo (buscando el máximo ID y sumando 1) [28:26].
  • Asignación de Valores:
    • Asignación del ticket_ID, usuario_ID (autenticado) y el número de factura [26:51].
    • Asignación del nombre_cliente, numero_documento y la placa (desde las relaciones del ticket) [32:39].
    • Creación del campo detalle concatenando el servicio y el $tiempo_total [29:47].
    • Guardado final de la instancia de la factura [30:36].
  • Prueba de Registro:
    • Verificación en la tabla facturaciones de que el registro se haya insertado correctamente con todos los datos desnormalizados [33:48].

4. Diseño de la Factura en PDF

  • Ruta y Función de Impresión:
    • Definición de la ruta para la impresión de la factura por su ID: /factura/{id}/imprimir-factura [24:44].
    • Implementación de la función imprimirFactura para buscar la factura y generar el PDF [35:11].
  • Diseño de la Vista PDF (factura-pdf.blade.php):
    • Adaptación de la plantilla de impresión de ticket [37:51].
    • Encabezado: Se muestra el número de la factura [38:51].
    • Datos Clave: Se muestran los datos del cliente (nombre, documento, placa) y los datos del servicio (espacio, fechas/horas de ingreso y salida) [39:11] - [41:32].
    • Tabla de Detalle: Se crea una tabla para el desglose del cobro, con columnas para Detalle, Precio, Cantidad y Total [41:41].
    • Monto Final: Se muestra el monto total a pagar en negritas y con el símbolo de divisa [46:23].
  • Próximo Capítulo:
    • Se anuncia la implementación de un Código QR en la factura para mayor seguridad y validación [47:45].