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)