26 💲 Cálculo del Monto del Servicio antes de Facturar | Sistema de Parqueo Laravel 12 FullStack
Duración: 49 minDescripción
26 💲 Índice de Lección: Cálculo Dinámico del Costo y Facturación Final (Laravel 12 FullStack)
La lección 26 implementa la característica crucial de cálculo dinámico del costo del servicio en tiempo real en el modal de ocupado y ajusta la lógica de facturación y visualización de tarifas.
1. Visualización del Costo Total a Pagar
Se integra en el modal de "Ocupado" el monto total a pagar antes de que el cliente decida facturar.
- Implementación de la Interfaz: Se añade la etiqueta Costo Total a Pagar en el modal, con un estilo destacado (tamaño de fuente 20px, color azul) para resaltar el monto al usuario [06:23].
- Nueva Ruta de Cálculo (calcularMonto): Se crea una ruta de tipo GET (/ticket/{id}/calcular-monto) que el script de JavaScript consulta al abrir el modal [12:19].
- Lógica de Consulta (AJAX): Se utiliza AJAX para llamar a la nueva ruta, obtener la respuesta (el monto calculado) y reemplazar el contenido del span sin recargar la página [13:03].
2. Lógica de Cálculo Dinámico en el Controlador
La función calcularMonto en el controlador de tickets replica la lógica de cálculo de tiempo y costo de la función finalizarTicket.
- Identificación del Ticket: Se busca el Ticket ID recibido por la ruta [18:59].
- Cálculo y Conversión de Tiempo: Se reutiliza la lógica para calcular la diferencia en días, horas y minutos [19:18].
- Asignación de Divisa: Se consulta la tabla de ajuste para obtener la divisa local (ej. Bolivianos) y se concatena al monto final [20:39].
3. Automatización del Cambio de Tarifa (Día/Hora)
Se implementa una lógica para prevenir que los tickets largos (mayor a un día) sigan cobrando tarifas "Por Hora".
- Condición de Cambio: Si los días calculados son mayores a 0, el sistema debe cambiar automáticamente la tarifa a "Por Día" [22:29].
- Búsqueda de Tarifa Mínima: Se consulta la base de datos para obtener el ID más bajo de la tarifa con nombre: 'regular' y tipo: 'por día' [23:26].
- Actualización del Ticket: El tarifa_id del ticket se actualiza automáticamente con el ID de la tarifa Por Día si se cumple la condición (más de 0 días de estadía), garantizando el cálculo correcto (ej. 100 Bol. por dos días) [25:38].
4. Control de Visibilidad de la Facturación
Se ajusta la visibilidad de los botones de facturación y costo basándose en el "tiempo de gracia" (10 minutos).
- Condición de Activación: Si la diferencia en minutos es mayor a 10 (es decir, 11 minutos o más), se activa la opción de facturar [33:40].
- Comportamiento de los Elementos:
- Cancelación: El botón Cancelar Ticket se deshabilita si los minutos son mayores a 10 [34:29].
- Facturación: El botón Facturar y el Costo Total a Pagar se muestran (show) [31:46].
- Tiempo de Gracia: Si el tiempo es menor o igual a 10 minutos, el botón Facturar y el Costo Total a Pagar se ocultan (hide) [32:15].
- Ajuste de Cálculo para Tiempos Cortos: Se añade una condición en el controlador para que, si las horas calculadas son cero (es decir, menos de 1 hora después del tiempo de gracia), se redondee a 1 hora, asegurando el cobro de la tarifa mínima (ej. 5 Bol.) [38:06].
5. Ajuste de Factura Impresa
- Detalle Adicional: Se modifica el diseño de la factura impresa para incluir los datos de la tarifa (Nombre y Tipo) debajo de los detalles del servicio, brindando mayor claridad en el cobro [43:46].