From 59a39ffd49844ad86b8d9e748778d7db45de0e71 Mon Sep 17 00:00:00 2001 From: Laurent Date: Sat, 18 Oct 2025 14:30:48 +0200 Subject: [PATCH] Adds round index filter for TeamScore --- tournaments/admin.py | 4 ++-- tournaments/filters.py | 27 ++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/tournaments/admin.py b/tournaments/admin.py index c7511c8..837b4b2 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -13,7 +13,7 @@ from biz.models import Prospect, ProspectGroup from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall, Log, DeviceToken, DrawLog, UnregisteredTeam, UnregisteredPlayer, Image from .forms import CustomUserCreationForm, CustomUserChangeForm -from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter, UserWithEventsFilter, UserWithPurchasesFilter, UserWithProspectFilter +from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter, UserWithEventsFilter, UserWithPurchasesFilter, UserWithProspectFilter, TeamScoreRoundIndexFilter from sync.admin import SyncedObjectAdmin import logging @@ -365,7 +365,7 @@ class TeamRegistrationAdmin(SyncedObjectAdmin): class TeamScoreAdmin(SyncedObjectAdmin): list_display = ['team_registration', 'score', 'walk_out', 'match'] - list_filter = [TeamScoreTournamentListFilter] + list_filter = [TeamScoreRoundIndexFilter, TeamScoreTournamentListFilter] search_fields = ['id', 'team_registration__player_registrations__first_name', 'team_registration__player_registrations__last_name'] raw_id_fields = ['team_registration', 'match'] list_per_page = 50 # Controls pagination on the list view diff --git a/tournaments/filters.py b/tournaments/filters.py index f55cfbb..416ea0b 100644 --- a/tournaments/filters.py +++ b/tournaments/filters.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Tournament, Match +from .models import Tournament, Match, Round from django.db.models import Q, Count from django.utils.translation import gettext_lazy as _ from django.utils import timezone @@ -189,3 +189,28 @@ class UserWithProspectFilter(admin.SimpleListFilter): prospect_emails = Prospect.objects.values_list('email', flat=True).filter(email__isnull=False) return queryset.exclude(email__in=prospect_emails) return queryset + +class TeamScoreRoundIndexFilter(admin.SimpleListFilter): + title = _("Round Index") + parameter_name = "round_index" + + def lookups(self, request, model_admin): + # Get distinct round indexes from matches that have team scores + round_indexes = Round.objects.filter( + matches__team_scores__isnull=False + ).values_list('index', flat=True).distinct().order_by('index') + + # Create lookup tuples with round names + lookups = [] + for index in round_indexes: + round_obj = Round.objects.filter(index=index, parent__isnull=True).first() + if round_obj: + lookups.append((index, round_obj.name())) + else: + lookups.append((index, f"Index {index}")) + return lookups + + def queryset(self, request, queryset): + if self.value(): + return queryset.filter(match__round__index=self.value()) + return queryset