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)
@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()
\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}
{\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:}}