17 ⏱️ Cálculo automático del tiempo y precio del parqueo | Sistema de Parqueo Laravel 12 FullStack

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

Descripción

⏱️ Lección 17: Cálculo Automático del Tiempo y Precio del Parqueo | Sistema de Parqueo Laravel 12 FullStack

Este capítulo se centra en la implementación de la lógica compleja en el controlador de Laravel para calcular automáticamente el tiempo total de estacionamiento, la fecha de salida y el monto a cobrar basado en el tipo de tarifa aplicada.

1. Funcionalidad del Botón "Facturar" y Definición de Rutas 🛣️

  • Ruta y Función: Se crea una nueva ruta de tipo GET (/admin/ticket/{id}/finalizar-ticket) que invoca a la función finalizarTicket en el controlador [01:45].
  • Activación en el Frontend: El botón "Facturar" del modal es modificado con jQuery para redirigir a esta nueva ruta, enviando el ID del ticket como parámetro [03:55].
  • Búsqueda del Ticket: La función finalizarTicket inicia buscando y recuperando toda la información del ticket activo mediante su ID [05:33].

2. Cálculo del Tiempo de Estacionamiento ⏳

  • Obtención de Fechas/Horas:
    • Fecha/Hora de Salida: Se obtiene la fecha y hora actual [07:03].
    • Fecha/Hora de Ingreso: Se construye la fecha y hora de ingreso concatenando la fecha de ingreso y la hora de ingreso registradas en el ticket [10:00].
  • Diferencia de Tiempo (diff): Se utiliza la función diff de PHP (con la librería Carbon) para calcular la diferencia exacta entre la hora de ingreso y la hora actual (salida) [11:47].
  • Extracción de Componentes: Se extraen los componentes de la diferencia:
    • Días calculados ($dias_calculado) [13:27].
    • Horas calculadas ($horas_calculado) [14:10].
    • Minutos calculados ($minutos_calculado) [14:49].
  • Formato de Tiempo Total: Se concatena el resultado en una variable $tiempo_total con un formato legible (ej: "0 días con 2 horas con 20 minutos") para el registro final [16:16].

3. Cálculo del Monto Total a Cobrar (Lógica Switch Case) 💵

El cálculo del costo se realiza mediante estructuras switch case anidadas, primero por el tipo de tarifa (Por Hora o Por Día) y luego por el nombre de la tarifa (Regular, Nocturno, Fin de Semana, Feriado).

3.1. Lógica para Tarifas "Por Hora"

  • Minutos de Gracia: Se pregunta si los minutos calculados exceden los minutos de gracia configurados para esa tarifa [25:33].
    • Redondeo: Si los minutos exceden el tiempo de gracia (ej., 30 minutos), la variable $horas_calculado se incrementa en +1, redondeando a la siguiente hora [26:41].
    • Si no excede, se mantiene el valor de la hora.
  • Costo Final: Se busca en la tabla tarifas el registro que coincida con el Tipo ("Por Hora"), el Nombre (ej., "Regular") y la Cantidad (las $horas_calculado redondeadas) para obtener el costo unitario, que es el $monto_total a cobrar [30:44].

3.2. Lógica para Tarifas "Por Día"

  • Cálculo de Minutos Totales: Se realiza un cálculo de la diferencia total en minutos para obtener la base de redondeo, sumando días, horas y minutos convertidos a minutos [44:06].
  • Minutos de Gracia (Ajuste): Los minutos de gracia se reconfiguran a 720 minutos (12 horas) para permitir un margen amplio antes de redondear a un día adicional [41:23].
  • Redondeo de Días: Se pregunta si la diferencia total de minutos excede los minutos de gracia (720 min) [46:34].
    • Si excede, la variable $dias_calculado se incrementa en +1 [47:19].
    • Si no excede, se mantiene.
  • Costo Final: Se busca en la tabla tarifas el registro que coincida con el Tipo ("Por Día"), el Nombre (ej., "Regular") y la Cantidad (los $dias_calculado redondeados) para obtener el costo [50:04].

4. Siguientes Pasos 💾

  • Almacenamiento y Facturación: El próximo capítulo se enfocará en guardar la información calculada (fecha/hora de salida, tiempo total, monto total) en el ticket y en generar el documento de factura [51:44].