From b3db01c02e116ef2a8f4e4fe9fcfa47706987624 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Sun, 11 Oct 2020 17:10:59 +0200 Subject: [PATCH] Update the mailing list if the team name or trigram got updated --- apps/participation/apps.py | 5 +++-- apps/participation/models.py | 1 + apps/participation/signals.py | 17 ++++++++++++++++- apps/registration/signals.py | 6 +++--- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/apps/participation/apps.py b/apps/participation/apps.py index 7a61c31..ce11f56 100644 --- a/apps/participation/apps.py +++ b/apps/participation/apps.py @@ -1,10 +1,11 @@ from django.apps import AppConfig -from django.db.models.signals import post_save +from django.db.models.signals import post_save, pre_save class ParticipationConfig(AppConfig): name = 'participation' def ready(self): - from participation.signals import create_team_participation + from participation.signals import create_team_participation, update_mailing_list + pre_save.connect(update_mailing_list, "participation.Team") post_save.connect(create_team_participation, "participation.Team") diff --git a/apps/participation/models.py b/apps/participation/models.py index a251885..920894a 100644 --- a/apps/participation/models.py +++ b/apps/participation/models.py @@ -53,6 +53,7 @@ class Team(models.Model): if not self.access_code: self.access_code = get_random_string(6) self.create_mailing_list() + return super().save(*args, **kwargs) def __str__(self): diff --git a/apps/participation/signals.py b/apps/participation/signals.py index 2f8f222..e178de0 100644 --- a/apps/participation/signals.py +++ b/apps/participation/signals.py @@ -1,4 +1,5 @@ -from participation.models import Participation, Video +from corres2math.lists import get_sympa_client +from participation.models import Participation, Team, Video def create_team_participation(instance, **_): @@ -8,3 +9,17 @@ def create_team_participation(instance, **_): if not participation.synthesis: participation.synthesis = Video.objects.create() participation.save() + + +def update_mailing_list(instance: Team, **_): + if instance.pk: + old_team = Team.objects.get(pk=instance.pk) + if old_team.name != instance.name or old_team.trigram != instance.trigram: + old_team.delete_mailing_list() + instance.create_mailing_list() + for student in instance.students.all(): + get_sympa_client().subscribe(student.user.email, f"equipe-{instance.trigram.lower()}", False, + f"{student.user.first_name} {student.user.last_name}") + for coach in instance.coachs.all(): + get_sympa_client().subscribe(coach.user.email, f"equipe-{instance.trigram.lower()}", False, + f"{coach.user.first_name} {coach.user.last_name}") diff --git a/apps/registration/signals.py b/apps/registration/signals.py index 6f24a67..7a8857d 100644 --- a/apps/registration/signals.py +++ b/apps/registration/signals.py @@ -18,9 +18,9 @@ def send_email_link(instance, **_): registration.user = instance registration.send_email_validation_link() - if registration.team: - get_sympa_client().unsubscribe(old_instance.email, f"equipe-{registration.team.trigram}", False) - get_sympa_client().subscribe(instance.email, f"equipe-{registration.team.trigram}", False, + if registration.participates and registration.team: + get_sympa_client().unsubscribe(old_instance.email, f"equipe-{registration.team.trigram.lower()}", False) + get_sympa_client().subscribe(instance.email, f"equipe-{registration.team.trigram.lower()}", False, f"{instance.first_name} {instance.last_name}")