Sending receipts.
authorRadek Czajka <rczajka@rczajka.pl>
Wed, 3 Mar 2021 09:46:39 +0000 (10:46 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Wed, 3 Mar 2021 09:46:39 +0000 (10:46 +0100)
src/club/management/commands/send_receipts.py
src/club/models.py
src/club/templates/club/receipt.texml

index e461b68..bbe1209 100644 (file)
@@ -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)
index 665f5ba..db5fde8 100644 (file)
@@ -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()
index 4cfef28..30a2faf 100644 (file)
@@ -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:} & ]]><TeXML escape="1">text_x+x-{{ email }}</TeXML><![CDATA[
+  \textbf{adres e-mail:} & ]]><TeXML escape="1">{{ email }}</TeXML><![CDATA[
 \end{longtable}
 
 {\Large \textbf{Dane identyfikujące Obdarowanego:}}