Merge pull request #9244 from demarches-simplifiees/refactor-routing-update

Tech : mise à jour du routage sans callback
This commit is contained in:
Eric Leroy-Terquem 2023-07-04 09:39:00 +00:00 committed by GitHub
commit f959450477
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 79 additions and 44 deletions

View file

@ -43,11 +43,12 @@ module Administrateurs
tdc_options = tdc.options["drop_down_options"].reject(&:empty?)
tdc_options.each do |option_label|
gi = procedure.groupe_instructeurs.find_by({ label: option_label }) || procedure.groupe_instructeurs
gi = @procedure.groupe_instructeurs.find_by({ label: option_label }) || @procedure.groupe_instructeurs
.create({ label: option_label, instructeurs: [current_administrateur.instructeur] })
gi.update(routing_rule: ds_eq(champ_value(stable_id), constant(gi.label)))
end
@procedure.toggle_routing
defaut = @procedure.defaut_groupe_instructeur
if !tdc_options.include?(defaut.label)
@ -59,7 +60,7 @@ module Administrateurs
end
flash.notice = 'Les groupes instructeurs ont été ajoutés'
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
redirect_to admin_procedure_groupe_instructeurs_path(@procedure)
end
def wizard
@ -68,6 +69,8 @@ module Administrateurs
procedure.groupe_instructeurs
.create({ label: new_label, instructeurs: [current_administrateur.instructeur] })
procedure.toggle_routing
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
elsif params[:choice][:state] == 'routage_simple'
redirect_to simple_routing_admin_procedure_groupe_instructeurs_path
@ -77,7 +80,7 @@ module Administrateurs
def destroy_all_groups_but_defaut
reaffecter_all_dossiers_to_defaut_groupe
procedure.groupe_instructeurs_but_defaut.each(&:destroy!)
procedure.update!(routing_enabled: false, instructeurs_self_management_enabled: false)
procedure.update!(routing_enabled: false)
procedure.defaut_groupe_instructeur.update!(
routing_rule: nil,
label: GroupeInstructeur::DEFAUT_LABEL,
@ -100,6 +103,7 @@ module Administrateurs
.new({ instructeurs: [current_administrateur.instructeur] }.merge(groupe_instructeur_params))
if @groupe_instructeur.save
procedure.toggle_routing
routing_notice = " et le routage a été activé" if procedure.groupe_instructeurs.active.size == 2
redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
notice: "Le groupe dinstructeurs « #{@groupe_instructeur.label} » a été créé#{routing_notice}."
@ -117,6 +121,7 @@ module Administrateurs
@groupe_instructeur = groupe_instructeur
if @groupe_instructeur.update(groupe_instructeur_params)
procedure.toggle_routing
redirect_to admin_procedure_groupe_instructeur_path(procedure, groupe_instructeur),
notice: "Le nom est à présent « #{@groupe_instructeur.label} »."
else
@ -161,10 +166,7 @@ module Administrateurs
else
@groupe_instructeur.destroy!
if procedure.groupe_instructeurs.active.one?
procedure.update!(
routing_enabled: false,
instructeurs_self_management_enabled: false
)
procedure.toggle_routing
procedure.defaut_groupe_instructeur.update!(
routing_rule: nil,
label: GroupeInstructeur::DEFAUT_LABEL,

View file

@ -26,6 +26,7 @@ module Mutations
.build(label: groupe_instructeur.label, closed: groupe_instructeur.closed, instructeurs: [current_administrateur.instructeur].compact)
if groupe_instructeur.save
groupe_instructeur.procedure.toggle_routing
# ugly hack to keep retro compatibility
# do not judge

View file

@ -11,6 +11,7 @@ module Mutations
def resolve(groupe_instructeur:, label: nil, closed: nil)
if groupe_instructeur.update({ label:, closed: }.compact)
groupe_instructeur.procedure.toggle_routing
# ugly hack to keep retro compatibility
# do not judge

View file

@ -35,7 +35,6 @@ class GroupeInstructeur < ApplicationRecord
end
before_validation -> { label&.strip! }
after_save :toggle_routing
scope :without_group, -> (group) { where.not(id: group) }
scope :for_api_v2, -> { includes(procedure: [:administrateurs]) }
@ -119,10 +118,5 @@ class GroupeInstructeur < ApplicationRecord
routing_rule.right.value.in?(routing_tdc.options['drop_down_options'])
end
def toggle_routing
procedure.update!(routing_enabled: procedure.groupe_instructeurs.active.many?)
procedure.update!(instructeurs_self_management_enabled: true) if procedure.routing_enabled?
end
serialize :routing_rule, LogicSerializer
end

View file

@ -720,6 +720,10 @@ class Procedure < ApplicationRecord
revisions.size - 2
end
def instructeurs_self_management?
routing_enabled? || instructeurs_self_management_enabled?
end
def defaut_groupe_instructeur_for_new_dossier
if !routing_enabled? || feature_enabled?(:procedure_routage_api)
defaut_groupe_instructeur
@ -968,6 +972,10 @@ class Procedure < ApplicationRecord
active_revision.types_de_champ_public.where.not(condition: nil).filter(&:piece_justificative?)
end
def toggle_routing
update!(routing_enabled: self.groupe_instructeurs.active.many?)
end
private
def validate_auto_archive_on_in_the_future

View file

@ -16,6 +16,7 @@ class InstructeursImportService
if missing_labels.present?
created_at = Time.zone.now
GroupeInstructeur.create!(missing_labels.map { |label| { procedure_id: procedure.id, label:, created_at:, updated_at: created_at } })
procedure.toggle_routing
end
emails_in_groupe = groupes_emails

View file

@ -7,7 +7,7 @@
|
= link_to t('instructeurs.dossiers.header.banner.statistics'), stats_instructeur_procedure_path(procedure), class: 'header-link'
- if procedure.instructeurs_self_management_enabled?
- if procedure.instructeurs_self_management?
|
- if can_manage_groupe_instructeurs?(procedure)
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), admin_procedure_groupe_instructeurs_path(procedure), class: 'header-link'