From 30e79991759b2d512e397a61d0e3a3e8ca40ae17 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Tue, 14 Apr 2020 16:29:24 +0200 Subject: [PATCH] Fixes #4023: nicer club schedule filtering. --- src/club/admin.py | 18 +++++++++++++++++- src/wolnelektury/utils.py | 19 +++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/club/admin.py b/src/club/admin.py index 24884f160..79b76cf21 100644 --- a/src/club/admin.py +++ b/src/club/admin.py @@ -3,9 +3,13 @@ # import json from django.contrib import admin +from django.db.models.functions import Now +from django.db.models import Q from django.utils.html import conditional_escape from django.utils.safestring import mark_safe +from django.utils.translation import gettext_lazy as _ from modeltranslation.admin import TranslationAdmin +from wolnelektury.utils import YesNoFilter from . import models @@ -37,10 +41,22 @@ class PayUCardTokenInline(admin.TabularInline): return False +class PayedFilter(YesNoFilter): + title = _('payment complete') + parameter_name = 'payed' + q = ~Q(payed_at=None) + + +class ExpiredFilter(YesNoFilter): + title = _('schedule expired') + parameter_name = 'expired' + q = Q(expires_at__isnull=False, expires_at__lt=Now()) + + class ScheduleAdmin(admin.ModelAdmin): list_display = ['email', 'started_at', 'payed_at', 'expires_at', 'amount', 'monthly', 'yearly', 'is_cancelled'] search_fields = ['email'] - list_filter = ['is_cancelled'] + list_filter = ['is_cancelled', 'monthly', 'yearly', PayedFilter, ExpiredFilter] date_hierarchy = 'started_at' raw_id_fields = ['membership'] inlines = [PayUOrderInline, PayUCardTokenInline] diff --git a/src/wolnelektury/utils.py b/src/wolnelektury/utils.py index 15319a11a..c994149f6 100644 --- a/src/wolnelektury/utils.py +++ b/src/wolnelektury/utils.py @@ -12,6 +12,7 @@ import pytz import re from django.conf import settings +from django.contrib import admin from django.core.cache import cache from django.core.mail import send_mail from django.http import HttpResponse @@ -20,7 +21,7 @@ from django.utils import timezone from django.utils.translation import get_language from django.conf import settings from django.utils.safestring import mark_safe -from django.utils.translation import ugettext +from django.utils.translation import gettext as _ tz = pytz.timezone(settings.TIME_ZONE) @@ -119,7 +120,7 @@ def ajax(login_required=False, method=None, template=None, permission_required=N def send_noreply_mail(subject, message, recipient_list, **kwargs): send_mail( '[WolneLektury] ' + subject, - message + "\n\n-- \n" + ugettext('Message sent automatically. Please do not reply.'), + message + "\n\n-- \n" + _('Message sent automatically. Please do not reply.'), 'no-reply@wolnelektury.pl', recipient_list, **kwargs) @@ -196,3 +197,17 @@ def clear_cached_renders(bound_method): lc ) ) + + +class YesNoFilter(admin.SimpleListFilter): + def lookups(self, request, model_admin): + return ( + ('yes', _('Yes')), + ('no', _('No')), + ) + + def queryset(self, request, queryset): + if self.value() == 'yes': + return queryset.filter(self.q) + elif self.value() == 'no': + return queryset.exclude(self.q) -- 2.20.1