diff --git a/aidants_connect_web/admin.py b/aidants_connect_web/admin.py index f287a2a47..0e0ade9f2 100644 --- a/aidants_connect_web/admin.py +++ b/aidants_connect_web/admin.py @@ -803,6 +803,7 @@ def __validate_from_email_post(self, request): status__in=( HabilitationRequest.STATUS_PROCESSING, HabilitationRequest.STATUS_NEW, + HabilitationRequest.STATUS_VALIDATED, ) ) treated_emails = set() @@ -818,14 +819,39 @@ def __validate_from_email_post(self, request): return HttpResponseRedirect( reverse("otpadmin:aidants_connect_web_habilitationrequest_changelist") ) + ignored_emails = email_list - treated_emails context["treated_emails"] = treated_emails - context["ignored_emails"] = email_list - treated_emails + context["ignored_emails"] = ignored_emails + context.update(self.__extract_more_precise_errors(ignored_emails)) return render( request, "aidants_connect_web/admin/habilitation_request/mass-habilitation.html", context, ) + def __extract_more_precise_errors(self, ignored_emails): + existing_emails = set( + HabilitationRequest.objects.filter(email__in=ignored_emails).values_list( + "email", flat=True + ) + ) + non_existing_emails = set(ignored_emails - existing_emails) + already_refused_emails = set( + HabilitationRequest.objects.filter( + email__in=existing_emails, + status__in=( + HabilitationRequest.STATUS_REFUSED, + HabilitationRequest.STATUS_CANCELLED, + ), + ).values_list("email", flat=True) + ) + undefined_error_emails = existing_emails - already_refused_emails + return { + "non_existing_emails": non_existing_emails, + "already_refused_emails": already_refused_emails, + "undefined_error_emails": undefined_error_emails, + } + class UsagerAutorisationInline(VisibleToTechAdmin, NestedTabularInline): model = Autorisation diff --git a/aidants_connect_web/models.py b/aidants_connect_web/models.py index 6664cafa5..b093015ab 100644 --- a/aidants_connect_web/models.py +++ b/aidants_connect_web/models.py @@ -533,18 +533,25 @@ class Meta: def __str__(self): return f"{self.email}" + @transaction.atomic def validate_and_create_aidant(self): - if self.status not in (self.STATUS_PROCESSING, self.STATUS_NEW): + if self.status not in ( + self.STATUS_PROCESSING, + self.STATUS_NEW, + self.STATUS_VALIDATED, + ): return False if Aidant.objects.filter(username=self.email).count() > 0: - aidant = Aidant.objects.get(username=self.email) + aidant: Aidant = Aidant.objects.get(username=self.email) aidant.organisations.add(self.organisation) + aidant.is_active = True + aidant.save() self.status = self.STATUS_VALIDATED self.save() return True - aidant = Aidant( + aidant = Aidant.objects.create( last_name=self.last_name, first_name=self.first_name, profession=self.profession, @@ -553,7 +560,6 @@ def validate_and_create_aidant(self): username=self.email, ) self.status = self.STATUS_VALIDATED - aidant.save() self.save() return True diff --git a/aidants_connect_web/templates/aidants_connect_web/admin/habilitation_request/mass-habilitation.html b/aidants_connect_web/templates/aidants_connect_web/admin/habilitation_request/mass-habilitation.html index b98ae5ec3..24a927ab0 100644 --- a/aidants_connect_web/templates/aidants_connect_web/admin/habilitation_request/mass-habilitation.html +++ b/aidants_connect_web/templates/aidants_connect_web/admin/habilitation_request/mass-habilitation.html @@ -23,14 +23,56 @@

Habilitation en masse à partir des adresses e-mail

{% if ignored_emails %}
{% blocktranslate count counter=ignored_emails|length %} - Nous n'avons pas pu traiter l'adress e-mail suivante : aucune demande - ne correspond, ou alors elle a déjà été annulée ou validée. + Une adresse e-mail a été ignorée. Veuillez retrouver le détail ci-dessous. {% plural %} - Nous n'avons pas pu traiter les {{ counter }} e-mails suivants : aucune demande ne correspond, - ou alors elles ont déjà été validées/annulées. + {{ counter }} adresses e-mails ont été ignorées. Veuillez retrouver le détail + ci-dessous. {% endblocktranslate %} +
+ {% endif %} + {% if non_existing_emails %} +
+ {% blocktranslate count counter=non_existing_emails|length %} + Nous n'avons trouvé aucun aidant à former portant l'e-mail suivant : aucun compte + aidant n'a été créé. + {% plural %} + Nous n'avons trouvé aucun aidant à former pour les {{ counter }} e-mails suivants : + aucun compte aidant n'a été créé. + {% endblocktranslate %} + +
+ {% endif %} + {% if already_refused_emails %} +
+ {% blocktranslate count counter=already_refused_emails|length %} + Il existe bien un aidant à former portant l'adresse e-mail suivante, mais + la demande était déjà annulée ou refusée : aucun compte aidant n'a été créé. + {% plural %} + Il existe bien des aidants à former portant les adresses e-mail suivantes, mais + les demandes étaient déjà annulée ou refusée : aucun compte aidant n'a été créé. + {% endblocktranslate %} + +
+ {% endif %} + {% if undefined_error_emails %} +
+ {% blocktranslate count counter=undefined_error_emails|length %} + Une erreur indéterminée s'est produite pour l'adresse mail suivante, + {% plural %} + Une erreur indéterminée s'est produite pour les adresses mails suivantes, + {% endblocktranslate %} + parlez-en à quelqu'un(e) de l'équipe technique pour voir ce qui aurait pu la causer.
+ Aucun compte aidant n'a été créé. @@ -38,7 +80,7 @@

Habilitation en masse à partir des adresses e-mail

{% endif %} {% if treated_emails %}
-

Les demandes suivantes ont été validées, les comptes aidant ont été créés :

+

Les demandes suivantes ont été validées, les comptes aidant ont été créés et/ou activés :