modify service
This commit is contained in:
parent
99d00c00ce
commit
6353104ecb
1 changed files with 29 additions and 14 deletions
|
@ -1,24 +1,39 @@
|
|||
class InstructeursImportService
|
||||
def import(procedure, groupes_emails)
|
||||
def self.import(procedure, groupes_emails)
|
||||
created_at = Time.zone.now
|
||||
updated_at = Time.zone.now
|
||||
|
||||
admins = procedure.administrateurs
|
||||
|
||||
errors = []
|
||||
groupes_emails, error_groupe_emails = groupes_emails
|
||||
.map { |groupe_email| { "groupe" => groupe_email["groupe"].strip, "email" => groupe_email["email"].gsub(/[[:space:]]/, '').downcase } }
|
||||
.partition { |groupe_email| Devise.email_regexp.match?(groupe_email['email']) && groupe_email['groupe'].present? }
|
||||
|
||||
groupes_emails.each do |groupe_emails|
|
||||
groupe = groupe_emails["groupe"].strip
|
||||
instructeur_email = groupe_emails["email"].strip.downcase
|
||||
errors = error_groupe_emails.map { |group_email| group_email['email'] }
|
||||
|
||||
if groupe.present? && Devise.email_regexp.match?(instructeur_email)
|
||||
gi = procedure.groupe_instructeurs.find_or_create_by!(label: groupe)
|
||||
target_labels = groupes_emails.map { |groupe_email| groupe_email['groupe'] }.uniq
|
||||
missing_labels = target_labels - procedure.groupe_instructeurs.pluck(:label)
|
||||
|
||||
instructeur = Instructeur.by_email(instructeur_email) || create_instructeur(admins, instructeur_email)
|
||||
if missing_labels.present?
|
||||
GroupeInstructeur.insert_all(missing_labels.map { |label| { label: label, procedure_id: procedure.id, created_at: created_at, updated_at: updated_at } })
|
||||
end
|
||||
|
||||
if !gi.instructeurs.include?(instructeur)
|
||||
gi.instructeurs << instructeur
|
||||
target_groupes = procedure.reload.groupe_instructeurs
|
||||
|
||||
end
|
||||
else
|
||||
errors << instructeur_email
|
||||
target_emails = groupes_emails.map { |groupe_email| groupe_email["email"] }.uniq
|
||||
|
||||
existing_emails = Instructeur.where(user: { email: target_emails }).pluck(:email)
|
||||
missing_emails = target_emails - existing_emails
|
||||
missing_emails.each { |email| create_instructeur(admins, email) }
|
||||
|
||||
target_instructeurs = User.where(email: target_emails).map(&:instructeur)
|
||||
|
||||
groupes_emails.each do |groupe_email|
|
||||
gi = target_groupes.find { |g| g.label == groupe_email['groupe'] }
|
||||
instructeur = target_instructeurs.find { |i| i.email == groupe_email['email'] }
|
||||
|
||||
if !gi.instructeurs.include?(instructeur)
|
||||
gi.instructeurs << instructeur
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -27,7 +42,7 @@ class InstructeursImportService
|
|||
|
||||
private
|
||||
|
||||
def create_instructeur(administrateurs, email)
|
||||
def self.create_instructeur(administrateurs, email)
|
||||
user = User.create_or_promote_to_instructeur(
|
||||
email,
|
||||
SecureRandom.hex,
|
||||
|
|
Loading…
Reference in a new issue