Przejdź do treści

Klasa Hotel

Klasa Hotel reprezentuje obiekt hotelowy w systemie rezerwacji.
Odpowiada za przechowywanie listy pokoi i rezerwacji oraz zarządzanie ich dostępnością i tworzeniem nowych rezerwacji.

Zawiera logikę sprawdzającą dostępność pokoi, filtrowanie po typie i pojemności oraz sprawdza konflikty w rezerwacjach.


Dokumentacja techniczna

Reprezentuje hotel i zarządza pokojami oraz rezerwacjami.

Source code in models/hotel.py
def __init__(self, name: str, address: str):
    if not name or not isinstance(name, str):
        raise ValueError("Nazwa hotelu musi zawierać conajniej 1 znak.")
    if not address or not isinstance(address, str):
        raise ValueError("Adres hotelu musi zawierać conajniej 1 znak.")

    self.name: str = name
    self.address: str = address
    self.rooms: Dict[str, Room] = {}
    self.reservations: List[Reservation] = []

add_room(room)

Dodaje pokój do hotelu.

Source code in models/hotel.py
def add_room(self, room: Room) -> None:
    """Dodaje pokój do hotelu."""
    if not isinstance(room, Room):
        raise TypeError("Można dodać tylko obiekty klasy Room.")
    if room.number in self.rooms:
        raise ValueError(f"Pokój o numerze {room.number} już istnieje.")
    self.rooms[room.number] = room

filter_rooms(room_type=None, capacity=None)

Filtruje pokoje po typie i/lub pojemności.

Source code in models/hotel.py
def filter_rooms(self, room_type: Optional[str] = None, capacity: Optional[int] = None) -> List[Room]:
    """Filtruje pokoje po typie i/lub pojemności."""
    filtered = list(self.rooms.values())

    if room_type:
        filtered = [r for r in filtered if r.room_type.lower() == room_type.lower()]

    if capacity:
        filtered = [r for r in filtered if r.capacity >= capacity]

    return filtered

find_room_by_number(number)

Zwraca pokój o podanym numerze (jeśli istnieje).

Source code in models/hotel.py
def find_room_by_number(self, number: str) -> Optional[Room]:
    """Zwraca pokój o podanym numerze (jeśli istnieje)."""
    return self.rooms.get(number)

get_all_reservations()

Zwraca listę wszystkich rezerwacji w hotelu.

Source code in models/hotel.py
def get_all_reservations(self) -> List[Reservation]:
    """Zwraca listę wszystkich rezerwacji w hotelu."""
    return self.reservations

get_all_rooms()

Zwraca listę wszystkich pokoi w hotelu.

Source code in models/hotel.py
def get_all_rooms(self) -> List[Room]:
    """Zwraca listę wszystkich pokoi w hotelu."""
    return list(self.rooms.values())

is_room_available(room, check_in, check_out)

Sprawdza, czy pokój jest dostępny w danym zakresie dat.

Source code in models/hotel.py
def is_room_available(self, room: Room, check_in: date, check_out: date) -> bool:
    """Sprawdza, czy pokój jest dostępny w danym zakresie dat."""
    for reservation in self.reservations:
        if reservation.room == room:
            if check_in < reservation.check_out and check_out > reservation.check_in:
                return False
    return True

make_reservation(guest, room_number, check_in, check_out)

Tworzy rezerwację, jeśli pokój jest dostępny w podanym zakresie dat.

Source code in models/hotel.py
def make_reservation(self, guest: Guest, room_number: str, check_in: date, check_out: date) -> Reservation:
    """Tworzy rezerwację, jeśli pokój jest dostępny w podanym zakresie dat."""
    room = self.rooms.get(room_number)
    if not room:
        raise ValueError(f"Pokój {room_number} nie istnieje.")
    if not self.is_room_available(room, check_in, check_out):
        raise ValueError(f"Pokój {room_number} jest już zarezerwowany w tym terminie.")

    reservation = Reservation(guest, room, check_in, check_out)
    self.reservations.append(reservation)
    return reservation

Przykład użycia

from models.hotel import Hotel
from models.room import Room
from models.guest import Guest
from datetime import date

hotel = Hotel("Hotel ChatGPT", "ul. Przykładowa 5")
room = Room("101", "double", 200.0, 2)
hotel.add_room(room)

guest = Guest("Anna", "Nowak", "anna.nowak@email.com", "123456789")
reservation = hotel.make_reservation(guest, "101", date(2025, 7, 1), date(2025, 7, 3))

print(hotel.get_all_rooms())
print(hotel.get_all_reservations())