68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
"""File containing member application django tables."""
|
|
|
|
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
|
|
|
|
|
|
class MemberTable(tables.Table):
|
|
"""Table for member."""
|
|
|
|
last_paid = tables.DateTimeColumn(verbose_name=_('Last paid'))
|
|
|
|
options = tables.TemplateColumn(
|
|
('<a class="data-table-button btn btn-primary" '
|
|
'href="/members/edit/{{ record.id }}">') + _('Edit') + '</a>', verbose_name=""
|
|
)
|
|
|
|
class Meta:
|
|
"""Meta for member 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."""
|
|
|
|
member = tables.Column(accessor='member', verbose_name=_('Member'))
|
|
|
|
options = tables.TemplateColumn(
|
|
('<a class="data-table-button btn btn-primary" '
|
|
'href="/members/edit_payment/{{ record.id }}">') + _('Edit') + '</a>',
|
|
verbose_name=""
|
|
)
|
|
|
|
class Meta:
|
|
"""Meta for payment table."""
|
|
|
|
model = Payment
|
|
|
|
|
|
class RequestTable(tables.Table):
|
|
"""Table for member applications."""
|
|
|
|
options = tables.TemplateColumn(
|
|
('<a class="data-table-button btn btn-primary" '
|
|
'href="/members/edit_application/{{ record.id }}">') + _('Edit') + '</a>',
|
|
verbose_name=""
|
|
)
|
|
|
|
class Meta:
|
|
"""Meta for request table."""
|
|
|
|
model = Request
|