X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/1a6ad5b9b48a5efa90410fd324c256f59f57e08f..801a05d2ff33bb8a3c1a46ea0c657825b2787fa7:/src/club/templatetags/club.py diff --git a/src/club/templatetags/club.py b/src/club/templatetags/club.py index 7e8bc038c..92fb5ca0b 100644 --- a/src/club/templatetags/club.py +++ b/src/club/templatetags/club.py @@ -1,6 +1,7 @@ # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from datetime import timedelta from django.db.models import Sum from django import template from django.utils.timezone import now @@ -16,11 +17,69 @@ def active_schedule(user): return get_active_schedule(user) +@register.simple_tag +def club_count_recurring(): + return Schedule.objects.exclude(monthly=False, yearly=False).filter(expires_at__gt=now()).count() + @register.simple_tag def club_active_monthly_count(): - return Schedule.objects.filter(expires_at__gt=now(), monthly=True, is_cancelled=False).count() + return Schedule.objects.filter( + expires_at__gt=now(), + monthly=True, + is_cancelled=False + ).count() @register.simple_tag def club_active_monthly_sum(): - return Schedule.objects.filter(expires_at__gt=now(), monthly=True, is_cancelled=False).aggregate(s=Sum('amount'))['s'] + return Schedule.objects.filter( + expires_at__gt=now(), + monthly=True, + is_cancelled=False + ).aggregate(s=Sum('amount'))['s'] or 0 + +@register.simple_tag +def club_active_yearly_count(): + return Schedule.objects.filter( + expires_at__gt=now(), + yearly=True, + is_cancelled=False + ).count() + +@register.simple_tag +def club_active_yearly_sum(): + return Schedule.objects.filter( + expires_at__gt=now(), + yearly=True, + is_cancelled=False + ).aggregate(s=Sum('amount'))['s'] or 0 + +@register.simple_tag +def club_active_30day_count(): + return Schedule.objects.filter( + yearly=False, monthly=False, + payed_at__gte=now() - timedelta(days=30) + ).count() + +@register.simple_tag +def club_active_30day_sum(): + return Schedule.objects.filter( + yearly=False, monthly=False, + payed_at__gte=now() - timedelta(days=30) + ).aggregate(s=Sum('amount'))['s'] or 0 + + +@register.simple_tag +def club_monthly_since(start): + return Schedule.objects.filter( + monthly=True, payed_at__gte=start).count() + + +@register.simple_tag +def club_monthly_missing_since(start, target): + return target - Schedule.objects.filter( + monthly=True, payed_at__gte=start).count() + +@register.simple_tag(takes_context=True) +def invite_payment(context, payment_method, schedule): + return payment_method.invite_widget(schedule, context['request'])