44. Validar cruce de fechas - parte 3

Los 3 Escenarios que Invalidan una Reserva

1️⃣ Fecha de Ingreso Igual a una Reserva Existente

Condición:

javascript
if (fechaIngresoUsuario == fechaIngresoReserva) {
    disponibilidad = false; // ¡No disponible!
}

Ejemplo:

  • Usuario selecciona 12/04/2024.

  • En BD hay una reserva que empieza 12/04/2024.
    ✅ Resultado"Lo sentimos, no hay disponibilidad".


2️⃣ Fecha de Ingreso del Usuario Dentro de un Rango Ocupado

Condición:

javascript
if (
    fechaIngresoUsuario > fechaIngresoReserva && 
    fechaIngresoUsuario < fechaSalidaReserva
) {
    disponibilidad = false; // Conflicto detectado
}

Ejemplo:

  • Usuario selecciona 17/04/2024.

  • En BD hay una reserva del 16/04/2024 al 18/04/2024.
    ✅ Resultado"Fecha no disponible (solapamiento parcial)".


3️⃣ Fecha de Salida del Usuario Invade una Reserva Futura

Condición:

javascript
if (
    fechaIngresoUsuario < fechaIngresoReserva && 
    fechaSalidaUsuario > fechaIngresoReserva
) {
    disponibilidad = false; // ¡Bloqueado!
}

Ejemplo:

  • Usuario reserva del 19/04/2024 al 23/04/2024.

  • En BD hay una reserva que empieza 21/04/2024.
    ✅ Resultado: *"No puedes reservar más allá del 21/04"*.


📌 Implementación en Código

javascript
let disponibilidad = true; // Inicialmente asumimos disponible

for (let i = 0; i < reservasBD.length; i++) {
    // Escenario 1: Fechas idénticas
    if (fechaIngresoUsuario == reservasBD[i].fechaIngreso) {
        disponibilidad = false;
        break;
    }
    // Escenario 2: Ingreso dentro de rango ocupado
    else if (
        fechaIngresoUsuario > reservasBD[i].fechaIngreso && 
        fechaIngresoUsuario < reservasBD[i].fechaSalida
    ) {
        disponibilidad = false;
        break;
    }
    // Escenario 3: Salida invade reserva futura
    else if (
        fechaIngresoUsuario < reservasBD[i].fechaIngreso && 
        fechaSalidaUsuario > reservasBD[i].fechaIngreso
    ) {
        disponibilidad = false;
        break;
    }
}

🎨 Mejoras en la Interfaz

1. Ocultar Columna Derecha si No Hay Disponibilidad

javascript
if (!disponibilidad) {
    document.querySelector(".columna-derecha").style.display = "none";
} else {
    document.querySelector(".columna-derecha").style.display = "block";
}

¿Por qué?

  • Evita confusiones: Si no hay fechas disponibles, ocultamos el formulario de pago.


🚀 Próximos Pasos

En la Parte 4 (final), cubriremos:
✅ Generación de códigos de reserva únicos.
✅ Integración con pasarelas de pago.
✅ Validación de datos antes de guardar en BD.


#JavaScript #PHP #FullCalendar #DesarrolloWeb

¿Te gustaría el código completo? ¡Déjalo en los comentarios! 👇

Bonus: Si usas React/Vue, esta lógica puede adaptarse con useState o v-model

Comentarios

Entradas más populares de este blog

37. Enviando datos de la reserva - parte 1

40-pintar con php

42. Validar cruce de fechas - parte 1