From 3b6b5d7d78c28fb9ffdadcdadb727e4274feb6c2 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Wed, 3 Mar 2021 10:46:39 +0100 Subject: [PATCH] Sending receipts. --- src/club/management/commands/send_receipts.py | 31 +++++++++++++++++-- src/club/models.py | 28 +++++++++++++++-- src/club/templates/club/receipt.texml | 4 +-- 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/src/club/management/commands/send_receipts.py b/src/club/management/commands/send_receipts.py index e461b6854..bbe120973 100644 --- a/src/club/management/commands/send_receipts.py +++ b/src/club/management/commands/send_receipts.py @@ -6,11 +6,38 @@ import traceback from django.core.management.base import BaseCommand, CommandError from django.utils.timezone import now from club.models import PayUOrder +from funding.models import Funding class Command(BaseCommand): + def add_arguments(self, parser): + parser.add_argument( + 'year', type=int, metavar='YEAR', + help='Send receipts for the year.') + parser.add_argument( + '--emails', + help='Send only to these emails.') + def handle(self, *args, **options): - year = 2019 - for email in PayUOrder.objects.filter(completed_at__year=2019).order_by('schedule__email').values_list('schedule__email', flat=True).distinct(): + year = options['year'] + emails = set( + PayUOrder.objects.filter( + completed_at__year=year + ).order_by('schedule__email').values_list( + 'schedule__email', flat=True + ).distinct() + ) + emails.update( + Funding.objects.exclude(email='').filter( + payed_at__year=year + ).order_by('email').values_list( + 'email', flat=True + ).distinct() + ) + + if options['emails']: + emails = options['emails'].split(',') + + for email in emails: print(email) PayUOrder.send_receipt(email, year) diff --git a/src/club/models.py b/src/club/models.py index 665f5ba61..db5fde857 100644 --- a/src/club/models.py +++ b/src/club/models.py @@ -261,14 +261,36 @@ class PayUOrder(payu_models.Order): @classmethod def send_receipt(cls, email, year): + Funding = apps.get_model('funding', 'Funding') + payments = [] + qs = cls.objects.filter(status='COMPLETED', schedule__email=email, completed_at__year=year).order_by('completed_at') - if not qs.exists(): return + for order in qs: + payments.append({ + 'timestamp': order.completed_at, + 'amount': order.get_amount(), + }) + + fundings = Funding.objects.filter( + email=email, + payed_at__year=year + ).order_by('payed_at') + for funding in fundings: + payments.append({ + 'timestamp': funding.payed_at, + 'amount': funding.amount, + }) + + if not payments: return + + payments.sort(key=lambda x: x['timestamp']) + ctx = { "email": email, "year": year, "next_year": year + 1, - "total": qs.aggregate(s=models.Sum('schedule__amount'))['s'], - "orders": qs, + "total": sum(x['amount'] for x in payments), + "payments": payments, } temp = tempfile.NamedTemporaryFile(prefix='receipt-', suffix='.pdf', delete=False) temp.close() diff --git a/src/club/templates/club/receipt.texml b/src/club/templates/club/receipt.texml index 4cfef286f..30a2faff8 100644 --- a/src/club/templates/club/receipt.texml +++ b/src/club/templates/club/receipt.texml @@ -45,7 +45,7 @@ rachunek płatniczy, darowizn pieniężnych w~łącznej kwocie {{ total }} zł. \hline \textbf{Data} & \textbf{Darowizna} \\ \hline - {% for obj in orders %}{{ obj.completed_at.date }} & {{ obj.get_amount }} zł \\ + {% for payment in payments %}{{ payment.timestamp.date }} & {{ payment.amount }} zł \\ {% endfor %} \hline \end{longtable} @@ -63,7 +63,7 @@ organizacji pożytku publicznego. {\Large \textbf{Dane identyfikujące Darczyńcę:}} \begin{longtable}{ r l } - \textbf{adres e-mail:} & ]]>text_x+x-{{ email }}{{ email }}