2021-01-20 11:07:44 +01:00
|
|
|
class InstructeursImportService
|
2023-01-10 14:36:56 +01:00
|
|
|
def self.import_groupes(procedure, groupes_emails)
|
2021-06-09 17:52:04 +02:00
|
|
|
created_at = Time.zone.now
|
|
|
|
updated_at = Time.zone.now
|
|
|
|
|
|
|
|
groupes_emails, error_groupe_emails = groupes_emails
|
2021-06-21 14:11:05 +02:00
|
|
|
.map { |groupe_email| { "groupe" => groupe_email["groupe"].present? ? groupe_email["groupe"].strip : nil, "email" => groupe_email["email"].present? ? groupe_email["email"].gsub(/[[:space:]]/, '').downcase : nil } }
|
2023-02-16 15:34:18 +01:00
|
|
|
.partition { |groupe_email| groupe_email['groupe'].present? }
|
2021-06-09 17:52:04 +02:00
|
|
|
|
|
|
|
errors = error_groupe_emails.map { |group_email| group_email['email'] }
|
|
|
|
|
|
|
|
target_labels = groupes_emails.map { |groupe_email| groupe_email['groupe'] }.uniq
|
|
|
|
missing_labels = target_labels - procedure.groupe_instructeurs.pluck(:label)
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
target_groupes = procedure.reload.groupe_instructeurs
|
2021-01-20 11:07:44 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
defaut_groupe_instructeur = procedure.defaut_groupe_instructeur
|
2023-01-10 14:36:56 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
instructeurs_emails = groupes_emails.map { |instructeur_email| instructeur_email["email"] }.uniq
|
2023-01-10 14:36:56 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
instructeurs, invalid_emails = defaut_groupe_instructeur.add_instructeurs(emails: instructeurs_emails)
|
2021-01-20 11:07:44 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
if instructeurs.present?
|
|
|
|
groupes_emails.each do |groupe_email|
|
|
|
|
gi = target_groupes.find { |g| g.label == groupe_email['groupe'] }
|
|
|
|
instructeur = Instructeur.where(users: { email: groupe_email['email'] }).first
|
2023-01-10 14:36:56 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
gi.add(instructeur)
|
|
|
|
end
|
2021-01-20 11:07:44 +01:00
|
|
|
end
|
2023-02-16 15:34:18 +01:00
|
|
|
errors << invalid_emails
|
|
|
|
errors.flatten
|
2021-01-20 11:07:44 +01:00
|
|
|
end
|
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
def self.import_instructeurs(procedure, emails)
|
|
|
|
instructeurs_emails = emails.map { |instructeur_email| instructeur_email["email"].present? ? instructeur_email["email"].gsub(/[[:space:]]/, '').downcase : nil }
|
2021-01-20 11:07:44 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
groupe_instructeur = procedure.defaut_groupe_instructeur
|
2023-01-10 14:36:56 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(emails: instructeurs_emails)
|
2023-01-10 14:36:56 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
instructeurs.each { groupe_instructeur.add(_1) } if instructeurs.present?
|
2023-01-10 14:36:56 +01:00
|
|
|
|
2023-02-16 15:34:18 +01:00
|
|
|
invalid_emails
|
2023-01-10 14:36:56 +01:00
|
|
|
end
|
2021-01-20 11:07:44 +01:00
|
|
|
end
|