nk20-scripts/management/commands/send_reports.py

46 lines
1.7 KiB
Python

# 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(),
).distinct().all()
for note in notes:
now = timezone.now()
last_week = now - timedelta(days=7)
last_transactions = Transaction.objects.filter(
Q(source=note) | Q(destination=note),
created_at__gte=last_week,
).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_week=last_week,
)
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)