refactor(groupe instructeur): move method to Instructeur model

This commit is contained in:
Eric Leroy-Terquem 2023-02-16 16:07:05 +01:00
parent 7e97825fd2
commit d0c432d939
6 changed files with 21 additions and 26 deletions

View file

@ -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',

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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?