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')