vererbung von teams implementiert
This commit is contained in:
parent
baf9727a37
commit
ef7f93884f
@ -6,12 +6,45 @@ from django.urls import reverse_lazy
|
||||
from .models import Event, Training, Game, EventParticipation, GameResult
|
||||
from .forms import EventForm, TrainingForm, GameForm, OpenGameForm, GameResultForm
|
||||
from accounts.models import CustomUser # Import CustomUser for manage_participation view
|
||||
from clubs.models import Team
|
||||
from django.utils import timezone
|
||||
import datetime
|
||||
|
||||
def select_event_type(request):
|
||||
return render(request, 'calendars/select_event_type.html')
|
||||
|
||||
def get_all_child_teams(parent_team):
|
||||
"""
|
||||
Iteratively gets all child teams for a given team.
|
||||
"""
|
||||
children = []
|
||||
teams_to_check = list(parent_team.child_teams.all())
|
||||
while teams_to_check:
|
||||
team = teams_to_check.pop(0)
|
||||
if team not in children:
|
||||
children.append(team)
|
||||
teams_to_check.extend(list(team.child_teams.all()))
|
||||
return children
|
||||
|
||||
class ManageableTeamsMixin:
|
||||
def get_form(self, form_class=None):
|
||||
form = super().get_form(form_class)
|
||||
user = self.request.user
|
||||
if not user.is_superuser:
|
||||
coached_teams_qs = user.coached_teams.all()
|
||||
|
||||
expanded_coached_teams = list(coached_teams_qs)
|
||||
for team in coached_teams_qs:
|
||||
expanded_coached_teams.extend(get_all_child_teams(team))
|
||||
|
||||
assisted_teams_qs = user.assisted_teams.all()
|
||||
|
||||
# Combine and get unique teams
|
||||
managed_teams_ids = {team.id for team in expanded_coached_teams} | {team.id for team in assisted_teams_qs}
|
||||
|
||||
form.fields['team'].queryset = Team.objects.filter(id__in=managed_teams_ids)
|
||||
return form
|
||||
|
||||
class CoachCheckMixin(UserPassesTestMixin):
|
||||
def test_func(self):
|
||||
user = self.request.user
|
||||
@ -20,55 +53,24 @@ class CoachCheckMixin(UserPassesTestMixin):
|
||||
team = self.get_object().team
|
||||
return user == team.head_coach or user in team.assistant_coaches.all()
|
||||
|
||||
class EventCreateView(LoginRequiredMixin, CreateView):
|
||||
class EventCreateView(LoginRequiredMixin, ManageableTeamsMixin, 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):
|
||||
class TrainingCreateView(LoginRequiredMixin, ManageableTeamsMixin, 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
|
||||
print("DEBUG: "+str(user.coached_teams.all()))
|
||||
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):
|
||||
class GameCreateView(LoginRequiredMixin, ManageableTeamsMixin, 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
|
||||
template_name = 'calendars/event_form.html'
|
||||
|
||||
@ -6,6 +6,19 @@ from django.db.models import Q
|
||||
from django.utils import timezone
|
||||
import datetime
|
||||
|
||||
def get_all_child_teams(parent_team):
|
||||
"""
|
||||
Iteratively gets all child teams for a given team.
|
||||
"""
|
||||
children = []
|
||||
teams_to_check = list(parent_team.child_teams.all())
|
||||
while teams_to_check:
|
||||
team = teams_to_check.pop(0)
|
||||
if team not in children:
|
||||
children.append(team)
|
||||
teams_to_check.extend(list(team.child_teams.all()))
|
||||
return children
|
||||
|
||||
@login_required
|
||||
def dashboard(request):
|
||||
user = request.user
|
||||
@ -16,10 +29,18 @@ def dashboard(request):
|
||||
player_teams = []
|
||||
if hasattr(user, 'team') and user.team:
|
||||
player_teams = [user.team]
|
||||
coached_teams = user.coached_teams.all()
|
||||
|
||||
coached_teams_qs = user.coached_teams.all()
|
||||
|
||||
# A head coach also manages all child teams
|
||||
expanded_coached_teams = list(coached_teams_qs)
|
||||
for team in coached_teams_qs:
|
||||
expanded_coached_teams.extend(get_all_child_teams(team))
|
||||
|
||||
assisted_teams = user.assisted_teams.all()
|
||||
|
||||
from itertools import chain
|
||||
all_teams = list(set(chain(player_teams, coached_teams, assisted_teams)))
|
||||
all_teams = list(set(chain(player_teams, expanded_coached_teams, assisted_teams)))
|
||||
|
||||
now = timezone.now()
|
||||
three_hours_ago = now - datetime.timedelta(hours=3)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user