Przejdź do treści

Klasa Payment

Klasa Payment reprezentuje płatność powiązaną z rezerwacją w systemie hotelowym.
Obsługuje informacje o metodzie płatności, statusie, kwocie oraz dacie jej realizacji.

Dzięki tej klasie można potwierdzić płatność, sprawdzić czy została zrealizowana oraz uzyskać podsumowanie.


Dokumentacja techniczna

Reprezentuje płatność za konkretną rezerwację.

Source code in models/payment.py
def __init__(self, reservation: Reservation, method: Literal["karta", "gotówka"]):
    if not isinstance(reservation, Reservation):
        raise TypeError("Rezerwacja nie znaleziona.")
    if method not in ("karta", "gotówka"):
        raise ValueError("Metoda płatności musi być 'karta' lub 'gotówka'.")

    self.payment_id: str = str(uuid.uuid4())
    self.reservation: Reservation = reservation
    self.method: str = method
    self.amount: float = reservation.get_total_price()
    self.paid: bool = False
    self.payment_date: Optional[datetime] = None

confirm_payment()

Oznacza płatność jako zakończoną.

Source code in models/payment.py
def confirm_payment(self) -> None:
    """Oznacza płatność jako zakończoną."""
    if self.paid:
        raise ValueError("Płatność została już wcześniej potwierdzona.")
    self.paid = True
    self.payment_date = datetime.now()

get_summary()

Zwraca podsumowanie płatności.

Source code in models/payment.py
def get_summary(self) -> Dict[str, Any]:
    """Zwraca podsumowanie płatności."""
    return {
        "payment_id": self.payment_id,
        "reservation_id": self.reservation.reservation_id,
        "guest_name": self.reservation.guest.get_full_name(),
        "amount": self.amount,
        "method": self.method,
        "paid": self.paid,
        "payment_date": self.payment_date.isoformat() if self.payment_date else None
    }

is_paid()

Sprawdza, czy płatność została już zrealizowana.

Source code in models/payment.py
def is_paid(self) -> bool:
    """Sprawdza, czy płatność została już zrealizowana."""
    return self.paid

Przykład użycia

from models.payment import Payment
from models.reservation import Reservation
from models.guest import Guest
from models.room import Room
from datetime import date

guest = Guest("Jan", "Kowalski", "jan@example.com", "123456789")
room = Room("101", "single", 150.0, 1)
reservation = Reservation(guest, room, date(2025, 7, 10), date(2025, 7, 12))

payment = Payment(reservation, method="karta")
print(payment.is_paid())
payment.confirm_payment()
print(payment.get_summary())