- 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.
103 lines
2.7 KiB
Python
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) |