From 10932d1cc50809c4646498b378401267c40cf4dd Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Sat, 14 Nov 2020 22:18:35 +0100 Subject: [PATCH] Create more mailing lists --- .../management/commands/fix_sympa_lists.py | 39 +++++++++++++++++++ apps/participation/models.py | 11 ++++++ apps/participation/views.py | 5 +++ 3 files changed, 55 insertions(+) create mode 100644 apps/participation/management/commands/fix_sympa_lists.py diff --git a/apps/participation/management/commands/fix_sympa_lists.py b/apps/participation/management/commands/fix_sympa_lists.py new file mode 100644 index 0000000..f558a8a --- /dev/null +++ b/apps/participation/management/commands/fix_sympa_lists.py @@ -0,0 +1,39 @@ +from django.db.models import Q + +from corres2math.lists import get_sympa_client +from django.core.management import BaseCommand +from participation.models import Team +from registration.models import CoachRegistration, StudentRegistration + + +class Command(BaseCommand): + def handle(self, *args, **options): + """ + Create Sympa mailing lists and register teams. + """ + sympa = get_sympa_client() + + sympa.create_list("equipes", "Équipes des Correspondances", "hotline", + "Liste de diffusion pour contacter toutes les équipes validées des Correspondances.", + "education", raise_error=False) + sympa.create_list("equipes-non-valides", "Équipes des Correspondances", "hotline", + "Liste de diffusion pour contacter toutes les équipes non-validées des Correspondances.", + "education", raise_error=False) + + for problem in range(1, 4): + sympa.create_list(f"probleme-{problem}", + f"Équipes des Correspondances participant au problème {problem}", "hotline", + f"Liste de diffusion pour contacter les équipes participant au problème {problem}" + f" des Correspondances.", "education", raise_error=False) + + for team in Team.objects.filter(participation__valid=True).all(): + sympa.subscribe(team.email, "equipes", f"Equipe {team.name}", True, True) + sympa.subscribe(team.email, f"probleme-{team.participation.problem}", f"Equipe {team.name}", True) + + for team in Team.objects.filter(Q(participation__valid=False) | Q(participation__valid__isnull=True)).all(): + sympa.subscribe(team.email, "equipes-non-valides", f"Equipe {team.name}", True) + + for student in StudentRegistration.objects.filter(team__isnull=False).all(): + sympa.subscribe(student.user.email, f"equipe-{student.team.trigram.lower}", True, f"{student}") + for coach in CoachRegistration.objects.filter(team__isnull=False).all(): + sympa.subscribe(coach.user.email, f"equipe-{coach.team.trigram.lower}", True, f"{coach}") diff --git a/apps/participation/models.py b/apps/participation/models.py index 8b6af3e..3c64a7e 100644 --- a/apps/participation/models.py +++ b/apps/participation/models.py @@ -65,11 +65,22 @@ class Team(models.Model): "education", raise_error=False, ) + if self.participation.valid: + get_sympa_client().subscribe(self.email, "equipes", False, f"Equipe {self.name}") + get_sympa_client().subscribe(self.email, f"probleme-{self.participation.problem}", False, + f"Equipe {self.name}") + else: + get_sympa_client().subscribe(self.email, "equipes-non-valides", False) def delete_mailing_list(self): """ Drop the Sympa mailing list, if the team is empty or if the trigram changed. """ + if self.participation.valid: + get_sympa_client().unsubscribe(self.email, "equipes", False) + get_sympa_client().unsubscribe(self.email, f"probleme-{self.participation.problem}", False) + else: + get_sympa_client().unsubscribe(self.email, "equipes-non-valides", False) get_sympa_client().delete_list(f"equipe-{self.trigram}") def save(self, *args, **kwargs): diff --git a/apps/participation/views.py b/apps/participation/views.py index de74762..f83a37b 100644 --- a/apps/participation/views.py +++ b/apps/participation/views.py @@ -223,6 +223,11 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView) mail_plain = render_to_string("participation/mails/team_validated.txt", mail_context) mail_html = render_to_string("participation/mails/team_validated.html", mail_context) send_mail("[Corres2math] Équipe validée", mail_plain, None, [self.object.email], html_message=mail_html) + + get_sympa_client().subscribe(self.object.email, "equipes", False, f"Equipe {self.object.name}") + get_sympa_client().unsubscribe(self.object.email, "equipes-non-valides", False) + get_sympa_client().subscribe(self.object.email, f"probleme-{self.object.participation.problem}", False, + f"Equipe {self.object.name}") elif "invalidate" in self.request.POST: self.object.participation.valid = None self.object.participation.save()