From 10168de3cd16cf9ab5b597d8f700c2902b159cbe Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 17 Sep 2025 17:30:50 +0200 Subject: [PATCH] adds filter for user that have or dont have a prospect with the same email --- tournaments/admin.py | 4 ++-- tournaments/filters.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/tournaments/admin.py b/tournaments/admin.py index 6cd3369..5161543 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, UserWithPurchasesFilter +from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter, UserWithEventsFilter, UserWithPurchasesFilter, UserWithProspectFilter 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, UserWithPurchasesFilter] + list_filter = ['is_active', 'origin', UserWithEventsFilter, UserWithPurchasesFilter, UserWithProspectFilter] ordering = ['-date_joined'] raw_id_fields = ['agents'] fieldsets = [ diff --git a/tournaments/filters.py b/tournaments/filters.py index c75e49b..f55cfbb 100644 --- a/tournaments/filters.py +++ b/tournaments/filters.py @@ -169,3 +169,23 @@ class UserWithPurchasesFilter(admin.SimpleListFilter): elif self.value() == 'no': return queryset.annotate(purchases_count=Count('purchases')).filter(purchases_count=0) return queryset + +class UserWithProspectFilter(admin.SimpleListFilter): + title = _('has prospect') + parameter_name = 'has_prospect' + + def lookups(self, request, model_admin): + return ( + ('yes', _('Has prospect')), + ('no', _('No prospect')), + ) + + def queryset(self, request, queryset): + from biz.models import Prospect + if self.value() == 'yes': + prospect_emails = Prospect.objects.values_list('email', flat=True).filter(email__isnull=False) + return queryset.filter(email__in=prospect_emails) + elif self.value() == 'no': + prospect_emails = Prospect.objects.values_list('email', flat=True).filter(email__isnull=False) + return queryset.exclude(email__in=prospect_emails) + return queryset