53 lines
2.2 KiB
Ruby
53 lines
2.2 KiB
Ruby
|
module Mutations
|
|||
|
class GroupeInstructeurCreer < Mutations::BaseMutation
|
|||
|
class GroupeInstructeurAttributes < Types::BaseInputObject
|
|||
|
description "Attributs pour l’ajout d'un groupe instructeur."
|
|||
|
argument :label, String, "Libelle du groupe instructeur.", required: true
|
|||
|
argument :closed, Boolean, "L’état du groupe instructeur.", required: false, default_value: false
|
|||
|
argument :instructeurs, [Types::ProfileInput], "Instructeurs à ajouter.", required: false, default_value: []
|
|||
|
end
|
|||
|
|
|||
|
description "Crée un groupe instructeur."
|
|||
|
|
|||
|
argument :demarche, Types::DemarcheDescriptorType::FindDemarcheInput, "Demarche ID ou numéro.", required: true
|
|||
|
argument :groupe_instructeur, GroupeInstructeurAttributes, "Groupes instructeur à ajouter.", required: true
|
|||
|
|
|||
|
field :groupe_instructeur, Types::GroupeInstructeurType, null: true
|
|||
|
field :errors, [Types::ValidationErrorType], null: true
|
|||
|
field :warnings, [Types::WarningMessageType], null: true
|
|||
|
|
|||
|
def resolve(demarche:, groupe_instructeur:)
|
|||
|
demarche_number = demarche.number.presence || ApplicationRecord.id_from_typed_id(demarche.id)
|
|||
|
procedure = current_administrateur.procedures.find(demarche_number)
|
|||
|
ids, emails = partition_instructeurs_by(groupe_instructeur.instructeurs)
|
|||
|
|
|||
|
groupe_instructeur = procedure
|
|||
|
.groupe_instructeurs
|
|||
|
.build(label: groupe_instructeur.label, closed: groupe_instructeur.closed, instructeurs: [current_administrateur.instructeur].compact)
|
|||
|
|
|||
|
if groupe_instructeur.save
|
|||
|
result = { groupe_instructeur: }
|
|||
|
|
|||
|
if emails.present? || ids.present?
|
|||
|
instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(ids:, emails:)
|
|||
|
|
|||
|
instructeurs.each { groupe_instructeur.add(_1) }
|
|||
|
groupe_instructeur.reload
|
|||
|
|
|||
|
if invalid_emails.present?
|
|||
|
warning = I18n.t('administrateurs.groupe_instructeurs.add_instructeur.wrong_address',
|
|||
|
count: invalid_emails.size,
|
|||
|
emails: invalid_emails.join(', '))
|
|||
|
|
|||
|
result[:warnings] = [warning]
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
result
|
|||
|
else
|
|||
|
{ errors: groupe_instructeur.errors.full_messages }
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|