From 2a723af2015a45963c858fde7c5011a78b61a033 Mon Sep 17 00:00:00 2001 From: giles Date: Tue, 24 Feb 2026 13:58:08 +0000 Subject: [PATCH] Add account-nav-item and account-page fragment handlers (Phase 5) Events now serves tickets/bookings nav links and page panels as fragments for the account app. Co-Authored-By: Claude Opus 4.6 --- bp/fragments/routes.py | 31 +++++++++++++ shared | 2 +- templates/fragments/account_nav_items.html | 23 ++++++++++ .../fragments/account_page_bookings.html | 44 +++++++++++++++++++ templates/fragments/account_page_tickets.html | 44 +++++++++++++++++++ 5 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 templates/fragments/account_nav_items.html create mode 100644 templates/fragments/account_page_bookings.html create mode 100644 templates/fragments/account_page_tickets.html diff --git a/bp/fragments/routes.py b/bp/fragments/routes.py index 243b245..293398a 100644 --- a/bp/fragments/routes.py +++ b/bp/fragments/routes.py @@ -94,6 +94,37 @@ def register(): _handlers["container-cards"] = _container_cards_handler + # --- account-nav-item fragment: tickets + bookings links for account nav - + + async def _account_nav_item_handler(): + return await render_template("fragments/account_nav_items.html") + + _handlers["account-nav-item"] = _account_nav_item_handler + + # --- account-page fragment: tickets or bookings panel -------------------- + + async def _account_page_handler(): + slug = request.args.get("slug", "") + user_id = request.args.get("user_id", type=int) + if not user_id: + return "" + + if slug == "tickets": + tickets = await services.calendar.user_tickets(g.s, user_id=user_id) + return await render_template( + "fragments/account_page_tickets.html", + tickets=tickets, + ) + elif slug == "bookings": + bookings = await services.calendar.user_bookings(g.s, user_id=user_id) + return await render_template( + "fragments/account_page_bookings.html", + bookings=bookings, + ) + return "" + + _handlers["account-page"] = _account_page_handler + bp._fragment_handlers = _handlers return bp diff --git a/shared b/shared index d2e07e0..65c4989 160000 --- a/shared +++ b/shared @@ -1 +1 @@ -Subproject commit d2e07e047eb161dc7cffbc215b728d5556dae82b +Subproject commit 65c4989d08b85a821a0932e4376f2ab088f50d0c diff --git a/templates/fragments/account_nav_items.html b/templates/fragments/account_nav_items.html new file mode 100644 index 0000000..f1d9ca3 --- /dev/null +++ b/templates/fragments/account_nav_items.html @@ -0,0 +1,23 @@ +{# Account nav items: tickets + bookings links for the account dashboard #} + + diff --git a/templates/fragments/account_page_bookings.html b/templates/fragments/account_page_bookings.html new file mode 100644 index 0000000..28f8280 --- /dev/null +++ b/templates/fragments/account_page_bookings.html @@ -0,0 +1,44 @@ +
+
+ +

Bookings

+ + {% if bookings %} +
+ {% for booking in bookings %} +
+
+
+

{{ booking.name }}

+
+ {{ booking.start_at.strftime('%d %b %Y, %H:%M') }} + {% if booking.end_at %} + – {{ booking.end_at.strftime('%H:%M') }} + {% endif %} + {% if booking.calendar_name %} + · {{ booking.calendar_name }} + {% endif %} + {% if booking.cost %} + · £{{ booking.cost }} + {% endif %} +
+
+
+ {% if booking.state == 'confirmed' %} + confirmed + {% elif booking.state == 'provisional' %} + provisional + {% else %} + {{ booking.state }} + {% endif %} +
+
+
+ {% endfor %} +
+ {% else %} +

No bookings yet.

+ {% endif %} + +
+
diff --git a/templates/fragments/account_page_tickets.html b/templates/fragments/account_page_tickets.html new file mode 100644 index 0000000..69f7596 --- /dev/null +++ b/templates/fragments/account_page_tickets.html @@ -0,0 +1,44 @@ +
+
+ +

Tickets

+ + {% if tickets %} +
+ {% for ticket in tickets %} +
+
+
+ + {{ ticket.entry_name }} + +
+ {{ ticket.entry_start_at.strftime('%d %b %Y, %H:%M') }} + {% if ticket.calendar_name %} + · {{ ticket.calendar_name }} + {% endif %} + {% if ticket.ticket_type_name %} + · {{ ticket.ticket_type_name }} + {% endif %} +
+
+
+ {% if ticket.state == 'checked_in' %} + checked in + {% elif ticket.state == 'confirmed' %} + confirmed + {% else %} + {{ ticket.state }} + {% endif %} +
+
+
+ {% endfor %} +
+ {% else %} +

No tickets yet.

+ {% endif %} + +
+