diff --git a/counter/management/commands/dump_warning_mail.py b/counter/management/commands/dump_warning_mail.py index 2b8fbfdd..9b966494 100644 --- a/counter/management/commands/dump_warning_mail.py +++ b/counter/management/commands/dump_warning_mail.py @@ -1,4 +1,5 @@ import logging +import time from smtplib import SMTPException from django.conf import settings @@ -25,9 +26,34 @@ class Command(BaseCommand): self.logger.setLevel(logging.INFO) super().__init__(*args, **kwargs) + def add_arguments(self, parser): + parser.add_argument( + "--dry-run", + action="store_true", + help="Do not send the mails, just display the number of users concerned", + ) + parser.add_argument( + "-d", + "--delay", + type=float, + default=0, + help="Delay in seconds between each mail sent", + ) + def handle(self, *args, **options): - users = list(self._get_users()) + users: list[User] = list(self._get_users()) self.stdout.write(f"{len(users)} users will be warned of their account dump") + if options["verbosity"] > 1: + self.stdout.write("Users concerned:\n") + self.stdout.write( + "\n".join( + f" - {user.get_display_name()} ({user.email}) : " + f"{user.customer.amount} €" + for user in users + ) + ) + if options["dry_run"]: + return dumps = [] for user in users: is_success = self._send_mail(user) @@ -38,6 +64,10 @@ class Command(BaseCommand): warning_mail_error=not is_success, ) ) + if options["delay"]: + # avoid spamming the mail server too much + time.sleep(options["delay"]) + AccountDump.objects.bulk_create(dumps) self.stdout.write("Finished !") diff --git a/counter/templates/counter/account_dump_warning_mail.jinja b/counter/templates/counter/account_dump_warning_mail.jinja index 1d7dc8ed..b1374fc0 100644 --- a/counter/templates/counter/account_dump_warning_mail.jinja +++ b/counter/templates/counter/account_dump_warning_mail.jinja @@ -1,43 +1,40 @@ -

- Bonjour, -

+{% trans %}Hello{% endtrans %}, -

- {%- trans date=last_subscription_date|date(DATETIME_FORMAT) -%} - You received this email because your last subscription to the - Students' association ended on {{ date }}. - {%- endtrans -%} -

+{% trans trimmed date=last_subscription_date|date(DATETIME_FORMAT) -%} + You received this email because your last subscription to the + Students' association ended on {{ date }}. +{%- endtrans %} -

- {%- trans date=dump_date|date(DATETIME_FORMAT), amount=balance -%} - In accordance with the Internal Regulations, the balance of any - inactive AE account for more than 2 years automatically goes back - to the AE. - The money present on your account will therefore be recovered in full - on {{ date }}, for a total of {{ amount }} €. - {%- endtrans -%} -

+{% trans trimmed date=dump_date|date(DATETIME_FORMAT), amount=balance -%} + In accordance with the Internal Regulations, the balance of any + inactive AE account for more than 2 years automatically goes back + to the AE. + The money present on your account will therefore be recovered in full + on {{ date }}, for a total of {{ amount }} €. +{%- endtrans %} -

- {%- trans -%}However, if your subscription is renewed by this date, - your right to keep the money in your AE account will be renewed.{%- endtrans -%} -

+{% trans trimmed -%} + However, if your subscription is renewed by this date, + your right to keep the money in your AE account will be renewed. +{%- endtrans %} -{% if balance >= 10 %} -

- {%- trans -%}You can also request a refund by sending an email to - ae@utbm.fr - before the aforementioned date.{%- endtrans -%} -

-{% endif %} +{% if balance >= 10 -%} + {% trans trimmed -%} + You can also request a refund by sending an email to ae@utbm.fr + before the aforementioned date. + {%- endtrans %} +{%- endif %} -

- {% trans %}Sincerely{% endtrans %}, -

+{% trans trimmed -%} + Whatever you decide, you won't be expelled from the association, + and you won't lose your rights. + You will always be able to renew your subscription later. + If you don't renew your subscription, there will be no consequences + other than the loss of the money currently in your AE account. +{%- endtrans %} -

- L'association des étudiants de l'UTBM
- 6, Boulevard Anatole France
- 90000 Belfort -

