From c4be3c9ce23232610f03a16ae4b42d37cdbe3811 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 17 Sep 2025 17:23:05 +0200 Subject: [PATCH] add filter for user with/without purchases --- tournaments/admin.py | 4 ++-- tournaments/filters.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/tournaments/admin.py b/tournaments/admin.py index c6926b0..6cd3369 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -11,7 +11,7 @@ from datetime import datetime, timedelta # Add this import 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 +from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter, UserWithEventsFilter, UserWithPurchasesFilter from sync.admin import SyncedObjectAdmin @@ -23,7 +23,7 @@ class CustomUserAdmin(UserAdmin): filter_horizontal = ('clubs',) list_display = ['email', 'first_name', 'last_name', 'username', 'date_joined', 'latest_event_club_name', 'is_active', 'event_count', 'origin', 'registration_payment_mode', 'licence_id'] - list_filter = ['is_active', 'origin', UserWithEventsFilter] + list_filter = ['is_active', 'origin', UserWithEventsFilter, UserWithPurchasesFilter] ordering = ['-date_joined'] raw_id_fields = ['agents'] fieldsets = [ diff --git a/tournaments/filters.py b/tournaments/filters.py index aa1e8af..c75e49b 100644 --- a/tournaments/filters.py +++ b/tournaments/filters.py @@ -152,3 +152,20 @@ class UserWithEventsFilter(admin.SimpleListFilter): elif self.value() == 'no': return queryset.annotate(events_count=Count('events')).filter(events_count=0) return queryset + +class UserWithPurchasesFilter(admin.SimpleListFilter): + title = _('has purchases') + parameter_name = 'has_purchases' + + def lookups(self, request, model_admin): + return ( + ('yes', _('Has purchases')), + ('no', _('No purchases')), + ) + + def queryset(self, request, queryset): + if self.value() == 'yes': + return queryset.annotate(purchases_count=Count('purchases')).filter(purchases_count__gt=0) + elif self.value() == 'no': + return queryset.annotate(purchases_count=Count('purchases')).filter(purchases_count=0) + return queryset