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())
|