From 8f14c698b74a0275c300c1e90cf556aac2b49a60 Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 17:21:04 +0530 Subject: [PATCH 01/10] Rename ItemCollection to Menu --- boxoffice/__init__.py | 2 +- boxoffice/forms/discount.py | 14 +++++----- boxoffice/forms/item.py | 4 +-- boxoffice/models/__init__.py | 2 +- boxoffice/models/category.py | 6 ++--- boxoffice/models/item.py | 6 ++--- boxoffice/models/line_item.py | 6 ++--- .../models/{item_collection.py => menu.py} | 4 +-- boxoffice/models/order.py | 4 +-- boxoffice/models/user.py | 4 +-- boxoffice/views/admin.py | 6 ++--- boxoffice/views/admin_category.py | 6 ++--- boxoffice/views/admin_item.py | 18 +++++-------- boxoffice/views/admin_item_collection.py | 12 ++++----- boxoffice/views/admin_order.py | 6 ++--- boxoffice/views/admin_report.py | 18 ++++++------- boxoffice/views/item_collection.py | 17 ++++-------- boxoffice/views/order.py | 10 +++---- console.py | 4 +-- tests/conftest.py | 4 +-- tests/integration/test_items.py | 4 +-- tests/test_item_collection.py | 4 +-- tests/test_order.py | 26 +++++++++---------- 23 files changed, 87 insertions(+), 100 deletions(-) rename boxoffice/models/{item_collection.py => menu.py} (98%) diff --git a/boxoffice/__init__.py b/boxoffice/__init__.py index 84db94bf..5ef7efa7 100644 --- a/boxoffice/__init__.py +++ b/boxoffice/__init__.py @@ -39,7 +39,7 @@ DiscountPolicy, Invoice, Item, - ItemCollection, + Menu, Organization, Price, User, diff --git a/boxoffice/forms/discount.py b/boxoffice/forms/discount.py index d48befbe..6236c470 100644 --- a/boxoffice/forms/discount.py +++ b/boxoffice/forms/discount.py @@ -9,7 +9,7 @@ DiscountPolicy, DiscountTypeEnum, Item, - ItemCollection, + Menu, sa, ) @@ -72,8 +72,8 @@ class AutomaticDiscountPolicyForm(DiscountPolicyForm): def __post_init__(self) -> None: self.tickets.query = ( - Item.query.join(ItemCollection, Item.menu_id == ItemCollection.id) - .filter(ItemCollection.organization == self.edit_parent) + Item.query.join(Menu, Item.menu_id == Menu.id) + .filter(Menu.organization == self.edit_parent) .options(sa.orm.load_only(Item.id, Item.title)) ) @@ -123,8 +123,8 @@ class CouponBasedDiscountPolicyForm(DiscountPolicyForm): def __post_init__(self) -> None: self.tickets.query = ( - Item.query.join(ItemCollection, Item.menu_id == ItemCollection.id) - .filter(ItemCollection.organization == self.edit_parent) + Item.query.join(Menu, Item.menu_id == Menu.id) + .filter(Menu.organization == self.edit_parent) .options(sa.orm.load_only(Item.id, Item.title)) ) @@ -203,8 +203,8 @@ class DiscountPriceForm(forms.Form): def __post_init__(self) -> None: self.ticket.query = ( - Item.query.join(ItemCollection, Item.menu_id == ItemCollection.id) - .filter(ItemCollection.organization_id == self.edit_parent.organization_id) + Item.query.join(Menu, Item.menu_id == Menu.id) + .filter(Menu.organization_id == self.edit_parent.organization_id) .options(sa.orm.load_only(Item.id, Item.title)) ) diff --git a/boxoffice/forms/item.py b/boxoffice/forms/item.py index dc27b9d4..336eb58c 100644 --- a/boxoffice/forms/item.py +++ b/boxoffice/forms/item.py @@ -3,7 +3,7 @@ from baseframe import __, forms, localized_country_list from ..data import indian_states, indian_states_dict -from ..models import Category, ItemCollection, sa +from ..models import Category, Menu, sa __all__ = ['ItemForm'] @@ -98,7 +98,7 @@ def __post_init__(self) -> None: ] self.place_supply_country_code.choices = [('', '')] + localized_country_list() self.category.query = ( - Category.query.join(ItemCollection, Category.menu_id == ItemCollection.id) + Category.query.join(Menu, Category.menu_id == Menu.id) .filter(Category.menu == self.edit_parent) .options(sa.orm.load_only(Category.id, Category.title)) ) diff --git a/boxoffice/models/__init__.py b/boxoffice/models/__init__.py index 70481ab3..95c458b2 100644 --- a/boxoffice/models/__init__.py +++ b/boxoffice/models/__init__.py @@ -51,7 +51,7 @@ class Model(ModelBase, DeclarativeBase): from .discount_policy import * # isort:skip from .invoice import * # isort:skip from .item import * # isort:skip -from .item_collection import * # isort:skip +from .menu import * # isort:skip from .line_item import * # isort:skip from .line_item_discounter import * # isort:skip from .order import * # isort:skip diff --git a/boxoffice/models/category.py b/boxoffice/models/category.py index cb0c8c57..8537bd9d 100644 --- a/boxoffice/models/category.py +++ b/boxoffice/models/category.py @@ -21,12 +21,12 @@ class Category(BaseScopedNameMixin[int, User], Model): menu_id: Mapped[UUID] = sa.orm.mapped_column( 'item_collection_id', sa.ForeignKey('item_collection.id') ) - menu: Mapped[ItemCollection] = relationship(back_populates='categories') + menu: Mapped[Menu] = relationship(back_populates='categories') seq: Mapped[int] tickets: Mapped[list[Item]] = relationship( cascade='all, delete-orphan', back_populates='category' ) - parent: Mapped[ItemCollection] = sa.orm.synonym('menu') + parent: Mapped[Menu] = sa.orm.synonym('menu') __roles__ = {'category_owner': {'read': {'id', 'name', 'title', 'menu_id'}}} @@ -39,4 +39,4 @@ def roles_for(self, actor=None, anchors=()): if TYPE_CHECKING: from .item import Item - from .item_collection import ItemCollection + from .menu import Menu diff --git a/boxoffice/models/item.py b/boxoffice/models/item.py index 0f865198..157243fb 100644 --- a/boxoffice/models/item.py +++ b/boxoffice/models/item.py @@ -42,8 +42,8 @@ class Item(BaseScopedNameMixin[UUID, User], Model): menu_id: Mapped[UUID] = sa.orm.mapped_column( 'item_collection_id', sa.ForeignKey('item_collection.id') ) - menu: Mapped[ItemCollection] = relationship(back_populates='tickets') - parent: Mapped[ItemCollection] = sa.orm.synonym('menu') + menu: Mapped[Menu] = relationship(back_populates='tickets') + parent: Mapped[Menu] = sa.orm.synonym('menu') category_id: Mapped[int] = sa.orm.mapped_column(sa.ForeignKey('category.id')) category: Mapped[Category] = relationship(back_populates='tickets') quantity_total: Mapped[int] = sa.orm.mapped_column(default=0) @@ -290,4 +290,4 @@ def tense(self): if TYPE_CHECKING: from .discount_policy import DiscountPolicy - from .item_collection import ItemCollection + from .menu import Menu diff --git a/boxoffice/models/line_item.py b/boxoffice/models/line_item.py index 3efe60dd..9f4a4ac5 100644 --- a/boxoffice/models/line_item.py +++ b/boxoffice/models/line_item.py @@ -252,9 +252,7 @@ def get_max_seq(cls, order: Order) -> int: ) -def counts_per_date_per_item( - menu: ItemCollection, user_tz: tzinfo -) -> dict[date, dict[str, int]]: +def counts_per_date_per_item(menu: Menu, user_tz: tzinfo) -> dict[date, dict[str, int]]: """ Return number of line items sold per date per ticket. @@ -382,5 +380,5 @@ def sales_delta(user_tz: tzinfo, ticket_ids: Sequence[str]): if TYPE_CHECKING: from .discount_policy import DiscountCoupon, DiscountPolicy - from .item_collection import ItemCollection + from .menu import Menu from .order import Order diff --git a/boxoffice/models/item_collection.py b/boxoffice/models/menu.py similarity index 98% rename from boxoffice/models/item_collection.py rename to boxoffice/models/menu.py index 03af8a1c..afd2c82a 100644 --- a/boxoffice/models/item_collection.py +++ b/boxoffice/models/menu.py @@ -21,10 +21,10 @@ from .user import Organization, User from .utils import HeadersAndDataTuple -__all__ = ['ItemCollection'] +__all__ = ['Menu'] -class ItemCollection(BaseScopedNameMixin[UUID, User], Model): +class Menu(BaseScopedNameMixin[UUID, User], Model): """Represent a collection of tickets.""" __tablename__ = 'item_collection' diff --git a/boxoffice/models/order.py b/boxoffice/models/order.py index deef53ff..013bf4db 100644 --- a/boxoffice/models/order.py +++ b/boxoffice/models/order.py @@ -55,7 +55,7 @@ class Order(BaseMixin[UUID, User], Model): menu_id: Mapped[UUID] = sa.orm.mapped_column( 'item_collection_id', sa.ForeignKey('item_collection.id') ) - menu: Mapped[ItemCollection] = relationship(back_populates='orders') + menu: Mapped[Menu] = relationship(back_populates='orders') organization_id: Mapped[int] = sa.orm.mapped_column( sa.ForeignKey('organization.id') ) @@ -250,5 +250,5 @@ class OrderSession(BaseMixin[UUID, User], Model): if TYPE_CHECKING: from .invoice import Invoice - from .item_collection import ItemCollection + from .menu import Menu from .payment import OnlinePayment, PaymentTransaction diff --git a/boxoffice/models/user.py b/boxoffice/models/user.py index e4e1e95d..fd0cb277 100644 --- a/boxoffice/models/user.py +++ b/boxoffice/models/user.py @@ -56,7 +56,7 @@ class Organization(ProfileBase, Model): cascade='all, delete-orphan', back_populates='invoicer', ) - menus: Mapped[list[ItemCollection]] = relationship( + menus: Mapped[list[Menu]] = relationship( cascade='all, delete-orphan', back_populates='organization' ) @@ -138,6 +138,6 @@ def fetch_invoices(self): if TYPE_CHECKING: from .discount_policy import DiscountPolicy - from .item_collection import ItemCollection from .line_item import Assignee + from .menu import Menu from .order import Order diff --git a/boxoffice/views/admin.py b/boxoffice/views/admin.py index 7c42f24e..ade10c8e 100644 --- a/boxoffice/views/admin.py +++ b/boxoffice/views/admin.py @@ -8,7 +8,7 @@ from coaster.views import ReturnRenderWith, load_models, render_with from .. import app, lastuser -from ..models import ItemCollection, Organization +from ..models import Menu, Organization from ..models.line_item import calculate_weekly_sales from ..models.payment import calculate_weekly_refunds from .utils import api_error, api_success, check_api_access @@ -39,8 +39,8 @@ def index() -> ReturnRenderWith: def jsonify_org(data): menu_list = ( - ItemCollection.query.filter(ItemCollection.organization == data['org']) - .order_by(ItemCollection.created_at.desc()) + Menu.query.filter(Menu.organization == data['org']) + .order_by(Menu.created_at.desc()) .all() ) return jsonify( diff --git a/boxoffice/views/admin_category.py b/boxoffice/views/admin_category.py index 80d5800d..5f5984b7 100644 --- a/boxoffice/views/admin_category.py +++ b/boxoffice/views/admin_category.py @@ -6,7 +6,7 @@ from .. import app, lastuser from ..forms import CategoryForm -from ..models import Category, ItemCollection, db +from ..models import Category, Menu, db from .utils import api_error, api_success @@ -46,8 +46,8 @@ def jsonify_new_category(data_dict): @render_with( {'text/html': 'index.html.jinja2', 'application/json': jsonify_new_category} ) -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu'), permission='org_admin') -def admin_new_category(menu: ItemCollection) -> ReturnRenderWith: +@load_models((Menu, {'id': 'menu_id'}, 'menu'), permission='org_admin') +def admin_new_category(menu: Menu) -> ReturnRenderWith: return {'menu': menu} diff --git a/boxoffice/views/admin_item.py b/boxoffice/views/admin_item.py index b7255986..f48b171d 100644 --- a/boxoffice/views/admin_item.py +++ b/boxoffice/views/admin_item.py @@ -7,7 +7,7 @@ from .. import app, lastuser from ..forms import ItemForm, PriceForm -from ..models import Item, ItemCollection, Organization, Price, db, sa +from ..models import Item, Menu, Organization, Price, db, sa from .utils import api_error, api_success, json_date_format, xhr_only @@ -19,22 +19,18 @@ def tickets(organization: Organization, search: str | None = None): if search: filtered_tickets = ( - db.session.query(Item, ItemCollection) + db.session.query(Item, Menu) .filter( - ItemCollection.organization_id == organization.id, + Menu.organization_id == organization.id, sa.or_( sa.func.lower(Item.title).contains(search.lower(), autoescape=True), - sa.func.lower(ItemCollection.title).contains( - search.lower(), autoescape=True - ), + sa.func.lower(Menu.title).contains(search.lower(), autoescape=True), ), ) .join(Item.menu) .options( sa.orm.Load(Item).load_only(Item.id, Item.title), - sa.orm.Load(ItemCollection).load_only( - ItemCollection.id, ItemCollection.title - ), + sa.orm.Load(Menu).load_only(Menu.id, Menu.title), ) .all() ) @@ -148,8 +144,8 @@ def jsonify_new_ticket(data_dict): @app.route('/admin/menu//ticket/new', methods=['GET', 'POST']) @lastuser.requires_login @render_with({'text/html': 'index.html.jinja2', 'application/json': jsonify_new_ticket}) -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu'), permission='org_admin') -def admin_new_item(menu: ItemCollection) -> ReturnRenderWith: +@load_models((Menu, {'id': 'menu_id'}, 'menu'), permission='org_admin') +def admin_new_item(menu: Menu) -> ReturnRenderWith: return {'menu': menu} diff --git a/boxoffice/views/admin_item_collection.py b/boxoffice/views/admin_item_collection.py index dbb0e34a..2eac035b 100644 --- a/boxoffice/views/admin_item_collection.py +++ b/boxoffice/views/admin_item_collection.py @@ -7,7 +7,7 @@ from .. import app, lastuser from ..forms import ItemCollectionForm -from ..models import ItemCollection, Organization, db +from ..models import Menu, Organization, db from ..models.line_item import counts_per_date_per_item, sales_by_date, sales_delta from .admin_item import format_ticket_details from .utils import api_error, api_success @@ -40,8 +40,8 @@ def jsonify_menu(menu_dict): @app.route('/admin/menu/') @lastuser.requires_login @render_with({'text/html': 'index.html.jinja2', 'application/json': jsonify_menu}) -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu'), permission='org_admin') -def admin_menu(menu: ItemCollection) -> ReturnRenderWith: +@load_models((Menu, {'id': 'menu_id'}, 'menu'), permission='org_admin') +def admin_menu(menu: Menu) -> ReturnRenderWith: ticket_ids = [str(ticket.id) for ticket in menu.tickets] date_ticket_counts = {} date_sales = {} @@ -78,7 +78,7 @@ def jsonify_new_menu(menu_dict): ).get_data(as_text=True) ) if ic_form.validate_on_submit(): - menu = ItemCollection(organization=menu_dict['organization']) + menu = Menu(organization=menu_dict['organization']) ic_form.populate_obj(menu) if not menu.name: menu.make_name() @@ -135,6 +135,6 @@ def jsonify_edit_menu(menu_dict): @app.route('/admin/menu//edit', methods=['POST', 'GET']) @lastuser.requires_login @render_with({'text/html': 'index.html.jinja2', 'application/json': jsonify_edit_menu}) -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu'), permission='org_admin') -def admin_edit_ic(menu: ItemCollection) -> ReturnRenderWith: +@load_models((Menu, {'id': 'menu_id'}, 'menu'), permission='org_admin') +def admin_edit_ic(menu: Menu) -> ReturnRenderWith: return {'menu': menu} diff --git a/boxoffice/views/admin_order.py b/boxoffice/views/admin_order.py index aaf4d8b3..64a78757 100644 --- a/boxoffice/views/admin_order.py +++ b/boxoffice/views/admin_order.py @@ -6,9 +6,9 @@ from ..models import ( CurrencySymbol, InvoiceStatus, - ItemCollection, LineItem, LineItemStatus, + Menu, Order, OrderStatus, Organization, @@ -100,8 +100,8 @@ def jsonify_admin_orders(data_dict): @render_with( {'text/html': 'index.html.jinja2', 'application/json': jsonify_admin_orders} ) -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu'), permission='org_admin') -def admin_orders(menu: ItemCollection) -> ReturnRenderWith: +@load_models((Menu, {'id': 'menu_id'}, 'menu'), permission='org_admin') +def admin_orders(menu: Menu) -> ReturnRenderWith: return { 'title': menu.title, 'menu': menu, diff --git a/boxoffice/views/admin_report.py b/boxoffice/views/admin_report.py index f55a80a5..03c2a3af 100644 --- a/boxoffice/views/admin_report.py +++ b/boxoffice/views/admin_report.py @@ -9,7 +9,7 @@ from .. import app, lastuser from ..extapi.razorpay import get_settled_transactions -from ..models import InvoiceStatus, ItemCollection, Organization +from ..models import InvoiceStatus, Menu, Organization from .utils import api_error, check_api_access, csv_response @@ -25,8 +25,8 @@ def jsonify_report(data_dict): @app.route('/admin/menu//reports') @lastuser.requires_login @render_with({'text/html': 'index.html.jinja2', 'application/json': jsonify_report}) -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu'), permission='org_admin') -def admin_report(menu: ItemCollection) -> ReturnRenderWith: +@load_models((Menu, {'id': 'menu_id'}, 'menu'), permission='org_admin') +def admin_report(menu: Menu) -> ReturnRenderWith: return {'menu': menu} @@ -51,8 +51,8 @@ def admin_org_report(organization: Organization) -> ReturnRenderWith: @app.route('/admin/menu//tickets.csv') @lastuser.requires_login -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu'), permission='org_admin') -def tickets_report(menu: ItemCollection): +@load_models((Menu, {'id': 'menu_id'}, 'menu'), permission='org_admin') +def tickets_report(menu: Menu): headers, rows = menu.fetch_all_details() assignee_url_index = headers.index('assignee_url') @@ -81,8 +81,8 @@ def row_handler(row): @app.route('/admin/menu//attendees.csv') @lastuser.requires_login -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu'), permission='org_admin') -def attendees_report(menu: ItemCollection): +@load_models((Menu, {'id': 'menu_id'}, 'menu'), permission='org_admin') +def attendees_report(menu: Menu): # Generated a unique list of headers for all 'assignee_details' keys in all items in # this menu. This flattens the 'assignee_details' dict. This will need to # be updated if we add additional dicts to our csv export. @@ -135,12 +135,12 @@ def row_handler(row): @load_models( (Organization, {'name': 'org'}, 'organization'), ( - ItemCollection, + Menu, {'id': 'menu_id', 'organization': 'organization'}, 'menu', ), ) -def orders_api(organization: Organization, menu: ItemCollection): +def orders_api(organization: Organization, menu: Menu): check_api_access(organization.details.get('access_token')) # Generated a unique list of headers for all 'assignee_details' keys in all items in diff --git a/boxoffice/views/item_collection.py b/boxoffice/views/item_collection.py index 6420ca23..4355e4a5 100644 --- a/boxoffice/views/item_collection.py +++ b/boxoffice/views/item_collection.py @@ -7,14 +7,7 @@ from .. import app from ..data import indian_states -from ..models import ( - Category, - CurrencySymbol, - DiscountPolicy, - Item, - ItemCollection, - Organization, -) +from ..models import Category, CurrencySymbol, DiscountPolicy, Item, Menu, Organization from .utils import cors, sanitize_coupons, xhr_only @@ -101,8 +94,8 @@ def boxofficejs(): @app.route('/menu/', methods=['GET', 'OPTIONS']) @xhr_only @cors -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu')) -def view_menu(menu: ItemCollection): +@load_models((Menu, {'id': 'menu_id'}, 'menu')) +def view_menu(menu: Menu): categories_json = [] for category in menu.categories: category_json = jsonify_category(category) @@ -120,12 +113,12 @@ def view_menu(menu: ItemCollection): @load_models( (Organization, {'name': 'org'}, 'organization'), ( - ItemCollection, + Menu, {'name': 'menu_name', 'organization': 'organization'}, 'menu', ), ) -def menu_listing(organization: Organization, menu: ItemCollection): +def menu_listing(organization: Organization, menu: Menu): show_title = getbool(request.args.get('show_title', True)) return render_template( 'item_collection_listing.html.jinja2', diff --git a/boxoffice/views/order.py b/boxoffice/views/order.py index b6b2ca2c..ea31af9b 100644 --- a/boxoffice/views/order.py +++ b/boxoffice/views/order.py @@ -33,9 +33,9 @@ DiscountPolicy, Invoice, Item, - ItemCollection, LineItem, LineItemStatus, + Menu, OnlinePayment, Order, OrderSession, @@ -206,8 +206,8 @@ def kharcha(): @app.route('/menu//order', methods=['GET', 'OPTIONS', 'POST']) @xhr_only @cors -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu')) -def create_order(menu: ItemCollection): +@load_models((Menu, {'id': 'menu_id'}, 'menu')) +def create_order(menu: Menu): """ Create an order. @@ -886,8 +886,8 @@ def partial_refund_order(order: Order) -> ReturnRenderWith: @app.route('/api/1/menu//orders', methods=['GET', 'OPTIONS']) -@load_models((ItemCollection, {'id': 'menu_id'}, 'menu')) -def menu_orders(menu: ItemCollection): +@load_models((Menu, {'id': 'menu_id'}, 'menu')) +def menu_orders(menu: Menu): organization = menu.organization # TODO: Replace with a better authentication system if not request.args.get('access_token') or request.args.get( diff --git a/console.py b/console.py index 77ecc24a..e18d7cd7 100644 --- a/console.py +++ b/console.py @@ -27,9 +27,9 @@ Invoice, InvoiceStatus, Item, - ItemCollection, LineItem, LineItemStatus, + Menu, OnlinePayment, Order, OrderStatus, @@ -285,7 +285,7 @@ def resend_attendee_details_email( menu_title: str = "", sender_team_member_name: str = "Team Hasgeek", ) -> None: - menu = ItemCollection.query.get(menu_id) + menu = Menu.query.get(menu_id) if menu is None: raise ValueError("Unknown item collection") headers, rows = menu.fetch_all_details() diff --git a/tests/conftest.py b/tests/conftest.py index 8def89f2..8e02797f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -17,7 +17,7 @@ DiscountPolicy, DiscountTypeEnum, Item, - ItemCollection, + Menu, Organization, Price, User, @@ -138,7 +138,7 @@ def all_data(db_session): db_session.add(rootconf) db_session.commit() - rc2016 = ItemCollection(title='2016', organization=rootconf) + rc2016 = Menu(title='2016', organization=rootconf) db_session.add(rc2016) db_session.commit() diff --git a/tests/integration/test_items.py b/tests/integration/test_items.py index e779bc2b..b5701864 100644 --- a/tests/integration/test_items.py +++ b/tests/integration/test_items.py @@ -4,7 +4,7 @@ from coaster.utils import utcnow from boxoffice import app -from boxoffice.models import Item, ItemCollection, Order, OrderStatus +from boxoffice.models import Item, Menu, Order, OrderStatus def ajax_post(client, url, data): @@ -29,7 +29,7 @@ def test_assign(db_session, client, all_data) -> None: 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = ajax_post(client, f'/menu/{menu.id}/order', data) assert resp.status_code == 201 diff --git a/tests/test_item_collection.py b/tests/test_item_collection.py index 735fc984..ad4c2546 100644 --- a/tests/test_item_collection.py +++ b/tests/test_item_collection.py @@ -4,7 +4,7 @@ import pytest from boxoffice import app -from boxoffice.models import ItemCollection +from boxoffice.models import Menu expected_keys = ['categories', 'currency', 'html', 'refund_policy'] expected_categories_names = ['conference', 'workshop', 'merchandise'] @@ -57,7 +57,7 @@ @pytest.fixture() def resp(client, all_data): - menu = ItemCollection.query.one() + menu = Menu.query.one() return client.get( f'/menu/{menu.id}', headers=[ diff --git a/tests/test_order.py b/tests/test_order.py index 14098e23..cbfacc4a 100644 --- a/tests/test_order.py +++ b/tests/test_order.py @@ -15,9 +15,9 @@ DiscountCoupon, DiscountPolicy, Item, - ItemCollection, LineItem, LineItemStatus, + Menu, OnlinePayment, Order, OrderStatus, @@ -50,7 +50,7 @@ def test_basic(client, all_data) -> None: 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -95,7 +95,7 @@ def test_basic_with_utm_headers(client, all_data) -> None: 'gclid': gclid, }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -129,7 +129,7 @@ def test_order_with_invalid_quantity(client, all_data) -> None: 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -152,7 +152,7 @@ def test_simple_discounted_item(client, all_data) -> None: 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -178,7 +178,7 @@ def test_expired_ticket_order(client, all_data) -> None: 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -207,7 +207,7 @@ def test_signed_discounted_coupon_order(client, all_data) -> None: 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -246,7 +246,7 @@ def test_complex_discounted_item(client, all_data) -> None: 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -288,7 +288,7 @@ def test_discounted_complex_order(client, all_data) -> None: 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -335,7 +335,7 @@ def make_free_order(client): }, 'discount_coupons': ['coupon2'], } - menu = ItemCollection.query.one() + menu = Menu.query.one() resp = client.post( f'/menu/{menu.id}/order', data=json.dumps(data), @@ -390,7 +390,7 @@ def test_cancel_line_item_in_order(db_session, client, all_data, post_env) -> No 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() # make a purchase order resp = client.post( f'/menu/{menu.id}/order', @@ -474,7 +474,7 @@ def test_cancel_line_item_in_bulk_order(db_session, client, all_data, post_env) 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() # make a purchase order resp = client.post( f'/menu/{menu.id}/order', @@ -617,7 +617,7 @@ def test_partial_refund_in_order(db_session, client, all_data, post_env) -> None 'email': 'test@hasgeek.com', }, } - menu = ItemCollection.query.one() + menu = Menu.query.one() # make a purchase order resp = client.post( f'/menu/{menu.id}/order', From a5c81e8b65763023d4fa8ed5d58fe90dcda8ae57 Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 17:26:43 +0530 Subject: [PATCH 02/10] Rename Item to Ticket --- boxoffice/__init__.py | 2 +- boxoffice/forms/discount.py | 14 +++++------ boxoffice/forms/participant.py | 4 ++-- boxoffice/models/__init__.py | 2 +- boxoffice/models/category.py | 4 ++-- boxoffice/models/discount_policy.py | 8 +++---- boxoffice/models/line_item.py | 12 +++++----- boxoffice/models/line_item_discounter.py | 6 ++--- boxoffice/models/menu.py | 14 +++++------ boxoffice/models/{item.py => ticket.py} | 12 +++++----- boxoffice/views/admin_item.py | 30 +++++++++++++----------- boxoffice/views/item_collection.py | 13 +++++++--- boxoffice/views/order.py | 12 +++++----- console.py | 6 ++--- tests/conftest.py | 12 +++++----- tests/integration/test_items.py | 4 ++-- tests/test_kharcha.py | 26 ++++++++++---------- tests/test_order.py | 30 ++++++++++++------------ 18 files changed, 110 insertions(+), 101 deletions(-) rename boxoffice/models/{item.py => ticket.py} (96%) diff --git a/boxoffice/__init__.py b/boxoffice/__init__.py index 5ef7efa7..bf551aff 100644 --- a/boxoffice/__init__.py +++ b/boxoffice/__init__.py @@ -38,7 +38,7 @@ DiscountCoupon, DiscountPolicy, Invoice, - Item, + Ticket, Menu, Organization, Price, diff --git a/boxoffice/forms/discount.py b/boxoffice/forms/discount.py index 6236c470..4f64d97b 100644 --- a/boxoffice/forms/discount.py +++ b/boxoffice/forms/discount.py @@ -8,8 +8,8 @@ DiscountCoupon, DiscountPolicy, DiscountTypeEnum, - Item, Menu, + Ticket, sa, ) @@ -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)) ) @@ -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)) ) @@ -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)) ) diff --git a/boxoffice/forms/participant.py b/boxoffice/forms/participant.py index e0a88577..d9d794ba 100644 --- a/boxoffice/forms/participant.py +++ b/boxoffice/forms/participant.py @@ -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"] @@ -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) diff --git a/boxoffice/models/__init__.py b/boxoffice/models/__init__.py index 95c458b2..165418fc 100644 --- a/boxoffice/models/__init__.py +++ b/boxoffice/models/__init__.py @@ -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 diff --git a/boxoffice/models/category.py b/boxoffice/models/category.py index 8537bd9d..9b749595 100644 --- a/boxoffice/models/category.py +++ b/boxoffice/models/category.py @@ -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') @@ -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 diff --git a/boxoffice/models/discount_policy.py b/boxoffice/models/discount_policy.py index b794db23..dd511292 100644 --- a/boxoffice/models/discount_policy.py +++ b/boxoffice/models/discount_policy.py @@ -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') @@ -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. @@ -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. @@ -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 diff --git a/boxoffice/models/line_item.py b/boxoffice/models/line_item.py index 9f4a4ac5..b90df7e3 100644 --- a/boxoffice/models/line_item.py +++ b/boxoffice/models/line_item.py @@ -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 ) @@ -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() @@ -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)) @@ -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: diff --git a/boxoffice/models/line_item_discounter.py b/boxoffice/models/line_item_discounter.py index c526adb4..f02a399a 100644 --- a/boxoffice/models/line_item_discounter.py +++ b/boxoffice/models/line_item_discounter.py @@ -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 [] @@ -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) @@ -194,4 +194,4 @@ def get_combos( # Tail imports -from .item import Item # isort:skip +from .ticket import Ticket # isort:skip diff --git a/boxoffice/models/menu.py b/boxoffice/models/menu.py index afd2c82a..0a1affc5 100644 --- a/boxoffice/models/menu.py +++ b/boxoffice/models/menu.py @@ -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', ) @@ -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) ) @@ -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, @@ -176,7 +176,7 @@ def fetch_assignee_details(self): LineItem.id == Assignee.line_item_id, Assignee.current.is_(True) ), ) - .join(Item) + .join(Ticket) .join(Order) ) line_item_query = ( @@ -184,7 +184,7 @@ def fetch_assignee_details(self): Order.receipt_no, LineItem.line_item_seq, LineItem.id, - Item.title, + Ticket.title, Assignee.fullname, Assignee.email, Assignee.phone, @@ -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: diff --git a/boxoffice/models/item.py b/boxoffice/models/ticket.py similarity index 96% rename from boxoffice/models/item.py rename to boxoffice/models/ticket.py index 157243fb..5359cd27 100644 --- a/boxoffice/models/item.py +++ b/boxoffice/models/ticket.py @@ -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'),) @@ -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: @@ -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') @@ -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)) diff --git a/boxoffice/views/admin_item.py b/boxoffice/views/admin_item.py index f48b171d..10f084ed 100644 --- a/boxoffice/views/admin_item.py +++ b/boxoffice/views/admin_item.py @@ -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 @@ -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() @@ -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 @@ -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() @@ -108,8 +110,8 @@ def jsonify_item(data_dict): @app.route('/admin/ticket/', 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} @@ -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() @@ -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} @@ -218,8 +220,8 @@ def jsonify_new_price(data_dict): @app.route('/admin/ticket//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} diff --git a/boxoffice/views/item_collection.py b/boxoffice/views/item_collection.py index 4355e4a5..8050bff7 100644 --- a/boxoffice/views/item_collection.py +++ b/boxoffice/views/item_collection.py @@ -7,11 +7,18 @@ from .. import app from ..data import indian_states -from ..models import Category, CurrencySymbol, DiscountPolicy, Item, Menu, Organization +from ..models import ( + Category, + CurrencySymbol, + DiscountPolicy, + Menu, + Organization, + Ticket, +) from .utils import cors, sanitize_coupons, xhr_only -def jsonify_ticket(ticket: Item): +def jsonify_ticket(ticket: Ticket): if ticket.restricted_entry: code_list = ( sanitize_coupons(request.args.getlist('code')) @@ -55,7 +62,7 @@ def jsonify_ticket(ticket: Item): def jsonify_category(category: Category): category_items = [] - for ticket in Item.get_by_category(category): + for ticket in Ticket.get_by_category(category): ticket_json = jsonify_ticket(ticket) if ticket_json: category_items.append(ticket_json) diff --git a/boxoffice/views/order.py b/boxoffice/views/order.py index ea31af9b..d547dcfa 100644 --- a/boxoffice/views/order.py +++ b/boxoffice/views/order.py @@ -32,7 +32,6 @@ DiscountCoupon, DiscountPolicy, Invoice, - Item, LineItem, LineItemStatus, Menu, @@ -42,6 +41,7 @@ OrderStatus, PaymentTransaction, RazorpayPaymentStatus, + Ticket, TransactionTypeEnum, User, db, @@ -75,7 +75,7 @@ def jsonify_line_items(line_items): """ items_json = {} for line_item in line_items: - ticket = Item.query.get_or_404(line_item.ticket_id) + ticket = Ticket.query.get_or_404(line_item.ticket_id) if not items_json.get(str(line_item.ticket_id)): items_json[str(line_item.ticket_id)] = { 'is_available': ticket.is_available, @@ -235,7 +235,7 @@ def create_order(menu: Menu): "Selected quantity for ‘{ticket}’ is not available. Please edit the order and" " update the quantity" ) - ticket_dicts = Item.get_availability( + ticket_dicts = Ticket.get_availability( [line_item_form.data.get('ticket_id') for line_item_form in line_item_forms] ) @@ -252,7 +252,7 @@ def create_order(menu: Menu): errors=['order calculation error'], ) else: - ticket = Item.query.get_or_404(line_item_form.data.get('ticket_id')) + ticket = Ticket.query.get_or_404(line_item_form.data.get('ticket_id')) if line_item_form.data.get('quantity') > ticket.quantity_total: return api_error( message=invalid_quantity_error_msg.format(ticket=ticket.title), @@ -281,7 +281,7 @@ def create_order(menu: Menu): ) for idx, line_item_tup in enumerate(line_item_tups): - ticket = Item.query.get_or_404(line_item_tup.ticket_id) + ticket = Ticket.query.get_or_404(line_item_tup.ticket_id) if ticket.restricted_entry and ( not sanitized_coupon_codes @@ -643,7 +643,7 @@ def regenerate_line_item( ): """Update a line item by marking the original as void and creating a replacement.""" original_line_item.make_void() - ticket = Item.query.get_or_404(updated_line_item_tup.ticket_id) + ticket = Ticket.query.get_or_404(updated_line_item_tup.ticket_id) if updated_line_item_tup.discount_policy_id: policy = DiscountPolicy.query.get_or_404( updated_line_item_tup.discount_policy_id diff --git a/console.py b/console.py index e18d7cd7..2ee8eecd 100644 --- a/console.py +++ b/console.py @@ -26,7 +26,6 @@ CurrencyEnum, Invoice, InvoiceStatus, - Item, LineItem, LineItemStatus, Menu, @@ -35,6 +34,7 @@ OrderStatus, Organization, PaymentTransaction, + Ticket, db, sa, ) @@ -92,12 +92,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)) diff --git a/tests/conftest.py b/tests/conftest.py index 8e02797f..6d0d40de 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -16,10 +16,10 @@ DiscountCoupon, DiscountPolicy, DiscountTypeEnum, - Item, Menu, Organization, Price, + Ticket, User, db, ) @@ -151,7 +151,7 @@ def all_data(db_session): db_session.commit() with db_session.no_autoflush: - conf_ticket = Item( + conf_ticket = Ticket( title='Conference ticket', description='

