2024-04-29 00:17:15 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
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)
|
2023-02-21 16:46:28 +01:00
|
|
|
groupes_emails, error_groupe_emails = groupes_emails.partition { _1['groupe'].present? }
|
2021-06-09 17:52:04 +02:00
|
|
|
|
2023-02-21 16:46:28 +01:00
|
|
|
groupes_emails = groupes_emails.map do
|
|
|
|
{
|
|
|
|
groupe: _1['groupe'].strip,
|
|
|
|
email: _1['email'].present? ? EmailSanitizableConcern::EmailSanitizer.sanitize(_1['email']) : nil
|
|
|
|
}
|
|
|
|
end
|
|
|
|
errors = error_groupe_emails.map { _1['email'] }.uniq
|
|
|
|
target_labels = groupes_emails.map { _1[:groupe] }.uniq
|
2021-06-09 17:52:04 +02:00
|
|
|
|
|
|
|
missing_labels = target_labels - procedure.groupe_instructeurs.pluck(:label)
|
|
|
|
|
|
|
|
if missing_labels.present?
|
2023-02-21 16:46:28 +01:00
|
|
|
created_at = Time.zone.now
|
2023-03-03 10:36:19 +01:00
|
|
|
GroupeInstructeur.create!(missing_labels.map { |label| { procedure_id: procedure.id, label:, created_at:, updated_at: created_at } })
|
2023-06-28 11:00:25 +02:00
|
|
|
procedure.toggle_routing
|
2021-06-09 17:52:04 +02:00
|
|
|
end
|
|
|
|
|
2023-02-21 16:46:28 +01:00
|
|
|
emails_in_groupe = groupes_emails
|
|
|
|
.group_by { _1[:groupe] }
|
|
|
|
.transform_values { |groupes_emails| groupes_emails.map { _1[:email] }.uniq }
|
|
|
|
emails_in_groupe.default = []
|
|
|
|
|
|
|
|
target_groupes = procedure
|
|
|
|
.groupe_instructeurs
|
|
|
|
.where(label: target_labels)
|
|
|
|
.map { [_1, emails_in_groupe[_1.label]] }
|
|
|
|
.to_h
|
|
|
|
|
2023-02-22 18:05:20 +01:00
|
|
|
added_instructeurs_by_group = []
|
|
|
|
|
2023-02-21 16:46:28 +01:00
|
|
|
target_groupes.each do |groupe_instructeur, emails|
|
2023-02-22 18:05:20 +01:00
|
|
|
added_instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(emails:)
|
|
|
|
added_instructeurs_by_group << [groupe_instructeur, added_instructeurs]
|
2023-02-21 16:46:28 +01:00
|
|
|
errors << invalid_emails
|
2021-01-20 11:07:44 +01:00
|
|
|
end
|
2023-02-21 16:46:28 +01:00
|
|
|
|
2023-02-22 18:05:20 +01:00
|
|
|
[added_instructeurs_by_group, 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)
|
2023-02-21 16:46:28 +01:00
|
|
|
instructeurs_emails = emails
|
|
|
|
.map { _1["email"] }
|
|
|
|
.compact
|
|
|
|
.map { EmailSanitizableConcern::EmailSanitizer.sanitize(_1) }
|
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-22 17:29:07 +01:00
|
|
|
instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(emails: instructeurs_emails)
|
2023-01-10 14:36:56 +01:00
|
|
|
|
2023-02-22 17:29:07 +01:00
|
|
|
[instructeurs, invalid_emails]
|
2023-01-10 14:36:56 +01:00
|
|
|
end
|
2021-01-20 11:07:44 +01:00
|
|
|
end
|