diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py index 167df0880c5e45c06a0b55fe56130d2ab3cc882a..48d551ed37039c01e12ae544882ead39dac5559a 100644 --- a/pinaxcon/settings.py +++ b/pinaxcon/settings.py @@ -7,7 +7,7 @@ import dj_database_url import saml2 import saml2.saml -from datetime import date, datetime +from datetime import date, datetime, timedelta from dataclasses import dataclass @@ -444,7 +444,15 @@ if DEV_MODE and DEV_MODE == "LAPTOP": print("ENABLING LAPTOP MODE") from .devmode_settings import * -# Ticket information + +class Category(object): + tickets = [] + + @classmethod + def order(cls, ticket) -> int: + return (cls.tickets.index(ticket) + 1) * 10 + + @dataclass(frozen=True) class Ticket: name: str @@ -456,17 +464,39 @@ class Ticket: @dataclass(frozen=True) -class PenguinDinnerTicket: +class DinnerTicket: name: str price: Decimal description: str + reservation: timedelta + cat: Category + def order(self): + return self.cat.order(self) -@dataclass(frozen=True) -class SpeakersDinnerTicket: - name: str - price: Decimal - description: str + +class PenguinDinnerTicket(DinnerTicket): + pass + + +class SpeakersDinnerTicket(DinnerTicket): + pass + + +class SpeakersDinnerCat(Category): + @classmethod + def create(cls, name: str, price: Decimal, description: str, reservation: timedelta) -> SpeakersDinnerTicket: + t = SpeakersDinnerTicket(name, price, description, reservation, cls) + cls.tickets.append(t) + return t + + +class PenguinDinnerCat(Category): + @classmethod + def create(cls, name: str, price: Decimal, description: str, reservation: timedelta) -> PenguinDinnerTicket: + t = PenguinDinnerTicket(name, price, description, reservation, cls) + cls.tickets.append(t) + return t LCA_START = datetime(2020, 1, 13) @@ -502,11 +532,22 @@ PENGUIN_DINNER_CHILD = PenguinDinnerTicket("Child", Decimal("50.00"), PENGUIN_DINNER_INFANT = PenguinDinnerTicket("Infant", Decimal("0.0"), "Includes no food or beverage service.") -SPEAKERS_DINNER_ADULT = SpeakersDinnerTicket("Adult", Decimal("100.00"), - "Includes an adult's meal and full beverage service.") -SPEAKERS_DINNER_CHILD = SpeakersDinnerTicket("Child", Decimal("60.00"), - "Children 14 and under. " - "Includes a child's meal and soft drink service.") -SPEAKERS_DINNER_INFANT = SpeakersDinnerTicket("Infant", Decimal("00.00"), - "Infant must be seated in an adult's lap. " - "No food or beverage service.") +SPEAKERS_DINNER = SpeakersDinnerCat +PENGUIN_DINNER = PenguinDinnerCat + +SPEAKERS_DINNER_ADULT = SpeakersDinnerCat.create( + "Adult", Decimal("100.00"), + "Includes an adult's meal and full beverage service.", + timedelta(hours=1)) + +SPEAKERS_DINNER_CHILD = SpeakersDinnerCat.create( + "Child", Decimal("60.00"), + "Children 14 and under. " + "Includes a child's meal and soft drink service.", + timedelta(hours=1)) + +SPEAKERS_DINNER_INFANT = SpeakersDinnerCat.create( + "Infant", Decimal("00.00"), + "Infant must be seated in an adult's lap. " + "No food or beverage service.", + timedelta(hours=1))