From 053cfdf3a95d7de4e89064f91ba71ada4b06a462 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 24 Oct 2023 11:12:41 +0200 Subject: [PATCH] Gift cards: Allow to sort by most recent transaction --- src/pretix/control/forms/filter.py | 2 ++ .../templates/pretixcontrol/organizers/giftcards.html | 4 ++++ src/pretix/control/views/organizer.py | 6 +++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index 9f022ed5a..471d56c22 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -1304,6 +1304,8 @@ class GiftCardFilterForm(FilterForm): 'issuance': 'issuance', 'expires': F('expires').asc(nulls_last=True), '-expires': F('expires').desc(nulls_first=True), + 'last_tx': F('last_tx').asc(nulls_first=True), + '-last_tx': F('last_tx').desc(nulls_last=True), 'secret': 'secret', 'value': 'cached_value', } diff --git a/src/pretix/control/templates/pretixcontrol/organizers/giftcards.html b/src/pretix/control/templates/pretixcontrol/organizers/giftcards.html index 7e5438e71..186c01dc1 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/giftcards.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/giftcards.html @@ -62,6 +62,9 @@ {% trans "Expiry date" %} + {% trans "Last transaction" %} + + {% trans "Current value" %} @@ -83,6 +86,7 @@ {{ g.issuance|date:"SHORT_DATETIME_FORMAT" }} {% if g.expires %}{{ g.expires|date:"SHORT_DATETIME_FORMAT" }}{% endif %} + {% if g.last_tx %}{{ g.last_tx|date:"SHORT_DATETIME_FORMAT" }}{% endif %} {{ g.cached_value|money:g.currency }} diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index 233e8fdc9..d6e3fd2b4 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -1435,8 +1435,12 @@ class GiftCardListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi s = GiftCardTransaction.objects.filter( card=OuterRef('pk') ).order_by().values('card').annotate(s=Sum('value')).values('s') + s_last_tx = GiftCardTransaction.objects.filter( + card=OuterRef('pk') + ).order_by().values('card').annotate(m=Max('datetime')).values('m') qs = self.request.organizer.issued_gift_cards.annotate( - cached_value=Coalesce(Subquery(s), Decimal('0.00')) + cached_value=Coalesce(Subquery(s), Decimal('0.00')), + last_tx=Subquery(s_last_tx), ).order_by('-issuance') if self.filter_form.is_valid(): qs = self.filter_form.filter_qs(qs)