Fix last paid sorting

Bug #105. Rendering needs better formatting.
This commit is contained in:
Aarni Halinen
2018-03-02 02:40:42 +02:00
parent a1b85b3c6c
commit 17e6bb86ed
+16 -2
View File
@@ -2,15 +2,16 @@
import django_tables2 as tables
from django.utils.translation import ugettext as _
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import F, OuterRef, Subquery
from members.models import Member, Payment, Request
from django.db.models import F
class MemberTable(tables.Table):
"""Table for member."""
last_paid = tables.DateTimeColumn(verbose_name=_('Last paid'), order_by='payments.date')
last_paid = tables.DateTimeColumn(verbose_name=_('Last paid'))
options = tables.TemplateColumn(
('<a class="data-table-button btn btn-primary" '
@@ -25,6 +26,19 @@ class MemberTable(tables.Table):
model = Member
def render_last_paid(self, record):
try:
return record.payments.filter(member=record).latest('date').date.strftime('%e.%m.%Y %H:%M')
except ObjectDoesNotExist:
return record.created.strftime('%e.%m.%Y %H:%M') + _(" (not paid)")
def order_last_paid(self, queryset, is_descending):
latest = Payment.objects.filter(member=OuterRef('pk')).order_by('-date')
queryset = queryset.annotate(last_paid=Subquery(latest.values('date')[:1])
).order_by(('-' if is_descending else '') + 'last_paid')
return (queryset, True)
class PaymentTable(tables.Table):
"""Table for payments."""