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