Add referee assignment/eligibility system, team bulk-add, member Groups, and referee management dashboard with PDF export

Builds the referee workflow end to end: club-defined RefereeLevel/RefereeProfile
eligibility tied to teams, EventReferee assignment (member or external, with
fee/km payment tracking), an admin dashboard with KPI tiles, date-grouped game
tiles and range filters, and a downloadable payment form PDF modeled on the
club's existing paper document (using Club.legal_name when set). Also lands
team roster bulk-add, member mass-upload with family linking, and the
members.Group model, developed alongside this work.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 21:39:19 +02:00
parent 86e28c317f
commit 309bd4d83e
54 changed files with 4574 additions and 88 deletions

17
teams/services.py Normal file
View File

@@ -0,0 +1,17 @@
from django.utils import timezone
from club.models import ClubMembership, Season
from members.models import Member
def eligible_roster_members(club):
"""Members eligible to be added to a team's roster or staff: active (paid) for
the club this season or next, regardless of which season's roster/staff list is
currently being edited (the team page's season switcher can point at either)."""
today = timezone.localdate()
eligible_seasons = [season for season in (Season.covering(club, today), Season.next_after(club, today)) if season is not None]
return Member.objects.filter(
member_of__club=club,
member_of__season__in=eligible_seasons,
member_of__status=ClubMembership.StatusChoices.ACTIVE,
).distinct()