14 🎟️ Registro de Tickets en la Base de Datos | Sistema de Parqueo con Laravel FullStack

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

Descripción

🎟️ Lección 14: Registro de Tickets en la Base de Datos | Sistema de Parqueo con Laravel FullStack

Este video se enfoca en el desarrollo y la implementación del formulario para el registro de tickets de parqueo en la base de datos, asegurando que todos los campos requeridos se capturen y validen antes de guardar la información.

1. Preparación del Modal y Captura de IDs 💾

  • Identificación del Espacio:
    • Se muestra el número de espacio en el título del modal (Generar Ticket del Espacio [ID]) [01:32].
    • El ID del espacio se guarda en un campo oculto (<input type="hidden">) en el formulario al hacer clic en el botón del espacio, usando la propiedad .val() de jQuery [05:12].
  • Recuperación de la Tarifa:
    • Se consulta y se envía la lista de tarifas a la vista del modal [07:21].
    • Se crea un <select> para que el usuario elija la tarifa (por hora, por día, etc.), mostrando el nombre, tipo, cantidad y costo [08:12].
  • Campo de Observación: Se añade un textarea para registrar cualquier observación adicional del ticket [14:55].
  • Enlace Rápido para Nuevo Cliente: Se añade un botón de "Nuevo Cliente" para permitir el registro rápido de un vehículo/cliente no encontrado sin cerrar el modal principal [17:02].

2. Configuración del Formulario y Validación Frontend 🛡️

  • Estructura del Formulario: Todo el contenido de la información del ticket se envuelve en una etiqueta <form> con el método POST y se le añade el token @csrf [28:16].
  • Envío por Submit y Prevención:
    • Se cambia el botón "Registrar" a tipo submit [30:02].
    • Se utiliza el evento submit de jQuery en el formulario para realizar la validación en frontend antes del envío [30:46].
    • Se verifica que los campos espacio_ID, vehiculo_ID y tarifa_ID no estén vacíos. Si lo están, se detiene el envío con event.preventDefault() y se muestra una alerta [31:40].

3. Lógica de Guardado en el Controlador (Backend) ⚙️

  • Validación Backend: Se definen reglas de required para los IDs esenciales en la función store del controlador, asegurando que los datos no se guarden si faltan [34:00].
  • Obtención de IDs Relacionados:
    • cliente_ID: Se obtiene buscando el vehiculo_ID recibido en el Request y accediendo a la relación cliente_ID que tiene el modelo Vehiculo [36:25].
    • user_ID: Se obtiene el ID del usuario autenticado que está registrando el ticket usando la facade Auth [38:53].
  • Generación del Código Correlativo del Ticket:
    • Se consulta la tabla tickets para obtener el ID máximo actual (usando DB::table('tickets')->max('id')) [40:35].
    • Se genera el siguiente código concatenando el prefijo "TK" con el valor máximo incrementado en uno (ej. TK1, TK2, etc.) [42:29].
  • Manejo de Fecha y Hora (Carbon):
    • Se utiliza la librería Carbon para obtener la fecha y hora actual (Carbon::now()) [43:58].
    • Ajuste de Zona Horaria: Se corrige la zona horaria del sistema modificando el archivo .env (o app.php) con la región adecuada (ej. America/La_Paz), lo cual requiere una optimización de rutas (php artisan config:clear) [45:22].
    • Se extraen los campos de fecha (toDateString()) y hora (toTimeString()) por separado para el registro [47:44].
  • Estado Inicial: El campo estado del ticket se establece como Activo por defecto [50:25].
  • Registro Final: Se guardan todos los campos en la tabla tickets y se redirige al usuario con un mensaje de éxito [50:52].