-- BUG sur le premier select
-- correction le 9 novembre 2023 en remplacant R2.date_debut > current_date par R1.date_fin > current_date
-- 1/ entre deux réservations après la date du jour
-- 2/ à partir de la date du jour jusqu'à la première reservation
-- 3/ à partir de la derniere reservation posterieure à la date du jour
-- 4/ Les chambres sans reservation à partir de la date du jour
CREATE VIEW HotelBis.Disponibilite AS SELECT * FROM (
SELECT R1.idChambre, tarif, R1.date_fin du, min(R2.date_debut) au FROM HotelBis.Chambre NATURAL JOIN HotelBis.Reservation R1, HotelBis.Reservation R2 WHERE R1.idChambre = R2.idChambre AND R1.date_fin > current_date AND R2.date_debut > R1.date_fin
GROUP BY R1.idChambre, tarif, R1.date_fin
UNION
SELECT C.idChambre, tarif, current_date du, min(R1.date_debut) au FROM HotelBis.Chambre C NATURAL JOIN HotelBis.Reservation R1 WHERE R1.date_debut > current_date
GROUP BY C.idChambre, tarif
UNION
SELECT C.idChambre, tarif, max(R1.date_fin) du, (current_date+interval '1 year')::date au FROM HotelBis.Chambre C NATURAL JOIN HotelBis.Reservation R1 WHERE R1.date_fin >= current_date
GROUP BY C.idChambre, tarif
UNION
SELECT C.idChambre, tarif, current_date du, (current_date+interval '1 year')::date au FROM HotelBis.Chambre C WHERE idChambre NOT IN (SELECT idChambre FROM HotelBis.Reservation WHERE date_fin >= current_date)) AS R
ORDER BY idChambre, du;
