2021-02-23 23:26:25 +01:00
|
|
|
"""
|
|
|
|
Gestion en ligne de commande des mails de rappel K-Fet.
|
|
|
|
"""
|
|
|
|
|
|
|
|
from datetime import timedelta
|
|
|
|
|
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from django.utils import timezone
|
|
|
|
|
|
|
|
from kfet.models import AccountNegative
|
|
|
|
|
|
|
|
|
|
|
|
class Command(BaseCommand):
|
|
|
|
help = (
|
|
|
|
"Envoie un mail de rappel aux personnes en négatif.\n"
|
|
|
|
"Envoie un mail au bout de 24h, puis un mail par semaine."
|
|
|
|
)
|
|
|
|
leave_locale_alone = True
|
|
|
|
|
|
|
|
def handle(self, *args, **options):
|
|
|
|
now = timezone.now()
|
2021-12-18 18:06:27 +01:00
|
|
|
|
|
|
|
# Le premier mail est envoyé après 24h de négatif, puis toutes les semaines
|
2021-02-23 23:26:25 +01:00
|
|
|
first_delay = timedelta(days=1)
|
|
|
|
periodic_delay = timedelta(weeks=1)
|
2021-12-18 18:06:27 +01:00
|
|
|
|
|
|
|
# On n'envoie des mails qu'aux comptes qui ont un négatif vraiment actif
|
|
|
|
# et dont la balance est négative
|
2023-05-22 18:23:50 +02:00
|
|
|
# On ignore les comptes gelés qui signinfient une adresse mail plus valide
|
2021-12-18 18:06:27 +01:00
|
|
|
account_negatives = AccountNegative.objects.filter(
|
2023-05-22 18:23:50 +02:00
|
|
|
account__balance__lt=0, account__is_frozen=False
|
2021-12-18 18:06:27 +01:00
|
|
|
).exclude(end__lte=now)
|
|
|
|
|
|
|
|
accounts_first_mail = account_negatives.filter(
|
|
|
|
start__lt=now - first_delay, last_rappel__isnull=True
|
2021-02-23 23:26:25 +01:00
|
|
|
)
|
2021-12-18 18:06:27 +01:00
|
|
|
accounts_periodic_mail = account_negatives.filter(
|
2022-01-11 18:03:16 +01:00
|
|
|
last_rappel__lt=now - periodic_delay
|
2021-02-23 23:26:25 +01:00
|
|
|
)
|
2021-12-18 18:06:27 +01:00
|
|
|
|
2021-10-22 22:36:30 +02:00
|
|
|
for neg in accounts_first_mail:
|
|
|
|
neg.send_rappel()
|
|
|
|
self.stdout.write(f"Mail de rappel pour {neg.account} envoyé avec succès.")
|
2021-12-18 18:06:27 +01:00
|
|
|
|
2021-10-22 22:36:30 +02:00
|
|
|
for neg in accounts_periodic_mail:
|
|
|
|
neg.send_rappel()
|
2023-05-22 18:26:24 +02:00
|
|
|
self.stdout.write(f"Mail de rappel pour {neg.account} envoyé avec succès.")
|
2021-12-18 18:06:27 +01:00
|
|
|
|
|
|
|
if not (accounts_first_mail.exists() or accounts_periodic_mail.exists()):
|
2021-02-23 23:26:25 +01:00
|
|
|
self.stdout.write("Aucun mail à envoyer.")
|