feat: US4.3.7.1 init manage gestionnaires of a group

This commit is contained in:
seb-by-ouidou 2023-09-28 15:45:39 +00:00
parent e79d81ed23
commit ea7a5e6761
27 changed files with 302 additions and 56 deletions

View file

@ -15,14 +15,28 @@ class GroupeGestionnaire < ApplicationRecord
gestionnaires << gestionnaire
end
def remove(gestionnaire)
return if gestionnaire.nil?
return if !in?(gestionnaire.groupe_gestionnaires)
def remove(gestionnaire_id, current_user)
if !self.root_groupe_gestionnaire? || self.gestionnaires.one?
alert = "Suppression impossible : il doit y avoir au moins un gestionnaire dans le groupe racine"
else
gestionnaire = Gestionnaire.find(gestionnaire_id)
gestionnaire.groupe_gestionnaires.destroy(self)
if gestionnaire.nil? || !in?(gestionnaire.groupe_gestionnaires) || !gestionnaire.groupe_gestionnaires.destroy(self)
alert = "Le gestionnaire « #{gestionnaire.email} » nest pas dans le groupe."
else
notice = "Le gestionnaire « #{gestionnaire.email} » a été retiré du groupe."
GroupeGestionnaireMailer
.notify_removed_gestionnaire(self, gestionnaire, current_user.email)
.deliver_later
end
end
[gestionnaire, alert, notice]
end
def add_gestionnaires(ids: [], emails: [])
def add_gestionnaires(ids: [], emails: [], current_user: nil)
emails = emails.to_json
emails = JSON.parse(emails).map { EmailSanitizableConcern::EmailSanitizer.sanitize(_1) }
gestionnaires_to_add, valid_emails, invalid_emails = Gestionnaire.find_all_by_identifier_with_emails(ids:, emails:)
not_found_emails = valid_emails - gestionnaires_to_add.map(&:email)
@ -36,9 +50,29 @@ class GroupeGestionnaire < ApplicationRecord
end
# We dont't want to assign a user to an groupe_gestionnaire if they are already assigned to it
gestionnaires_duplicate = gestionnaires_to_add & gestionnaires
gestionnaires_to_add -= gestionnaires
gestionnaires_to_add.each { add(_1) }
[gestionnaires_to_add, invalid_emails]
if invalid_emails.present?
alert = I18n.t('activerecord.wrong_address',
count: invalid_emails.size,
emails: invalid_emails)
end
if gestionnaires_duplicate.present?
alert = I18n.t('activerecord.errors.duplicate_email',
count: invalid_emails.size,
emails: gestionnaires_duplicate.map{ |gestionnaire| gestionnaire.email })
end
if gestionnaires_to_add.present?
notice = "Les gestionnaires ont bien été affectés au groupe d'administrateurs"
GroupeGestionnaireMailer
.notify_added_gestionnaires(self, gestionnaires_to_add, current_user.email)
.deliver_later
end
[gestionnaires_to_add, alert, notice]
end
end