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