diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index b701254eb..fa15e549a 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -111,7 +111,7 @@ module Administrateurs emails = params['emails'].presence || [].to_json emails = JSON.parse(emails).map { EmailSanitizableConcern::EmailSanitizer.sanitize(_1) } - instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(emails:) + instructeurs, invalid_emails = Instructeur.find_or_create_instructeurs(emails:, administrateurs: procedure.administrateurs) if invalid_emails.present? flash[:alert] = t('.wrong_address', diff --git a/app/graphql/mutations/groupe_instructeur_ajouter_instructeurs.rb b/app/graphql/mutations/groupe_instructeur_ajouter_instructeurs.rb index c536667ef..9b9d20a3a 100644 --- a/app/graphql/mutations/groupe_instructeur_ajouter_instructeurs.rb +++ b/app/graphql/mutations/groupe_instructeur_ajouter_instructeurs.rb @@ -11,7 +11,7 @@ module Mutations def resolve(groupe_instructeur:, instructeurs:) ids, emails = partition_instructeurs_by(instructeurs) - instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(ids:, emails:) + instructeurs, invalid_emails = Instructeur.find_or_create_instructeurs(ids:, emails:, administrateurs: groupe_instructeur.procedure.administrateurs) instructeurs.each { groupe_instructeur.add(_1) } groupe_instructeur.reload diff --git a/app/graphql/mutations/groupe_instructeur_creer.rb b/app/graphql/mutations/groupe_instructeur_creer.rb index d7a0a6331..5880580a4 100644 --- a/app/graphql/mutations/groupe_instructeur_creer.rb +++ b/app/graphql/mutations/groupe_instructeur_creer.rb @@ -29,7 +29,7 @@ module Mutations result = { groupe_instructeur: } if emails.present? || ids.present? - instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(ids:, emails:) + instructeurs, invalid_emails = Instructeur.find_or_create_instructeurs(ids:, emails:, administrateurs: procedure.administrateurs) instructeurs.each { groupe_instructeur.add(_1) } groupe_instructeur.reload diff --git a/app/models/groupe_instructeur.rb b/app/models/groupe_instructeur.rb index 30efb9956..f512226bf 100644 --- a/app/models/groupe_instructeur.rb +++ b/app/models/groupe_instructeur.rb @@ -51,25 +51,6 @@ class GroupeInstructeur < ApplicationRecord .update_all(unfollowed_at: Time.zone.now) end - def add_instructeurs(ids: [], emails: []) - instructeurs_to_add, valid_emails, invalid_emails = Instructeur.find_all_by_identifier_with_emails(ids:, emails:) - not_found_emails = valid_emails - instructeurs_to_add.map(&:email) - - # Send invitations to users without account - if not_found_emails.present? - instructeurs_to_add += not_found_emails.map do |email| - user = User.create_or_promote_to_instructeur(email, SecureRandom.hex, administrateurs: procedure.administrateurs) - user.invite! - user.instructeur - end - end - - # We dont't want to assign a user to a groupe_instructeur if they are already assigned to it - instructeurs_to_add -= instructeurs - - [instructeurs_to_add, invalid_emails] - end - def can_delete? dossiers.empty? && (procedure.groupe_instructeurs.active.many? || (procedure.groupe_instructeurs.active.one? && closed)) end diff --git a/app/models/instructeur.rb b/app/models/instructeur.rb index ac2ee5a29..e68bf3497 100644 --- a/app/models/instructeur.rb +++ b/app/models/instructeur.rb @@ -52,6 +52,22 @@ class Instructeur < ApplicationRecord find_by(users: { email: email }) end + def self.find_or_create_instructeurs(ids: [], emails: [], administrateurs:) + instructeurs_to_add, valid_emails, invalid_emails = Instructeur.find_all_by_identifier_with_emails(ids:, emails:) + not_found_emails = valid_emails - instructeurs_to_add.map(&:email) + + # Send invitations to users without account + if not_found_emails.present? + instructeurs_to_add += not_found_emails.map do |email| + user = User.create_or_promote_to_instructeur(email, SecureRandom.hex, administrateurs: administrateurs) + user.invite! + user.instructeur + end + end + + [instructeurs_to_add, invalid_emails] + end + def self.find_all_by_identifier(ids: [], emails: []) find_all_by_identifier_with_emails(ids:, emails:).first end diff --git a/app/services/instructeurs_import_service.rb b/app/services/instructeurs_import_service.rb index a8606040b..c82d635d9 100644 --- a/app/services/instructeurs_import_service.rb +++ b/app/services/instructeurs_import_service.rb @@ -18,11 +18,9 @@ class InstructeursImportService target_groupes = procedure.reload.groupe_instructeurs - defaut_groupe_instructeur = procedure.defaut_groupe_instructeur - instructeurs_emails = groupes_emails.map { |instructeur_email| instructeur_email["email"] }.uniq - instructeurs, invalid_emails = defaut_groupe_instructeur.add_instructeurs(emails: instructeurs_emails) + instructeurs, invalid_emails = Instructeur.find_or_create_instructeurs(emails: instructeurs_emails, administrateurs: procedure.administrateurs) if instructeurs.present? groupes_emails.each do |groupe_email| @@ -41,7 +39,7 @@ class InstructeursImportService groupe_instructeur = procedure.defaut_groupe_instructeur - instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(emails: instructeurs_emails) + instructeurs, invalid_emails = Instructeur.find_or_create_instructeurs(emails: instructeurs_emails, administrateurs: procedure.administrateurs) instructeurs.each { groupe_instructeur.add(_1) } if instructeurs.present?