14 - 15 April 2016' '

MLR Convention Center,' @@ -164,7 +164,7 @@ def all_data(db_session): rc2016.tickets.append(conf_ticket) db_session.commit() - expired_ticket = Item( + expired_ticket = Ticket( title='Expired ticket', description='

14 - 15 April 2016' '

MLR Convention Center,' @@ -187,7 +187,7 @@ def all_data(db_session): db_session.add(price) db_session.commit() - single_day_conf_ticket = Item( + single_day_conf_ticket = Ticket( title='Single Day', description='

14 April 2016' '

MLR Convention Center,' @@ -210,7 +210,7 @@ def all_data(db_session): db_session.add(single_day_price) db_session.commit() - tshirt = Item( + tshirt = Ticket( title='T-shirt', description='Rootconf', menu=rc2016, @@ -230,7 +230,7 @@ def all_data(db_session): db_session.add(tshirt_price) db_session.commit() - dns_workshop = Item( + dns_workshop = Ticket( title='DNSSEC workshop', description='

12 April 2016' '

TERI, Domlur

' diff --git a/tests/integration/test_items.py b/tests/integration/test_items.py index b5701864..afa359bb 100644 --- a/tests/integration/test_items.py +++ b/tests/integration/test_items.py @@ -4,7 +4,7 @@ from coaster.utils import utcnow from boxoffice import app -from boxoffice.models import Item, Menu, Order, OrderStatus +from boxoffice.models import Menu, Order, OrderStatus, Ticket def ajax_post(client, url, data): @@ -20,7 +20,7 @@ def ajax_post(client, url, data): def test_assign(db_session, client, all_data) -> None: - ticket = Item.query.filter_by(name="conference-ticket").one() + ticket = Ticket.query.filter_by(name="conference-ticket").one() data = { 'line_items': [{'ticket_id': str(ticket.id), 'quantity': 2}], 'buyer': { diff --git a/tests/test_kharcha.py b/tests/test_kharcha.py index 9dbb9913..5351c0ed 100644 --- a/tests/test_kharcha.py +++ b/tests/test_kharcha.py @@ -7,11 +7,11 @@ from coaster.utils import make_name from boxoffice import app -from boxoffice.models import DiscountCoupon, DiscountPolicy, Item +from boxoffice.models import DiscountCoupon, DiscountPolicy, Ticket def test_undiscounted_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() undiscounted_quantity = 2 kharcha_req = { 'line_items': [ @@ -51,7 +51,7 @@ def test_undiscounted_kharcha(client, all_data) -> None: def test_expired_ticket_kharcha(client, all_data) -> None: - expired_ticket = Item.query.filter_by(name='expired-ticket').one() + expired_ticket = Ticket.query.filter_by(name='expired-ticket').one() quantity = 2 kharcha_req = { 'line_items': [{'ticket_id': str(expired_ticket.id), 'quantity': quantity}] @@ -76,7 +76,7 @@ def test_expired_ticket_kharcha(client, all_data) -> None: def test_expired_discounted_item_kharcha(client, all_data) -> None: - expired_ticket = Item.query.filter_by(name='expired-ticket').one() + expired_ticket = Ticket.query.filter_by(name='expired-ticket').one() quantity = 2 coupon = DiscountCoupon.query.filter_by(code='couponex').one() kharcha_req = { @@ -102,7 +102,7 @@ def test_expired_discounted_item_kharcha(client, all_data) -> None: def test_discounted_bulk_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() discounted_quantity = 10 kharcha_req = { 'line_items': [ @@ -151,7 +151,7 @@ def test_discounted_bulk_kharcha(client, all_data) -> None: def test_discounted_coupon_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() coupon: DiscountCoupon = DiscountCoupon.query.filter_by(code='coupon1').one() discounted_quantity = 1 kharcha_req = { @@ -200,7 +200,7 @@ def test_discounted_coupon_kharcha(client, all_data) -> None: def test_signed_discounted_coupon_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() signed_policy = DiscountPolicy.query.filter_by(name='signed').one() code = signed_policy.gen_signed_code() discounted_quantity = 2 @@ -248,7 +248,7 @@ def test_signed_discounted_coupon_kharcha(client, all_data) -> None: def test_unlimited_coupon_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() coupon_code = 'unlimited' discounted_quantity = 5 kharcha_req = { @@ -298,7 +298,7 @@ def test_unlimited_coupon_kharcha(client, all_data) -> None: def test_coupon_limit(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() coupon = DiscountCoupon.query.filter_by(code='coupon1').one() discounted_quantity = 2 kharcha_req = { @@ -345,7 +345,7 @@ def test_coupon_limit(client, all_data) -> None: def test_discounted_price_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() coupon = DiscountCoupon.query.filter_by(code='forever').one() discounted_quantity = 1 kharcha_req = { @@ -386,7 +386,7 @@ def test_discounted_price_kharcha(client, all_data) -> None: def test_discount_policy_without_price_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() coupon = DiscountCoupon.query.filter_by(code='noprice').one() discounted_quantity = 1 kharcha_req = { @@ -415,7 +415,7 @@ def test_discount_policy_without_price_kharcha(client, all_data) -> None: def test_zero_discounted_price_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() coupon = DiscountCoupon.query.filter_by(code='zerodi').one() discounted_quantity = 1 kharcha_req = { @@ -455,7 +455,7 @@ def test_zero_discounted_price_kharcha(client, all_data) -> None: def test_discounted_complex_kharcha(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() discounted_quantity = 9 coupon2 = DiscountCoupon.query.filter_by(code='coupon2').one() coupon3 = DiscountCoupon.query.filter_by(code='coupon3').one() diff --git a/tests/test_order.py b/tests/test_order.py index cbfacc4a..ced92606 100644 --- a/tests/test_order.py +++ b/tests/test_order.py @@ -14,7 +14,6 @@ CurrencyEnum, DiscountCoupon, DiscountPolicy, - Item, LineItem, LineItemStatus, Menu, @@ -22,6 +21,7 @@ Order, OrderStatus, PaymentTransaction, + Ticket, ) from boxoffice.models.payment import TransactionTypeEnum from boxoffice.views.custom_exceptions import PaymentGatewayError @@ -41,7 +41,7 @@ def json(self): def test_basic(client, all_data) -> None: - ticket = Item.query.filter_by(name='conference-ticket').one() + ticket = Ticket.query.filter_by(name='conference-ticket').one() data = { 'line_items': [{'ticket_id': str(ticket.id), 'quantity': 2}], 'buyer': { @@ -70,7 +70,7 @@ def test_basic(client, all_data) -> None: def test_basic_with_utm_headers(client, all_data) -> None: - ticket = Item.query.filter_by(name='conference-ticket').one() + ticket = Ticket.query.filter_by(name='conference-ticket').one() utm_campaign = 'campaign' utm_medium = 'medium' utm_source = 'source' @@ -120,7 +120,7 @@ def test_basic_with_utm_headers(client, all_data) -> None: def test_order_with_invalid_quantity(client, all_data) -> None: - ticket = Item.query.filter_by(name='conference-ticket').one() + ticket = Ticket.query.filter_by(name='conference-ticket').one() data = { 'line_items': [{'ticket_id': str(ticket.id), 'quantity': 1001}], 'buyer': { @@ -143,7 +143,7 @@ def test_order_with_invalid_quantity(client, all_data) -> None: def test_simple_discounted_item(client, all_data) -> None: - discounted_item = Item.query.filter_by(name='t-shirt').one() + discounted_item = Ticket.query.filter_by(name='t-shirt').one() data = { 'line_items': [{'ticket_id': str(discounted_item.id), 'quantity': 5}], 'buyer': { @@ -168,7 +168,7 @@ def test_simple_discounted_item(client, all_data) -> None: def test_expired_ticket_order(client, all_data) -> None: - expired_ticket = Item.query.filter_by(name='expired-ticket').one() + expired_ticket = Ticket.query.filter_by(name='expired-ticket').one() quantity = 2 data = { 'line_items': [{'ticket_id': str(expired_ticket.id), 'quantity': quantity}], @@ -192,7 +192,7 @@ def test_expired_ticket_order(client, all_data) -> None: def test_signed_discounted_coupon_order(client, all_data) -> None: - first_item = Item.query.filter_by(name='conference-ticket').one() + first_item = Ticket.query.filter_by(name='conference-ticket').one() signed_policy = DiscountPolicy.query.filter_by(name='signed').one() signed_code = signed_policy.gen_signed_code() discounted_quantity = 1 @@ -233,8 +233,8 @@ def test_signed_discounted_coupon_order(client, all_data) -> None: def test_complex_discounted_item(client, all_data) -> None: - discounted_item1 = Item.query.filter_by(name='t-shirt').one() - discounted_item2 = Item.query.filter_by(name='conference-ticket').one() + discounted_item1 = Ticket.query.filter_by(name='t-shirt').one() + discounted_item2 = Ticket.query.filter_by(name='conference-ticket').one() data = { 'line_items': [ {'ticket_id': str(discounted_item1.id), 'quantity': 5}, @@ -263,8 +263,8 @@ def test_complex_discounted_item(client, all_data) -> None: def test_discounted_complex_order(client, all_data) -> None: - conf = Item.query.filter_by(name='conference-ticket').one() - tshirt = Item.query.filter_by(name='t-shirt').one() + conf = Ticket.query.filter_by(name='conference-ticket').one() + tshirt = Ticket.query.filter_by(name='t-shirt').one() conf_current_price = conf.current_price() assert conf_current_price is not None tshirt_current_price = tshirt.current_price() @@ -325,7 +325,7 @@ def test_discounted_complex_order(client, all_data) -> None: def make_free_order(client): - ticket = Item.query.filter_by(name='conference-ticket').one() + ticket = Ticket.query.filter_by(name='conference-ticket').one() data = { 'line_items': [{'ticket_id': str(ticket.id), 'quantity': 1}], 'buyer': { @@ -376,7 +376,7 @@ def test_free_order(client, all_data) -> None: def test_cancel_line_item_in_order(db_session, client, all_data, post_env) -> None: original_quantity = 2 - order_item = Item.query.filter_by(name='t-shirt').one() + order_item = Ticket.query.filter_by(name='t-shirt').one() current_price = order_item.current_price() assert current_price is not None total_amount = current_price.amount * original_quantity @@ -460,7 +460,7 @@ def test_cancel_line_item_in_order(db_session, client, all_data, post_env) -> No def test_cancel_line_item_in_bulk_order(db_session, client, all_data, post_env) -> None: original_quantity = 5 - discounted_item = Item.query.filter_by(name='t-shirt').one() + discounted_item = Ticket.query.filter_by(name='t-shirt').one() current_price = discounted_item.current_price() assert current_price is not None total_amount = current_price.amount * original_quantity @@ -603,7 +603,7 @@ def test_cancel_line_item_in_bulk_order(db_session, client, all_data, post_env) def test_partial_refund_in_order(db_session, client, all_data, post_env) -> None: original_quantity = 5 - discounted_item = Item.query.filter_by(name='t-shirt').one() + discounted_item = Ticket.query.filter_by(name='t-shirt').one() current_price = discounted_item.current_price() assert current_price is not None total_amount = current_price.amount * original_quantity From 33b5093ceda247ad52e849e5661835fe0779a344 Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 17:38:01 +0530 Subject: [PATCH 03/10] Rename forms for Menu and Ticket --- boxoffice/forms/__init__.py | 4 ++-- boxoffice/forms/{item_collection.py => menu.py} | 4 ++-- boxoffice/forms/{item.py => ticket.py} | 4 ++-- boxoffice/views/admin_item.py | 6 +++--- boxoffice/views/admin_item_collection.py | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) rename boxoffice/forms/{item_collection.py => menu.py} (96%) rename boxoffice/forms/{item.py => ticket.py} (98%) diff --git a/boxoffice/forms/__init__.py b/boxoffice/forms/__init__.py index f8112cda..4dba61b2 100644 --- a/boxoffice/forms/__init__.py +++ b/boxoffice/forms/__init__.py @@ -2,9 +2,9 @@ from .category import * from .discount import * -from .item import * -from .item_collection import * +from .menu import * from .order import * from .order_refund import * from .participant import * from .price import * +from .ticket import * diff --git a/boxoffice/forms/item_collection.py b/boxoffice/forms/menu.py similarity index 96% rename from boxoffice/forms/item_collection.py rename to boxoffice/forms/menu.py index d1e61479..fef06201 100644 --- a/boxoffice/forms/item_collection.py +++ b/boxoffice/forms/menu.py @@ -4,10 +4,10 @@ from ..data import indian_states, indian_states_dict -__all__ = ['ItemCollectionForm'] +__all__ = ['MenuForm'] -class ItemCollectionForm(forms.Form): +class MenuForm(forms.Form): title = forms.StringField( __("Item Collection title"), validators=[ diff --git a/boxoffice/forms/item.py b/boxoffice/forms/ticket.py similarity index 98% rename from boxoffice/forms/item.py rename to boxoffice/forms/ticket.py index 336eb58c..6af39f05 100644 --- a/boxoffice/forms/item.py +++ b/boxoffice/forms/ticket.py @@ -5,7 +5,7 @@ from ..data import indian_states, indian_states_dict from ..models import Category, Menu, sa -__all__ = ['ItemForm'] +__all__ = ['TicketForm'] ASSIGNEE_DETAILS_PLACEHOLDER = { @@ -27,7 +27,7 @@ } -class ItemForm(forms.Form): +class TicketForm(forms.Form): title = forms.StringField( __("Item title"), validators=[ diff --git a/boxoffice/views/admin_item.py b/boxoffice/views/admin_item.py index 10f084ed..fa818b78 100644 --- a/boxoffice/views/admin_item.py +++ b/boxoffice/views/admin_item.py @@ -6,7 +6,7 @@ from coaster.views import ReturnRenderWith, load_models, render_with, requestargs from .. import app, lastuser -from ..forms import ItemForm, PriceForm +from ..forms import PriceForm, TicketForm from ..models import Menu, Organization, Price, Ticket, db, sa from .utils import api_error, api_success, json_date_format, xhr_only @@ -117,7 +117,7 @@ def admin_item(ticket: Ticket) -> ReturnRenderWith: def jsonify_new_ticket(data_dict): menu = data_dict['menu'] - ticket_form = ItemForm(parent=menu) + ticket_form = TicketForm(parent=menu) if request.method == 'GET': return jsonify( form_template=render_form( @@ -153,7 +153,7 @@ def admin_new_item(menu: Menu) -> ReturnRenderWith: def jsonify_edit_ticket(data_dict): ticket = data_dict['ticket'] - ticket_form = ItemForm(obj=ticket) + ticket_form = TicketForm(obj=ticket) if request.method == 'GET': return jsonify( form_template=render_form( diff --git a/boxoffice/views/admin_item_collection.py b/boxoffice/views/admin_item_collection.py index 2eac035b..45c8a12b 100644 --- a/boxoffice/views/admin_item_collection.py +++ b/boxoffice/views/admin_item_collection.py @@ -6,7 +6,7 @@ from coaster.views import ReturnRenderWith, load_models, render_with from .. import app, lastuser -from ..forms import ItemCollectionForm +from ..forms import MenuForm from ..models import Menu, Organization, db from ..models.line_item import counts_per_date_per_item, sales_by_date, sales_delta from .admin_item import format_ticket_details @@ -66,7 +66,7 @@ def admin_menu(menu: Menu) -> ReturnRenderWith: def jsonify_new_menu(menu_dict): - ic_form = ItemCollectionForm() + ic_form = MenuForm() if request.method == 'GET': return jsonify( form_template=render_form( @@ -106,7 +106,7 @@ def admin_new_ic(organization: Organization) -> ReturnRenderWith: def jsonify_edit_menu(menu_dict): menu = menu_dict['menu'] - ic_form = ItemCollectionForm(obj=menu) + ic_form = MenuForm(obj=menu) if request.method == 'GET': return jsonify( form_template=render_form( From 29da30a07c2775fe23d99f625ec075af5d9b8731 Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 17:57:12 +0530 Subject: [PATCH 04/10] Rename view files --- boxoffice/views/__init__.py | 6 +++--- boxoffice/views/{admin_item_collection.py => admin_menu.py} | 2 +- boxoffice/views/{admin_item.py => admin_ticket.py} | 0 boxoffice/views/{item_collection.py => menu.py} | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename boxoffice/views/{admin_item_collection.py => admin_menu.py} (99%) rename boxoffice/views/{admin_item.py => admin_ticket.py} (100%) rename boxoffice/views/{item_collection.py => menu.py} (100%) diff --git a/boxoffice/views/__init__.py b/boxoffice/views/__init__.py index 98870681..8f574bb6 100644 --- a/boxoffice/views/__init__.py +++ b/boxoffice/views/__init__.py @@ -4,12 +4,12 @@ admin, admin_category, admin_discount, - admin_item, - admin_item_collection, + admin_menu, admin_order, admin_report, - item_collection, + admin_ticket, login, + menu, order, participant, ) diff --git a/boxoffice/views/admin_item_collection.py b/boxoffice/views/admin_menu.py similarity index 99% rename from boxoffice/views/admin_item_collection.py rename to boxoffice/views/admin_menu.py index 45c8a12b..28ee1a29 100644 --- a/boxoffice/views/admin_item_collection.py +++ b/boxoffice/views/admin_menu.py @@ -9,7 +9,7 @@ from ..forms import MenuForm from ..models import Menu, Organization, db from ..models.line_item import counts_per_date_per_item, sales_by_date, sales_delta -from .admin_item import format_ticket_details +from .admin_ticket import format_ticket_details from .utils import api_error, api_success diff --git a/boxoffice/views/admin_item.py b/boxoffice/views/admin_ticket.py similarity index 100% rename from boxoffice/views/admin_item.py rename to boxoffice/views/admin_ticket.py diff --git a/boxoffice/views/item_collection.py b/boxoffice/views/menu.py similarity index 100% rename from boxoffice/views/item_collection.py rename to boxoffice/views/menu.py From 4a45d169ec652d55ca78c12c4b2accca7aa41ed5 Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 17:57:50 +0530 Subject: [PATCH 05/10] Remove test database --- boxoffice/test.db | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 boxoffice/test.db diff --git a/boxoffice/test.db b/boxoffice/test.db deleted file mode 100644 index e69de29b..00000000 From 6bf15c1d98ba26fa0ee7687827ee64ae47a21405 Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 18:05:45 +0530 Subject: [PATCH 06/10] Rename JS files to use `type_action` convention --- .../{edit_category.js => category_edit.js} | 0 .../{new_category.js => category_new.js} | 0 ...unt_policy.js => discount_policy_admin.js} | 0 ...nt_policy.js => discount_policy_delete.js} | 0 .../js/views/{item_collection.js => menu.js} | 0 .../{edit_item_collection.js => menu_edit.js} | 0 .../{new_item_collection.js => menu_new.js} | 0 .../views/{admin_order.js => order_admin.js} | 0 ...efund_order.js => order_partial_refund.js} | 0 .../{admin_orders.js => orders_admin.js} | 0 ...dmin_org_report.js => org_report_admin.js} | 0 .../js/views/{edit_price.js => price_edit.js} | 0 .../js/views/{new_price.js => price_new.js} | 0 .../{admin_report.js => report_admin.js} | 0 boxoffice/assets/js/views/router.js | 34 +++++++++---------- .../views/{admin_item.js => ticket_admin.js} | 0 .../js/views/{edit_item.js => ticket_edit.js} | 0 .../js/views/{new_item.js => ticket_new.js} | 0 18 files changed, 17 insertions(+), 17 deletions(-) rename boxoffice/assets/js/views/{edit_category.js => category_edit.js} (100%) rename boxoffice/assets/js/views/{new_category.js => category_new.js} (100%) rename boxoffice/assets/js/views/{admin_discount_policy.js => discount_policy_admin.js} (100%) rename boxoffice/assets/js/views/{delete_discount_policy.js => discount_policy_delete.js} (100%) rename boxoffice/assets/js/views/{item_collection.js => menu.js} (100%) rename boxoffice/assets/js/views/{edit_item_collection.js => menu_edit.js} (100%) rename boxoffice/assets/js/views/{new_item_collection.js => menu_new.js} (100%) rename boxoffice/assets/js/views/{admin_order.js => order_admin.js} (100%) rename boxoffice/assets/js/views/{partial_refund_order.js => order_partial_refund.js} (100%) rename boxoffice/assets/js/views/{admin_orders.js => orders_admin.js} (100%) rename boxoffice/assets/js/views/{admin_org_report.js => org_report_admin.js} (100%) rename boxoffice/assets/js/views/{edit_price.js => price_edit.js} (100%) rename boxoffice/assets/js/views/{new_price.js => price_new.js} (100%) rename boxoffice/assets/js/views/{admin_report.js => report_admin.js} (100%) rename boxoffice/assets/js/views/{admin_item.js => ticket_admin.js} (100%) rename boxoffice/assets/js/views/{edit_item.js => ticket_edit.js} (100%) rename boxoffice/assets/js/views/{new_item.js => ticket_new.js} (100%) diff --git a/boxoffice/assets/js/views/edit_category.js b/boxoffice/assets/js/views/category_edit.js similarity index 100% rename from boxoffice/assets/js/views/edit_category.js rename to boxoffice/assets/js/views/category_edit.js diff --git a/boxoffice/assets/js/views/new_category.js b/boxoffice/assets/js/views/category_new.js similarity index 100% rename from boxoffice/assets/js/views/new_category.js rename to boxoffice/assets/js/views/category_new.js diff --git a/boxoffice/assets/js/views/admin_discount_policy.js b/boxoffice/assets/js/views/discount_policy_admin.js similarity index 100% rename from boxoffice/assets/js/views/admin_discount_policy.js rename to boxoffice/assets/js/views/discount_policy_admin.js diff --git a/boxoffice/assets/js/views/delete_discount_policy.js b/boxoffice/assets/js/views/discount_policy_delete.js similarity index 100% rename from boxoffice/assets/js/views/delete_discount_policy.js rename to boxoffice/assets/js/views/discount_policy_delete.js diff --git a/boxoffice/assets/js/views/item_collection.js b/boxoffice/assets/js/views/menu.js similarity index 100% rename from boxoffice/assets/js/views/item_collection.js rename to boxoffice/assets/js/views/menu.js diff --git a/boxoffice/assets/js/views/edit_item_collection.js b/boxoffice/assets/js/views/menu_edit.js similarity index 100% rename from boxoffice/assets/js/views/edit_item_collection.js rename to boxoffice/assets/js/views/menu_edit.js diff --git a/boxoffice/assets/js/views/new_item_collection.js b/boxoffice/assets/js/views/menu_new.js similarity index 100% rename from boxoffice/assets/js/views/new_item_collection.js rename to boxoffice/assets/js/views/menu_new.js diff --git a/boxoffice/assets/js/views/admin_order.js b/boxoffice/assets/js/views/order_admin.js similarity index 100% rename from boxoffice/assets/js/views/admin_order.js rename to boxoffice/assets/js/views/order_admin.js diff --git a/boxoffice/assets/js/views/partial_refund_order.js b/boxoffice/assets/js/views/order_partial_refund.js similarity index 100% rename from boxoffice/assets/js/views/partial_refund_order.js rename to boxoffice/assets/js/views/order_partial_refund.js diff --git a/boxoffice/assets/js/views/admin_orders.js b/boxoffice/assets/js/views/orders_admin.js similarity index 100% rename from boxoffice/assets/js/views/admin_orders.js rename to boxoffice/assets/js/views/orders_admin.js diff --git a/boxoffice/assets/js/views/admin_org_report.js b/boxoffice/assets/js/views/org_report_admin.js similarity index 100% rename from boxoffice/assets/js/views/admin_org_report.js rename to boxoffice/assets/js/views/org_report_admin.js diff --git a/boxoffice/assets/js/views/edit_price.js b/boxoffice/assets/js/views/price_edit.js similarity index 100% rename from boxoffice/assets/js/views/edit_price.js rename to boxoffice/assets/js/views/price_edit.js diff --git a/boxoffice/assets/js/views/new_price.js b/boxoffice/assets/js/views/price_new.js similarity index 100% rename from boxoffice/assets/js/views/new_price.js rename to boxoffice/assets/js/views/price_new.js diff --git a/boxoffice/assets/js/views/admin_report.js b/boxoffice/assets/js/views/report_admin.js similarity index 100% rename from boxoffice/assets/js/views/admin_report.js rename to boxoffice/assets/js/views/report_admin.js diff --git a/boxoffice/assets/js/views/router.js b/boxoffice/assets/js/views/router.js index 6b779cd1..630e2c22 100644 --- a/boxoffice/assets/js/views/router.js +++ b/boxoffice/assets/js/views/router.js @@ -1,22 +1,22 @@ import { IndexView } from './index'; import { OrgView } from './org'; -import { OrgReportView } from './admin_org_report'; -import { DiscountPolicyView } from './admin_discount_policy'; -import { DeleteDiscountPolicyView } from './delete_discount_policy'; -import { MenuView } from './item_collection'; -import { MenuNewView } from './new_item_collection'; -import { MenuEditView } from './edit_item_collection'; -import { OrdersView } from './admin_orders'; -import { OrderView } from './admin_order'; -import { ReportView } from './admin_report'; -import { TicketView } from './admin_item'; -import { NewTicketView } from './new_item'; -import { EditTicketView } from './edit_item'; -import { NewPriceView } from './new_price'; -import { EditPriceView } from './edit_price'; -import { NewCategoryView } from './new_category'; -import { EditCategoryView } from './edit_category'; -import { PartialRefundOrderView } from './partial_refund_order'; +import { OrgReportView } from './org_report_admin'; +import { DiscountPolicyView } from './discount_policy_admin'; +import { DeleteDiscountPolicyView } from './discount_policy_delete'; +import { MenuView } from './menu'; +import { MenuNewView } from './menu_new'; +import { MenuEditView } from './menu_edit'; +import { OrdersView } from './orders_admin'; +import { OrderView } from './order_admin'; +import { ReportView } from './report_admin'; +import { TicketView } from './ticket_admin'; +import { NewTicketView } from './ticket_new'; +import { EditTicketView } from './ticket_edit'; +import { NewPriceView } from './price_new'; +import { EditPriceView } from './price_edit'; +import { NewCategoryView } from './category_new'; +import { EditCategoryView } from './category_edit'; +import { PartialRefundOrderView } from './order_partial_refund'; const Backbone = require('backbone'); diff --git a/boxoffice/assets/js/views/admin_item.js b/boxoffice/assets/js/views/ticket_admin.js similarity index 100% rename from boxoffice/assets/js/views/admin_item.js rename to boxoffice/assets/js/views/ticket_admin.js diff --git a/boxoffice/assets/js/views/edit_item.js b/boxoffice/assets/js/views/ticket_edit.js similarity index 100% rename from boxoffice/assets/js/views/edit_item.js rename to boxoffice/assets/js/views/ticket_edit.js diff --git a/boxoffice/assets/js/views/new_item.js b/boxoffice/assets/js/views/ticket_new.js similarity index 100% rename from boxoffice/assets/js/views/new_item.js rename to boxoffice/assets/js/views/ticket_new.js From 66ee08b8293925ff0d1955388506212d7d1f971e Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 18:48:42 +0530 Subject: [PATCH 07/10] Additional ignores --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 52e82d83..3636eebc 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ monkeytype.sqlite3 .env .env.testing .envrc +.DS_Store +.venv From 3b7cfb278e64fd15ee8d3705d609e68c9dedd5c8 Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 18:51:09 +0530 Subject: [PATCH 08/10] Remove unused static files --- boxoffice/static/ads.txt | 1 - boxoffice/static/js/scripts.js | 0 2 files changed, 1 deletion(-) delete mode 100644 boxoffice/static/ads.txt delete mode 100644 boxoffice/static/js/scripts.js diff --git a/boxoffice/static/ads.txt b/boxoffice/static/ads.txt deleted file mode 100644 index 8b0e6da3..00000000 --- a/boxoffice/static/ads.txt +++ /dev/null @@ -1 +0,0 @@ -ads.txt diff --git a/boxoffice/static/js/scripts.js b/boxoffice/static/js/scripts.js deleted file mode 100644 index e69de29b..00000000 From 144daea5d03460001bd53101a876ff406269713b Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Tue, 5 Mar 2024 18:52:35 +0530 Subject: [PATCH 09/10] Rename test file --- tests/{test_item_collection.py => test_menu.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/{test_item_collection.py => test_menu.py} (100%) diff --git a/tests/test_item_collection.py b/tests/test_menu.py similarity index 100% rename from tests/test_item_collection.py rename to tests/test_menu.py From 39ef3c904ad3adf1ec5876faf69337eb871ceb84 Mon Sep 17 00:00:00 2001 From: Kiran Jonnalagadda Date: Wed, 6 Mar 2024 16:09:31 +0530 Subject: [PATCH 10/10] Remove reference to unused scripts.js --- boxoffice/__init__.py | 3 +-- runtestserver.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/boxoffice/__init__.py b/boxoffice/__init__.py index bf551aff..63d37520 100644 --- a/boxoffice/__init__.py +++ b/boxoffice/__init__.py @@ -9,7 +9,7 @@ from flask_rq2 import RQ from pytz import timezone -from baseframe import Version, assets, baseframe +from baseframe import Version, baseframe from baseframe.utils import JSONProvider from coaster.assets import WebpackManifest from flask_lastuser import Lastuser @@ -28,7 +28,6 @@ # --- Assets --------------------------------------------------------------------------- version = Version(__version__) -assets['boxoffice.js'][version] = 'js/scripts.js' # --- Import rest of the app ----------------------------------------------------------- diff --git a/runtestserver.py b/runtestserver.py index 26bc5a11..6dd15ee5 100644 --- a/runtestserver.py +++ b/runtestserver.py @@ -24,7 +24,7 @@ def test_page() -> str: