Skip to content

Commit

Permalink
Rename Item to Ticket
Browse files Browse the repository at this point in the history
  • Loading branch information
jace committed Mar 5, 2024
1 parent 8f14c69 commit a5c81e8
Show file tree
Hide file tree
Showing 18 changed files with 110 additions and 101 deletions.
2 changes: 1 addition & 1 deletion boxoffice/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
DiscountCoupon,
DiscountPolicy,
Invoice,
Item,
Ticket,
Menu,
Organization,
Price,
Expand Down
14 changes: 7 additions & 7 deletions boxoffice/forms/discount.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
DiscountCoupon,
DiscountPolicy,
DiscountTypeEnum,
Item,
Menu,
Ticket,
sa,
)

Expand Down Expand Up @@ -72,9 +72,9 @@ class AutomaticDiscountPolicyForm(DiscountPolicyForm):

def __post_init__(self) -> None:
self.tickets.query = (
Item.query.join(Menu, Item.menu_id == Menu.id)
Ticket.query.join(Menu, Ticket.menu_id == Menu.id)
.filter(Menu.organization == self.edit_parent)
.options(sa.orm.load_only(Item.id, Item.title))
.options(sa.orm.load_only(Ticket.id, Ticket.title))
)


Expand Down Expand Up @@ -123,9 +123,9 @@ class CouponBasedDiscountPolicyForm(DiscountPolicyForm):

def __post_init__(self) -> None:
self.tickets.query = (
Item.query.join(Menu, Item.menu_id == Menu.id)
Ticket.query.join(Menu, Ticket.menu_id == Menu.id)
.filter(Menu.organization == self.edit_parent)
.options(sa.orm.load_only(Item.id, Item.title))
.options(sa.orm.load_only(Ticket.id, Ticket.title))
)


Expand Down Expand Up @@ -203,9 +203,9 @@ class DiscountPriceForm(forms.Form):

def __post_init__(self) -> None:
self.ticket.query = (
Item.query.join(Menu, Item.menu_id == Menu.id)
Ticket.query.join(Menu, Ticket.menu_id == Menu.id)
.filter(Menu.organization_id == self.edit_parent.organization_id)
.options(sa.orm.load_only(Item.id, Item.title))
.options(sa.orm.load_only(Ticket.id, Ticket.title))
)


Expand Down
4 changes: 2 additions & 2 deletions boxoffice/forms/participant.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from baseframe import __, forms

from ..models import Assignee, Item, LineItem, Order, OrderStatus
from ..models import Assignee, LineItem, Order, OrderStatus, Ticket

__all__ = ["AssigneeForm"]

Expand All @@ -25,7 +25,7 @@ class AssigneeForm(forms.Form):
def validate_email(self, field: forms.Field) -> None:
existing_assignees = (
Assignee.query.join(LineItem, Assignee.line_item_id == LineItem.id)
.join(Item)
.join(Ticket)
.join(Order)
.filter(LineItem.ticket_id == self.edit_parent.ticket_id)
.filter(Order.status != OrderStatus.CANCELLED)
Expand Down
2 changes: 1 addition & 1 deletion boxoffice/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class Model(ModelBase, DeclarativeBase):
from .category import * # isort:skip
from .discount_policy import * # isort:skip
from .invoice import * # isort:skip
from .item import * # isort:skip
from .ticket import * # isort:skip
from .menu import * # isort:skip
from .line_item import * # isort:skip
from .line_item_discounter import * # isort:skip
Expand Down
4 changes: 2 additions & 2 deletions boxoffice/models/category.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class Category(BaseScopedNameMixin[int, User], Model):
)
menu: Mapped[Menu] = relationship(back_populates='categories')
seq: Mapped[int]
tickets: Mapped[list[Item]] = relationship(
tickets: Mapped[list[Ticket]] = relationship(
cascade='all, delete-orphan', back_populates='category'
)
parent: Mapped[Menu] = sa.orm.synonym('menu')
Expand All @@ -38,5 +38,5 @@ def roles_for(self, actor=None, anchors=()):


if TYPE_CHECKING:
from .item import Item
from .menu import Menu
from .ticket import Ticket
8 changes: 4 additions & 4 deletions boxoffice/models/discount_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ class DiscountPolicy(BaseScopedNameMixin[UUID, User], Model):
discount_coupons: Mapped[list[DiscountCoupon]] = relationship(
cascade='all, delete-orphan', back_populates='discount_policy'
)
tickets: Mapped[list[Item]] = relationship(
tickets: Mapped[list[Ticket]] = relationship(
secondary=item_discount_policy, back_populates='discount_policies'
)
prices: Mapped[list[Price]] = relationship(cascade='all, delete-orphan')
Expand Down Expand Up @@ -205,7 +205,7 @@ def make_bulk(cls, discount_code_base, **kwargs) -> DiscountPolicy:

@classmethod
def get_from_ticket(
cls, ticket: Item, qty, coupon_codes: Sequence[str] = ()
cls, ticket: Ticket, qty, coupon_codes: Sequence[str] = ()
) -> list[PolicyCoupon]:
"""
Return a list of (discount_policy, discount_coupon) tuples.
Expand Down Expand Up @@ -260,7 +260,7 @@ def line_items_count(self):
).count()

@classmethod
def is_valid_access_coupon(cls, ticket: Item, code_list):
def is_valid_access_coupon(cls, ticket: Ticket, code_list):
"""
Check if any of code_list is a valid access code for the specified ticket.
Expand Down Expand Up @@ -368,4 +368,4 @@ class PolicyCoupon:
from .line_item import LineItem # isort:skip

if TYPE_CHECKING:
from .item import Item, Price
from .ticket import Price, Ticket
12 changes: 6 additions & 6 deletions boxoffice/models/line_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class LineItem(BaseMixin[UUID, User], Model):
ticket_id: Mapped[UUID] = sa.orm.mapped_column(
'item_id', sa.ForeignKey('item.id'), index=True, unique=False
)
ticket: Mapped[Item] = relationship(back_populates='line_items')
ticket: Mapped[Ticket] = relationship(back_populates='line_items')
previous_id: Mapped[UUID | None] = sa.orm.mapped_column(
sa.ForeignKey('line_item.id'), unique=True
)
Expand Down Expand Up @@ -143,13 +143,13 @@ def calculate(
# make named tuples for line items,
# assign the base_amount for each of them, None if a ticket is unavailable
for line_item in line_items:
ticket: Item | None
ticket: Ticket | None
if isinstance(line_item, LineItem):
ticket = line_item.ticket
base_amount = line_item.base_amount
line_item_id = line_item.id
else:
ticket = Item.query.get(line_item['ticket_id'])
ticket = Ticket.query.get(line_item['ticket_id'])
if ticket is None:
continue
current_price = ticket.current_price()
Expand Down Expand Up @@ -342,12 +342,12 @@ def calculate_weekly_sales(
sa.func.sum(LineItem.final_amount).label('sum'),
)
.select_from(LineItem)
.join(Item, LineItem.ticket_id == Item.id)
.join(Ticket, LineItem.ticket_id == Ticket.id)
.where(
LineItem.status.in_(
[LineItemStatus.CONFIRMED.value, LineItemStatus.CANCELLED.value]
),
Item.menu_id.in_(menu_ids),
Ticket.menu_id.in_(menu_ids),
sa.func.timezone(user_tz, sa.func.timezone('UTC', LineItem.ordered_at))
>= start_at,
sa.func.timezone(user_tz, sa.func.timezone('UTC', LineItem.ordered_at))
Expand Down Expand Up @@ -375,7 +375,7 @@ def sales_delta(user_tz: tzinfo, ticket_ids: Sequence[str]):


# Tail import
from .item import Item # isort:skip
from .ticket import Ticket # isort:skip
from .line_item_discounter import LineItemDiscounter # isort:skip

if TYPE_CHECKING:
Expand Down
6 changes: 3 additions & 3 deletions boxoffice/models/line_item_discounter.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def get_valid_discounts(
if not line_items:
return []

ticket = Item.query.get(line_items[0].ticket_id)
ticket = Ticket.query.get(line_items[0].ticket_id)
if ticket is None or not ticket.is_available and not ticket.is_cancellable():
# Ticket unavailable, no discounts
return []
Expand All @@ -54,7 +54,7 @@ def calculate_discounted_amount(
return Decimal(0)

if discount_policy.is_price_based:
ticket = Item.query.get(line_item.ticket_id)
ticket = Ticket.query.get(line_item.ticket_id)
if ticket is None: # Failsafe flagged by static type checker
return Decimal(0)
discounted_price = ticket.discounted_price(discount_policy)
Expand Down Expand Up @@ -194,4 +194,4 @@ def get_combos(


# Tail imports
from .item import Item # isort:skip
from .ticket import Ticket # isort:skip
14 changes: 7 additions & 7 deletions boxoffice/models/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ class Menu(BaseScopedNameMixin[UUID, User], Model):
collection_class=ordering_list('seq', count_from=1),
back_populates='menu',
)
tickets: Mapped[list[Item]] = relationship(
tickets: Mapped[list[Ticket]] = relationship(
cascade='all, delete-orphan',
order_by='Item.seq',
order_by=lambda: Ticket.seq,
collection_class=ordering_list('seq', count_from=1),
back_populates='menu',
)
Expand Down Expand Up @@ -85,7 +85,7 @@ def fetch_all_details(self) -> HeadersAndDataTuple:
)
.outerjoin(DiscountCoupon, LineItem.discount_coupon_id == DiscountCoupon.id)
.outerjoin(DiscountPolicy, LineItem.discount_policy_id == DiscountPolicy.id)
.join(Item)
.join(Ticket)
.join(Order)
.outerjoin(OrderSession)
)
Expand All @@ -95,7 +95,7 @@ def fetch_all_details(self) -> HeadersAndDataTuple:
LineItem.id,
LineItem.customer_order_id,
Order.receipt_no,
Item.title,
Ticket.title,
LineItem.base_amount,
LineItem.discounted_amount,
LineItem.final_amount,
Expand Down Expand Up @@ -176,15 +176,15 @@ def fetch_assignee_details(self):
LineItem.id == Assignee.line_item_id, Assignee.current.is_(True)
),
)
.join(Item)
.join(Ticket)
.join(Order)
)
line_item_query = (
sa.select(
Order.receipt_no,
LineItem.line_item_seq,
LineItem.id,
Item.title,
Ticket.title,
Assignee.fullname,
Assignee.email,
Assignee.phone,
Expand Down Expand Up @@ -246,7 +246,7 @@ def net_sales(self) -> Decimal:
# Tail imports
from .discount_policy import DiscountCoupon, DiscountPolicy # isort:skip
from .line_item import Assignee, LineItem # isort:skip
from .item import Item # isort:skip
from .ticket import Ticket # isort:skip
from .order import Order, OrderSession # isort:skip

if TYPE_CHECKING:
Expand Down
12 changes: 6 additions & 6 deletions boxoffice/models/item.py → boxoffice/models/ticket.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@
from .enums import LineItemStatus
from .user import User

__all__ = ['Item', 'Price']
__all__ = ['Ticket', 'Price']


class Item(BaseScopedNameMixin[UUID, User], Model):
class Ticket(BaseScopedNameMixin[UUID, User], Model):
__tablename__ = 'item'
__table_args__ = (sa.UniqueConstraint('item_collection_id', 'name'),)

Expand Down Expand Up @@ -128,8 +128,8 @@ def price_at(self, timestamp) -> Price | None:
)

@classmethod
def get_by_category(cls, category) -> Query[Item]:
return cls.query.filter(Item.category == category).order_by(cls.seq)
def get_by_category(cls, category) -> Query[Ticket]:
return cls.query.filter(Ticket.category == category).order_by(cls.seq)

@hybrid_property
def quantity_available(self) -> int:
Expand Down Expand Up @@ -231,7 +231,7 @@ class Price(BaseScopedNameMixin[UUID, User], Model):
)

ticket_id: Mapped[UUID] = sa.orm.mapped_column('item_id', sa.ForeignKey('item.id'))
ticket: Mapped[Item] = relationship(back_populates='prices')
ticket: Mapped[Ticket] = relationship(back_populates='prices')

discount_policy_id: Mapped[UUID | None] = sa.orm.mapped_column(
sa.ForeignKey('discount_policy.id')
Expand All @@ -240,7 +240,7 @@ class Price(BaseScopedNameMixin[UUID, User], Model):
back_populates='prices'
)

parent: Mapped[Item] = sa.orm.synonym('ticket')
parent: Mapped[Ticket] = sa.orm.synonym('ticket')
start_at: Mapped[timestamptz_now]
end_at: Mapped[timestamptz]
amount: Mapped[Decimal] = sa.orm.mapped_column(default=Decimal(0))
Expand Down
30 changes: 16 additions & 14 deletions boxoffice/views/admin_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from .. import app, lastuser
from ..forms import ItemForm, PriceForm
from ..models import Item, Menu, Organization, Price, db, sa
from ..models import Menu, Organization, Price, Ticket, db, sa
from .utils import api_error, api_success, json_date_format, xhr_only


Expand All @@ -19,17 +19,19 @@
def tickets(organization: Organization, search: str | None = None):
if search:
filtered_tickets = (
db.session.query(Item, Menu)
db.session.query(Ticket, Menu)
.filter(
Menu.organization_id == organization.id,
sa.or_(
sa.func.lower(Item.title).contains(search.lower(), autoescape=True),
sa.func.lower(Ticket.title).contains(
search.lower(), autoescape=True
),
sa.func.lower(Menu.title).contains(search.lower(), autoescape=True),
),
)
.join(Item.menu)
.join(Ticket.menu)
.options(
sa.orm.Load(Item).load_only(Item.id, Item.title),
sa.orm.Load(Ticket).load_only(Ticket.id, Ticket.title),
sa.orm.Load(Menu).load_only(Menu.id, Menu.title),
)
.all()
Expand All @@ -56,7 +58,7 @@ def jsonify_price(price):
return price_details


def format_demand_curve(ticket: Item):
def format_demand_curve(ticket: Ticket):
result = {}
demand_counter = 0

Expand All @@ -69,7 +71,7 @@ def format_demand_curve(ticket: Item):
return result


def format_ticket_details(ticket: Item):
def format_ticket_details(ticket: Ticket):
ticket_details = dict(ticket.current_access())
ticket_details['sold_count'] = ticket.sold_count()
ticket_details['free_count'] = ticket.free_count()
Expand Down Expand Up @@ -108,8 +110,8 @@ def jsonify_item(data_dict):
@app.route('/admin/ticket/<ticket_id>', methods=['GET'])
@lastuser.requires_login
@render_with({'text/html': 'index.html.jinja2', 'application/json': jsonify_item})
@load_models((Item, {'id': 'ticket_id'}, 'ticket'), permission='org_admin')
def admin_item(ticket: Item) -> ReturnRenderWith:
@load_models((Ticket, {'id': 'ticket_id'}, 'ticket'), permission='org_admin')
def admin_item(ticket: Ticket) -> ReturnRenderWith:
return {'ticket': ticket}


Expand All @@ -123,7 +125,7 @@ def jsonify_new_ticket(data_dict):
).get_data(as_text=True)
)
if ticket_form.validate_on_submit():
ticket = Item(menu=menu)
ticket = Ticket(menu=menu)
ticket_form.populate_obj(ticket)
if not ticket.name:
ticket.make_name()
Expand Down Expand Up @@ -181,8 +183,8 @@ def jsonify_edit_ticket(data_dict):
@render_with(
{'text/html': 'index.html.jinja2', 'application/json': jsonify_edit_ticket}
)
@load_models((Item, {'id': 'ticket_id'}, 'ticket'), permission='org_admin')
def admin_edit_item(ticket: Item) -> ReturnRenderWith:
@load_models((Ticket, {'id': 'ticket_id'}, 'ticket'), permission='org_admin')
def admin_edit_item(ticket: Ticket) -> ReturnRenderWith:
return {'ticket': ticket}


Expand Down Expand Up @@ -218,8 +220,8 @@ def jsonify_new_price(data_dict):
@app.route('/admin/ticket/<ticket_id>/price/new', methods=['GET', 'POST'])
@lastuser.requires_login
@render_with({'text/html': 'index.html.jinja2', 'application/json': jsonify_new_price})
@load_models((Item, {'id': 'ticket_id'}, 'ticket'), permission='org_admin')
def admin_new_price(ticket: Item) -> ReturnRenderWith:
@load_models((Ticket, {'id': 'ticket_id'}, 'ticket'), permission='org_admin')
def admin_new_price(ticket: Ticket) -> ReturnRenderWith:
return {'ticket': ticket}


Expand Down
Loading

0 comments on commit a5c81e8

Please sign in to comment.