+{% trans %}Sincerely{% endtrans %}, + +L'association des étudiants de l'UTBM +6, Boulevard Anatole France +90000 Belfort diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index e548dfba..71d08fe5 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-16 01:51+0200\n" +"POT-Creation-Date: 2024-10-20 12:42+0200\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Maréchal \n" @@ -3629,7 +3629,7 @@ msgstr "Produit parent" msgid "Buying groups" msgstr "Groupes d'achat" -#: counter/management/commands/dump_warning_mail.py:82 +#: counter/management/commands/dump_warning_mail.py:113 msgid "Clearing of your AE account" msgstr "Vidange de votre compte AE" @@ -3883,48 +3883,61 @@ msgstr "uid" msgid "student cards" msgstr "cartes étudiante" -#: counter/templates/counter/account_dump_warning_mail.jinja:6 +#: counter/templates/counter/account_dump_warning_mail.jinja:1 +msgid "Hello" +msgstr "Bonjour" + +#: counter/templates/counter/account_dump_warning_mail.jinja:3 #, python-format msgid "" -"You received this email because your last subscription to the\n" -" Students' association ended on %(date)s." +"You received this email because your last subscription to the Students' " +"association ended on %(date)s." msgstr "" "Vous recevez ce mail car votre dernière cotisation à l'assocation des " "étudiants de l'UTBM s'est achevée le %(date)s." -#: counter/templates/counter/account_dump_warning_mail.jinja:11 +#: counter/templates/counter/account_dump_warning_mail.jinja:6 #, python-format msgid "" -"In accordance with the Internal Regulations, the balance of any\n" -" inactive AE account for more than 2 years automatically goes back\n" -" to the AE.\n" -" The money present on your account will therefore be recovered in full\n" -" on %(date)s, for a total of %(amount)s €." +"In accordance with the Internal Regulations, the balance of any inactive AE " +"account for more than 2 years automatically goes back to the AE. The money " +"present on your account will therefore be recovered in full on %(date)s, for " +"a total of %(amount)s €." msgstr "" "Conformément au Règlement intérieur, le solde de tout compte AE inactif " "depuis plus de 2 ans revient de droit à l'AE. L'argent présent sur votre " "compte sera donc récupéré en totalité le %(date)s, pour un total de " "%(amount)s €. " -#: counter/templates/counter/account_dump_warning_mail.jinja:19 +#: counter/templates/counter/account_dump_warning_mail.jinja:12 msgid "" -"However, if your subscription is renewed by this date,\n" -" your right to keep the money in your AE account will be renewed." +"However, if your subscription is renewed by this date, your right to keep " +"the money in your AE account will be renewed." msgstr "" "Cependant, si votre cotisation est renouvelée d'ici cette date, votre droit " "à conserver l'argent de votre compte AE sera renouvelé." -#: counter/templates/counter/account_dump_warning_mail.jinja:25 +#: counter/templates/counter/account_dump_warning_mail.jinja:16 msgid "" -"You can also request a refund by sending an email to\n" -" ae@utbm.fr\n" -" before the aforementioned date." +"You can also request a refund by sending an email to ae@utbm.fr before the " +"aforementioned date." msgstr "" "Vous pouvez également effectuer une demande de remboursement par mail à " -"l'adresse ae@utbm.fr avant la date " -"susmentionnée." +"l'adresse ae@utbm.fr avant la date susmentionnée." -#: counter/templates/counter/account_dump_warning_mail.jinja:32 +#: counter/templates/counter/account_dump_warning_mail.jinja:20 +msgid "" +"Whatever you decide, you won't be expelled from the association, and you " +"won't lose your rights. You will always be able to renew your subscription " +"later. If you don't renew your subscription, there will be no consequences " +"other than the loss of the money currently in your AE account." +msgstr "" +"Quel que soit votre décision, vous ne serez pas exclu.e de l'association " +"et vous ne perdrez pas vos droits. Vous serez toujours en mesure de renouveler " +"votre cotisation. Si vous ne renouvelez pas votre cotisation, il n'y aura " +"aucune conséquence autre que le retrait de l'argent de votre compte." + +#: counter/templates/counter/account_dump_warning_mail.jinja:26 msgid "Sincerely" msgstr "Cordialement" @@ -3997,7 +4010,7 @@ msgstr "Ce n'est pas un UID de carte étudiante valide" #: counter/templates/counter/invoices_call.jinja:16 #: launderette/templates/launderette/launderette_admin.jinja:35 #: launderette/templates/launderette/launderette_click.jinja:13 -#: sas/templates/sas/picture.jinja:167 +#: sas/templates/sas/picture.jinja:166 #: subscription/templates/subscription/stats.jinja:20 msgid "Go" msgstr "Valider" @@ -5384,7 +5397,7 @@ msgstr "Image précédente" msgid "People" msgstr "Personne(s)" -#: sas/templates/sas/picture.jinja:165 +#: sas/templates/sas/picture.jinja:164 msgid "Identify users on pictures" msgstr "Identifiez les utilisateurs sur les photos"