byceps /
byceps
| 1 | """ |
||
| 2 | byceps.services.ticketing.models.ticket |
||
| 3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||
| 4 | |||
| 5 | :Copyright: 2014-2025 Jochen Kupperschmidt |
||
| 6 | :License: Revised BSD (see `LICENSE` file for details) |
||
| 7 | """ |
||
| 8 | |||
| 9 | 1 | from __future__ import annotations |
|
| 10 | |||
| 11 | 1 | from dataclasses import dataclass |
|
| 12 | 1 | from datetime import datetime |
|
| 13 | 1 | from typing import NewType, TYPE_CHECKING |
|
| 14 | from uuid import UUID |
||
| 15 | 1 | ||
| 16 | if TYPE_CHECKING: |
||
| 17 | from byceps.services.seating.models import SeatGroupID |
||
| 18 | 1 | ||
| 19 | from byceps.services.party.models import PartyID |
||
| 20 | from byceps.services.user.models.user import User |
||
| 21 | 1 | ||
| 22 | 1 | ||
| 23 | 1 | TicketCategoryID = NewType('TicketCategoryID', UUID) |
|
| 24 | 1 | ||
| 25 | 1 | ||
| 26 | @dataclass(frozen=True, kw_only=True) |
||
| 27 | class TicketCategory: |
||
| 28 | 1 | id: TicketCategoryID |
|
| 29 | party_id: PartyID |
||
| 30 | title: str |
||
| 31 | 1 | ||
| 32 | |||
| 33 | TicketCode = NewType('TicketCode', str) |
||
| 34 | 1 | ||
| 35 | |||
| 36 | TicketID = NewType('TicketID', UUID) |
||
| 37 | 1 | ||
| 38 | 1 | ||
| 39 | 1 | TicketBundleID = NewType('TicketBundleID', UUID) |
|
| 40 | 1 | ||
| 41 | |||
| 42 | @dataclass(frozen=True, kw_only=True) |
||
| 43 | class TicketBundle: |
||
| 44 | id: TicketBundleID |
||
| 45 | created_at: datetime |
||
| 46 | party_id: PartyID |
||
| 47 | ticket_category: TicketCategory |
||
| 48 | ticket_quantity: int |
||
| 49 | owned_by: User |
||
| 50 | seats_managed_by: User | None |
||
| 51 | users_managed_by: User | None |
||
| 52 | label: str | None |
||
| 53 | revoked: bool |
||
| 54 | ticket_ids: set[TicketID] |
||
| 55 | occupied_seat_group_id: SeatGroupID | None |
||
|
0 ignored issues
–
show
introduced
by
Loading history...
|
|||
| 56 | |||
| 57 | @property |
||
| 58 | def occupies_seat_group(self) -> bool: |
||
| 59 | return self.occupied_seat_group_id is not None |
||
| 60 | |||
| 61 | |||
| 62 | @dataclass(frozen=True, kw_only=True) |
||
| 63 | class TicketSaleStats: |
||
| 64 | tickets_max: int | None |
||
| 65 | tickets_sold: int |
||
| 66 |