76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
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}))
|