From e35e264d81e68466dd31de04cf516539aebe06de Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 3 Mar 2018 11:58:59 +0100 Subject: [PATCH] Improve voucher redemption filter (#792) --- src/pretix/base/models/vouchers.py | 2 +- src/pretix/control/forms/filter.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/models/vouchers.py b/src/pretix/base/models/vouchers.py index 390c6d8390..ced25aa823 100644 --- a/src/pretix/base/models/vouchers.py +++ b/src/pretix/base/models/vouchers.py @@ -42,7 +42,7 @@ class Voucher(LoggedModel): :param max_usages: The number of times this voucher can be redeemed :type max_usages: int :param redeemed: The number of times this voucher already has been redeemed - :type redeemed: bool + :type redeemed: int :param valid_until: The expiration date of this voucher (optional) :type valid_until: datetime :param block_quota: If set to true, this voucher will reserve quota for its holder diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index b165c55bdc..5f1d108a68 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -606,7 +606,9 @@ class VoucherFilterForm(FilterForm): choices=( ('', _('All')), ('v', _('Valid')), - ('r', _('Redeemed')), + ('u', _('Unredeemed')), + ('r', _('Redeemed at least once')), + ('f', _('Fully redeemed')), ('e', _('Expired')), ('c', _('Redeemed and checked in with ticket')), ), @@ -701,9 +703,13 @@ class VoucherFilterForm(FilterForm): if fdata.get('status'): s = fdata.get('status') if s == 'v': - qs = qs.filter(Q(valid_until__isnull=True) | Q(valid_until__gt=now())).filter(redeemed=0) + qs = qs.filter(Q(valid_until__isnull=True) | Q(valid_until__gt=now())).filter(redeemed__lt=F('max_usages')) elif s == 'r': qs = qs.filter(redeemed__gt=0) + elif s == 'u': + qs = qs.filter(redeemed=0) + elif s == 'f': + qs = qs.filter(redeemed__gte=F('max_usages')) elif s == 'e': qs = qs.filter(Q(valid_until__isnull=False) & Q(valid_until__lt=now())).filter(redeemed=0) elif s == 'c':