from django.views.generic import TemplateView, DetailView, View from django.contrib.auth.mixins import LoginRequiredMixin from django.shortcuts import get_object_or_404, render from django.http import JsonResponse, HttpResponseRedirect from django.urls import reverse from .models import Event, Activity from equipment.models import EquipmentAttribution class Index(TemplateView): template_name = "event/index.html" class EventCalendar(LoginRequiredMixin, DetailView): model = Event template_name = 'event/calendar.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) event = self.object context['activities'] = (Activity.objects.filter(event=event) .order_by('beginning').prefetch_related( 'tags', 'places', 'staff', 'parent')) return context class EventView(LoginRequiredMixin, DetailView): model = Event template_name = 'event/event.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) event = self.object context['activities'] = (Activity.objects.filter(event=event) .order_by('beginning').prefetch_related( 'tags', 'places', 'staff', 'parent')) return context class ActivityView(LoginRequiredMixin, DetailView): model = Activity template_name = 'event/activity.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) activity = self.object context['attributions'] = (EquipmentAttribution.objects .filter(activity=activity) .prefetch_related('equipment')) return context class EnrolActivityView(LoginRequiredMixin, View): http_method_names = ['post'] def post(self, request, pk, *args, **kwargs): activity = get_object_or_404(Activity, id=pk) action = request.POST.get("goal", None) success = True if action == "enrol": activity.staff.add(request.user) elif action == "unenrol": activity.staff.remove(request.user) else: success = False if "ajax" in request.GET: if request.GET["ajax"] == "json": enrols = activity.staff return JsonResponse({ "enrolled": enrols.filter(id=request.user.id).exists(), "number": enrols.count(), }) return render(request, "event/activity_summary.html", {"activity": activity}) return HttpResponseRedirect(reverse("event:activity", kwargs={"pk":pk}))