From c55fe40db04b7f3b4a0f1325d245d6e37f65bd5e Mon Sep 17 00:00:00 2001 From: Artur Borecki Date: Tue, 17 Mar 2026 12:08:07 +0100 Subject: [PATCH] feat(views.py): adapt views after for EventOccurrences --- kursy/views.py | 109 ++++++++++++++++++++++++++++++------------------- 1 file changed, 68 insertions(+), 41 deletions(-) diff --git a/kursy/views.py b/kursy/views.py index d3390a7..292edb4 100644 --- a/kursy/views.py +++ b/kursy/views.py @@ -1,10 +1,11 @@ from django import urls from django.contrib.auth.decorators import login_required from django.http import JsonResponse -from django.shortcuts import render, redirect +from django.shortcuts import redirect, render + +from home.models import EventOccurrence, EventPage from .forms import SignUpForm -from home.models import EventPage def signup(request): @@ -28,70 +29,96 @@ def calendar(request): return render(request, "calendar.html") -def get_calendar_events(request): - # get events from database (EventPage model) - - start = request.GET.get("start") - end = request.GET.get("end") - events = ( - EventPage.objects.live() - .values("id", "title", "start", "end", "color", "tags") - .filter(start__gte=start, end__lte=end) +def occurrence_detail(request, occurrence_id): + occ = ( + EventOccurrence.objects.select_related("event").filter(id=occurrence_id).first() + ) + if not occ: + return redirect("calendar") + event = occ.event.specific + return render( + request, + "occurrence_detail.html", + { + "occurrence": occ, + "event": event, + "user_signed_up": occ.user_signed_up(request.user), + }, ) - # to json - events_list = list(events) - # add page url to each event - for event in events_list: - event_page = EventPage.objects.live().filter(title=event["title"]).first() - if event_page: - event["url"] = event_page.url - if event_page.is_past: - event["color"] = "#666666" +def get_calendar_occurrences(request): + # get occurrences from database (EventOccurrence model) + start = request.GET.get("start") + end = request.GET.get("end") + occurrences = EventOccurrence.objects.filter( + start__gte=start, end__lte=end + ).select_related("event") + + events_list = [] + for occ in occurrences: + event = occ.event.specific + events_list.append( + { + "id": occ.id, + "event_id": event.id, + "title": event.title, + "start": occ.start, + "end": occ.end, + "location": event.location, + "url": event.url, + "color": "#666666" if occ.is_past else event.color, + "tags": list(event.tags.values_list("name", flat=True)), + } + ) return JsonResponse(events_list, safe=False) -def get_calendar_event(request, event_id): - event = EventPage.objects.live().filter(id=event_id).first() - if not event: - return JsonResponse({"error": "Event not found"}, status=404) - +def get_calendar_occurrence(request, occurrence_id): + occ = ( + EventOccurrence.objects.select_related("event").filter(id=occurrence_id).first() + ) + if not occ: + return JsonResponse({"error": "Occurrence not found"}, status=404) + event = occ.event.specific event_dict = { - "id": event.id, + "id": occ.id, + "event_id": event.id, "title": event.title, - "start": event.start, - "end": event.end, + "start": occ.start, + "end": occ.end, "location": event.location, "url": event.url, - "color": event.color, + "color": "#666666" if occ.is_past else event.color, "tags": list(event.tags.values_list("name", flat=True)), + "attendees_count": occ.attendees_count, } - return JsonResponse(event_dict) -def event_signup(request, event_id): +def occurrence_signup(request, occurrence_id): if not request.user.is_authenticated: return redirect("login") - event = EventPage.objects.live().filter(id=event_id).first() - if not event: + occ = EventOccurrence.objects.filter(id=occurrence_id).first() + if not occ: return redirect("calendar") - event.signed_up_users.add(request.user) - # redirect to calendar page with ?modal=event_id to show modal with event details - return redirect(urls.reverse("calendar") + f"?modal={event_id}") + occ.signed_up_users.add(request.user) + occ.save() + # redirect to calendar page with ?modal=occurrence_id to show modal with event details + return redirect(urls.reverse("calendar") + f"?modal={occurrence_id}") -def event_signout(request, event_id): +def occurrence_signout(request, occurrence_id): if not request.user.is_authenticated: return redirect("login") - event = EventPage.objects.live().filter(id=event_id).first() - if not event: + occ = EventOccurrence.objects.filter(id=occurrence_id).first() + if not occ: return redirect("calendar") - event.signed_up_users.remove(request.user) - return redirect(urls.reverse("calendar") + f"?modal={event_id}") + occ.signed_up_users.remove(request.user) + occ.save() + return redirect(urls.reverse("calendar") + f"?modal={occurrence_id}")