Files
friend-event-rsvp/events/views/views.py
T
kennyboy55 b1cf2deda1 Refactor RSVP flow and add new Event page
- Removed old activity detail, RSVP guest add, and questions partial templates.
- Introduced new RSVP page structure with separate templates for email, guest, activities, questions, and notes.
- Implemented new RSVP management views including start, update, decline, and restart functionalities.
- Enhanced cookie management for RSVP sessions.
- Added summary utilities for email, guests, activities, questions, and notes.
- Updated URL patterns to accommodate new RSVP flow.
- Improved context handling in RSVP views.
2026-03-25 10:54:24 +01:00

103 lines
2.7 KiB
Python

# views.py
import logging
from django.shortcuts import get_object_or_404, redirect, render
from django.http import Http404, HttpResponseBadRequest, HttpRequest
from django.urls import reverse
from events.utils.cookieutils import get_rsvp_from_cookie, set_rsvp_cookie
from events.utils.rsvputils import create_rsvp
from ..models import (
Event,
Invite,
Activity,
RSVP,
)
# Logger
logger = logging.getLogger(__name__)
def invite_redirect(request:HttpRequest, slug, code):
"""
Redirect from the unique invite page
to the rsvp response page which is linked to the response
"""
event = get_object_or_404(Event, slug=slug)
response = redirect(reverse('events:event', args=[slug]))
logger.info(f"Invite `{code}` opened for Event `{slug}`")
rsvp:RSVP
try:
invite = get_object_or_404(Invite, code=code)
# The invite code does not match the event
if invite.event.id != event.id:
return HttpResponseBadRequest()
rsvp = RSVP.objects.get(invite=invite)
set_rsvp_cookie(response, event, rsvp)
except Http404 as e:
logger.debug(str(e))
pass
except RSVP.DoesNotExist as e:
logger.debug(str(e))
rsvp = create_rsvp(event, invite)
set_rsvp_cookie(response, event, rsvp)
return response
def event(request:HttpRequest, slug):
event = get_object_or_404(Event, slug=slug)
activities = (
Activity.objects
.filter(event=event)
.select_related("group")
.order_by("start_time")
)
groups = {}
ungrouped = []
for activity in activities:
if activity.group:
groups.setdefault(activity.group, []).append(activity)
else:
ungrouped.append(activity)
context = {
"event": event,
"groups": groups,
"ungrouped_activities": ungrouped,
}
response = False
rsvp = get_rsvp_from_cookie(request, slug)
if type(rsvp) is RSVP:
joining = True if rsvp.status == RSVP.Status.YES_JOINING else False
not_coming = True if rsvp.status == RSVP.Status.NOT_COMING else False
in_progress = True if rsvp.status == RSVP.Status.INCOMPLETE else False
not_started = True if rsvp.status == RSVP.Status.NOT_STARTED else False
response = {
"rsvp": rsvp,
"joining": joining,
"not_coming": not_coming,
"in_progress": in_progress,
"not_started": not_started
}
context["response"] = response
return render(request, "event/event.html", context)