94 lines
3.5 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.contrib.auth.decorators import login_required
from django.urls import reverse_lazy
from .models import Event, Training, Game, EventParticipation
from .forms import EventForm, TrainingForm, GameForm
from accounts.models import CustomUser # Import CustomUser for manage_participation view
def select_event_type(request):
return render(request, 'calendars/select_event_type.html')
class CoachCheckMixin(UserPassesTestMixin):
def test_func(self):
user = self.request.user
if user.is_superuser:
return True
team = self.get_object().team
return user == team.head_coach or user in team.assistant_coaches.all()
class EventCreateView(LoginRequiredMixin, CreateView):
model = Event
form_class = EventForm
template_name = 'calendars/event_form.html'
success_url = reverse_lazy('dashboard')
def get_form(self, form_class=None):
form = super().get_form(form_class)
user = self.request.user
if not user.is_superuser:
coached_teams = user.coached_teams.all()
assisted_teams = user.assisted_teams.all()
teams = coached_teams | assisted_teams
form.fields['team'].queryset = teams
return form
class TrainingCreateView(LoginRequiredMixin, CreateView):
model = Training
form_class = TrainingForm
template_name = 'calendars/event_form.html'
success_url = reverse_lazy('dashboard')
def get_form(self, form_class=None):
form = super().get_form(form_class)
user = self.request.user
if not user.is_superuser:
coached_teams = user.coached_teams.all()
assisted_teams = user.assisted_teams.all()
teams = coached_teams | assisted_teams
form.fields['team'].queryset = teams
return form
class GameCreateView(LoginRequiredMixin, CreateView):
model = Game
form_class = GameForm
template_name = 'calendars/event_form.html'
success_url = reverse_lazy('dashboard')
def get_form(self, form_class=None):
form = super().get_form(form_class)
user = self.request.user
if not user.is_superuser:
coached_teams = user.coached_teams.all()
assisted_teams = user.assisted_teams.all()
teams = coached_teams | assisted_teams
form.fields['team'].queryset = teams
return form
class EventUpdateView(LoginRequiredMixin, CoachCheckMixin, UpdateView):
model = Event
form_class = EventForm
template_name = 'calendars/event_form.html'
success_url = reverse_lazy('dashboard')
class EventDeleteView(LoginRequiredMixin, CoachCheckMixin, DeleteView):
model = Event
template_name = 'calendars/event_confirm_delete.html'
success_url = reverse_lazy('dashboard')
@login_required
def manage_participation(request, child_id, event_id, status):
child = get_object_or_404(CustomUser, id=child_id)
event = get_object_or_404(Event, id=event_id)
# Check if the logged-in user is a parent of the child
if request.user not in child.parents.all():
# Handle unauthorized access
return redirect('dashboard')
participation, created = EventParticipation.objects.get_or_create(user=child, event=event)
participation.status = status
participation.save()
return redirect('dashboard')