# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later from datetime import timedelta from django.core.management import BaseCommand from django.db.models import Q from django.template.loader import render_to_string from django.utils import timezone from django.utils.translation import activate from note.models import NoteUser, Transaction from note.tables import HistoryTable class Command(BaseCommand): def handle(self, *args, **options): activate('fr') notes = NoteUser.objects.filter( user__memberships__date_end__gte=timezone.now(), user__profile__report_frequency__gt=0, ).distinct().all() for note in notes: now = timezone.now() last_report = note.user.profile.last_report delta = now.date() - last_report.date() if delta.days < note.user.profile.report_frequency: continue note.user.profile.last_report = now note.user.profile.save() last_transactions = Transaction.objects.filter( Q(source=note) | Q(destination=note), created_at__gte=last_report, ).order_by("created_at").all() if not last_transactions.exists(): continue table = HistoryTable(last_transactions) incoming = sum(tr.total for tr in last_transactions if tr.destination.pk == note.pk if tr.valid) outcoming = sum(tr.total for tr in last_transactions if tr.source.pk == note.pk if tr.valid) context = dict( user=note.user, table=table, incoming=incoming, outcoming=outcoming, diff=incoming - outcoming, now=now, last_report=last_report, ) html = render_to_string("note/mails/weekly_report.html", context) note.user.email_user("[Note Kfet] Rapport de la Note Kfet", html, html_message=html)