diff --git a/tournaments/admin.py b/tournaments/admin.py index 9b19ac0..25ee57c 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -12,7 +12,7 @@ from django.contrib.auth.forms import UserCreationForm, UserChangeForm from .forms import CustomUserCreationForm, CustomUserChangeForm -from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter +from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter class CustomUserAdmin(UserAdmin): @@ -48,7 +48,7 @@ class EventAdmin(admin.ModelAdmin): class TournamentAdmin(admin.ModelAdmin): list_display = ['display_name', 'event', 'is_private', 'start_date', 'payment', 'creator'] - list_filter = ['is_deleted', 'event__creator'] + list_filter = [StartDateRangeFilter, 'is_deleted', 'event__creator'] ordering = ['-start_date'] search_fields = ['id'] diff --git a/tournaments/filters.py b/tournaments/filters.py index 167915f..1b841e6 100644 --- a/tournaments/filters.py +++ b/tournaments/filters.py @@ -2,6 +2,8 @@ from django.contrib import admin from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall from django.db.models import Q from django.utils.translation import gettext_lazy as _ +from django.utils import timezone +from datetime import timedelta import uuid from enum import Enum @@ -101,3 +103,36 @@ class SimpleIndexListFilter(admin.SimpleListFilter): return queryset.filter(index=self.value()) else: return queryset + +class StartDateRangeFilter(admin.SimpleListFilter): + title = 'tournament time range' # displayed in the admin UI + parameter_name = 'date_range' # URL parameter + + def lookups(self, request, model_admin): + return ( + ('upcoming', 'Next 30 days'), + ('recent', 'Last 30 days'), + ('current', 'Current (±3 days)'), + ) + + def queryset(self, request, queryset): + if not self.value(): + return queryset + + today = timezone.now().date() + + if self.value() == 'upcoming': + return queryset.filter( + start_date__gte=today, + start_date__lte=today + timedelta(days=30) + ) + elif self.value() == 'recent': + return queryset.filter( + start_date__gte=today - timedelta(days=30), + start_date__lte=today + ) + elif self.value() == 'current': + return queryset.filter( + start_date__gte=today - timedelta(days=3), + start_date__lte=today + timedelta(days=3) + )