From 76fc352ac3bff8e6ca2de8b05ac7120090415f33 Mon Sep 17 00:00:00 2001 From: kennyboy55 Date: Wed, 1 Apr 2026 12:52:19 +0200 Subject: [PATCH] Update RSVP buttons to reflect current status --- events/models.py | 12 ++++++++++++ events/static/css/styles.css | 11 +++++++++++ events/templates/rsvp/rsvp.html | 20 +------------------- events/templates/rsvp/rsvp_buttons.html | 25 +++++++++++++++++++++++++ events/templates/rsvp/rsvp_pages.html | 4 +++- events/views/rsvp.py | 9 +++++++++ 6 files changed, 61 insertions(+), 20 deletions(-) create mode 100644 events/templates/rsvp/rsvp_buttons.html diff --git a/events/models.py b/events/models.py index 8f0b68a..2e06cb6 100644 --- a/events/models.py +++ b/events/models.py @@ -409,6 +409,18 @@ class RSVP(TimestampedModel): return new_page + @property + def has_previous_page(self) -> bool: + return self.page not in (self.Page.EMAIL) + + @property + def has_next_page(self) -> bool: + return self.page not in (self.Page.NOTES, self.Page.COMPLETED) + + @property + def is_finished(self) -> bool: + return self.status in (self.Status.YES_JOINING) + def is_page_finished(self, page: Page) -> bool: """return `True` if page is previous to the furthest reached page""" return is_previous_page(page, self.Page(self.furthest_page)) diff --git a/events/static/css/styles.css b/events/static/css/styles.css index 5007a80..a1c2579 100644 --- a/events/static/css/styles.css +++ b/events/static/css/styles.css @@ -326,4 +326,15 @@ button { .hidden { display: none; +} + +.sticky-button-row { + position: sticky; + bottom: 0; +} + +.sticky-button-row .button { + box-shadow: 0px 0px 30px 2px rgba(0,0,0,0.49); + -webkit-box-shadow: 0px 0px 30px 2px rgba(0,0,0,0.49); + -moz-box-shadow: 0px 0px 30px 2px rgba(0,0,0,0.49); } \ No newline at end of file diff --git a/events/templates/rsvp/rsvp.html b/events/templates/rsvp/rsvp.html index cdedfcd..1cade37 100644 --- a/events/templates/rsvp/rsvp.html +++ b/events/templates/rsvp/rsvp.html @@ -24,26 +24,8 @@ hx-trigger="load"> -
+
- Previous - - Next - -
{% endif %} diff --git a/events/templates/rsvp/rsvp_buttons.html b/events/templates/rsvp/rsvp_buttons.html new file mode 100644 index 0000000..566d395 --- /dev/null +++ b/events/templates/rsvp/rsvp_buttons.html @@ -0,0 +1,25 @@ +
+ + {% if rsvp.has_previous_page %} + Previous + {% endif %} + + {% if rsvp.has_next_page %}Next{% else %}Finish{% endif %} + +
+ + Not coming + + {% if rsvp.has_next_page %} + Back to event + {% endif %} +
+
\ No newline at end of file diff --git a/events/templates/rsvp/rsvp_pages.html b/events/templates/rsvp/rsvp_pages.html index 1c36675..02b7526 100644 --- a/events/templates/rsvp/rsvp_pages.html +++ b/events/templates/rsvp/rsvp_pages.html @@ -6,4 +6,6 @@ {{ page_questions }} -{{ page_notes }} \ No newline at end of file +{{ page_notes }} + +{{ buttons }} \ No newline at end of file diff --git a/events/views/rsvp.py b/events/views/rsvp.py index 6359b24..a0f6569 100644 --- a/events/views/rsvp.py +++ b/events/views/rsvp.py @@ -131,6 +131,7 @@ def rsvp_pages(request, rid: str, page: str, error: str = ""): "page_activities": _render_page_activities(request, context, page), "page_questions": _render_page_questions(request, context, page), "page_notes": _render_page_notes(request, context, page), + "buttons": _render_buttons(request, context, page), } response = render(request, "rsvp/rsvp_pages.html", rendercontent) @@ -320,6 +321,14 @@ def _render_page( return True, template.render(context=context, request=request) +def _render_buttons(request, context, page) -> str: + + add_to_context(context, "page", page) + + template = get_template("rsvp/rsvp_buttons.html") + return template.render(context=context, request=request) + + # Change the page of the request def page_change(request, rid: str, page: str): logger.debug("page_change: id=%s, page=%s", rid, page)