diff --git a/app/components/procedure/instructeurs_options_component/instructeurs_options_component.fr.yml b/app/components/procedure/instructeurs_options_component/instructeurs_options_component.fr.yml index 13f992a85..d9d12cff9 100644 --- a/app/components/procedure/instructeurs_options_component/instructeurs_options_component.fr.yml +++ b/app/components/procedure/instructeurs_options_component/instructeurs_options_component.fr.yml @@ -4,7 +4,7 @@ fr: Le routage permet d’acheminer les dossiers vers différents groupes d’instructeurs. routing_configuration_notice_2_html: |
Pour le configurer, votre formulaire doit comporter - au moins un champ de type « choix simple », « communes », « epci », « départements » ou « régions ».
+ au moins un champ de type %{conditionable_types}.Ajoutez ce champ dans la page « Configuration des champs ».
delete_title: Aucun dossier ne sera supprimé. Les groupes d'instructeurs vont être supprimés. Seuls les instructeurs du groupe « %{defaut_label} » resteront affectés à la démarche. delete_confirmation: | diff --git a/app/components/procedure/instructeurs_options_component/instructeurs_options_component.html.haml b/app/components/procedure/instructeurs_options_component/instructeurs_options_component.html.haml index aa46fb167..903cf6e64 100644 --- a/app/components/procedure/instructeurs_options_component/instructeurs_options_component.html.haml +++ b/app/components/procedure/instructeurs_options_component/instructeurs_options_component.html.haml @@ -24,8 +24,8 @@ ROUTAGE_URL, title: t('.routage_doc.title'), **helpers.external_link_attributes) - - if @procedure.active_revision.routable_types_de_champ.none? - %p.fr-mt-2w= t('.routing_configuration_notice_2_html', path: champs_admin_procedure_path(@procedure)) + - if @procedure.active_revision.conditionable_types_de_champ.none? + %p.fr-mt-2w= t('.routing_configuration_notice_2_html', path: champs_admin_procedure_path(@procedure), conditionable_types: TypeDeChamp.humanized_conditionable_types) - elsif @procedure.groupe_instructeurs.active.one? = link_to 'Configurer le routage', options_admin_procedure_groupe_instructeurs_path(@procedure, state: :choix), class: 'fr-btn' diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index aa422b281..a9a5ea83d 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -25,6 +25,9 @@ module Administrateurs def options @procedure = procedure + if params[:state] == 'choix' && @procedure.active_revision.simple_routable_types_de_champ.none? + configurate_routage_custom + end end def ajout @@ -41,7 +44,7 @@ module Administrateurs @procedure = procedure stable_id = params[:create_simple_routing][:stable_id].to_i - tdc = @procedure.active_revision.routable_types_de_champ.find { |tdc| tdc.stable_id == stable_id } + tdc = @procedure.active_revision.simple_routable_types_de_champ.find { |tdc| tdc.stable_id == stable_id } case tdc.type_champ when TypeDeChamp.type_champs.fetch(:departements) @@ -86,18 +89,22 @@ module Administrateurs def wizard if params[:choice][:state] == 'routage_custom' - new_label = procedure.defaut_groupe_instructeur.label + ' bis' - procedure.groupe_instructeurs - .create({ label: new_label, instructeurs: [current_administrateur.instructeur] }) - - procedure.toggle_routing - - redirect_to admin_procedure_groupe_instructeurs_path(procedure) + configurate_routage_custom elsif params[:choice][:state] == 'routage_simple' redirect_to simple_routing_admin_procedure_groupe_instructeurs_path end end + def configurate_routage_custom + new_label = procedure.defaut_groupe_instructeur.label + ' bis' + procedure.groupe_instructeurs + .create({ label: new_label, instructeurs: [current_administrateur.instructeur] }) + + procedure.toggle_routing + + redirect_to admin_procedure_groupe_instructeurs_path(procedure) + end + def destroy_all_groups_but_defaut reaffecter_all_dossiers_to_defaut_groupe procedure.groupe_instructeurs_but_defaut.each(&:destroy!) diff --git a/app/models/procedure_revision.rb b/app/models/procedure_revision.rb index c3853b20a..c6e0df7c5 100644 --- a/app/models/procedure_revision.rb +++ b/app/models/procedure_revision.rb @@ -265,8 +265,8 @@ class ProcedureRevision < ApplicationRecord [coordinate, coordinate&.type_de_champ] end - def routable_types_de_champ - types_de_champ_public.filter(&:routable?) + def simple_routable_types_de_champ + types_de_champ_public.filter(&:simple_routable?) end def conditionable_types_de_champ diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 4033b0f09..d0725970e 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -110,7 +110,7 @@ class TypeDeChamp < ApplicationRecord expression_reguliere: 'expression_reguliere' } - ROUTABLE_TYPES = [ + SIMPLE_ROUTABLE_TYPES = [ type_champs.fetch(:drop_down_list), type_champs.fetch(:communes), type_champs.fetch(:departements), @@ -642,14 +642,20 @@ class TypeDeChamp < ApplicationRecord end end - def routable? - type_champ.in?(ROUTABLE_TYPES) + def simple_routable? + type_champ.in?(SIMPLE_ROUTABLE_TYPES) end def conditionable? Logic::ChampValue::MANAGED_TYPE_DE_CHAMP.values.include?(type_champ) end + def self.humanized_conditionable_types + Logic::ChampValue::MANAGED_TYPE_DE_CHAMP.values.map do + "« #{I18n.t(_1, scope: [:activerecord, :attributes, :type_de_champ, :type_champs])} »" + end.to_sentence(last_word_connector: ' ou ') + end + def invalid_regexp? self.errors.delete(:expression_reguliere) self.errors.delete(:expression_reguliere_exemple_text) diff --git a/app/views/administrateurs/groupe_instructeurs/simple_routing.html.haml b/app/views/administrateurs/groupe_instructeurs/simple_routing.html.haml index 854ef9c18..c1a97daa0 100644 --- a/app/views/administrateurs/groupe_instructeurs/simple_routing.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/simple_routing.html.haml @@ -15,7 +15,7 @@ %div{ data: { 'action': "click->enable-submit-if-checked#click" } } .notice Sélectionner le champ à partir duquel créer des groupes d’instructeurs - - buttons_content = @procedure.active_revision.routable_types_de_champ.map { |tdc| { label: tdc.libelle, value: tdc.stable_id } } + - buttons_content = @procedure.active_revision.simple_routable_types_de_champ.map { |tdc| { label: tdc.libelle, value: tdc.stable_id } } = render Dsfr::RadioButtonListComponent.new(form: f, target: :stable_id, buttons: buttons_content) diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index e916435de..8600a0325 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -793,6 +793,41 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do end end + describe '#options' do + context 'with a simple routable type de champ' do + let!(:procedure) do + create(:procedure, + types_de_champ_public: [ + { type: :drop_down_list, libelle: 'Votre ville', options: ['Paris', 'Lyon', 'Marseille'] } + ], + administrateurs: [admin]) + end + before { get :options, params: { procedure_id: procedure.id, state: 'choix' } } + + it do + expect(response).to have_http_status(:ok) + expect(response.body).to include('Choix du type de routage') + expect(procedure.reload.routing_enabled).to be_falsey + end + end + + context 'with a conditionable but not simple routable type de champ' do + let!(:procedure) do + create(:procedure, + types_de_champ_public: [ + { type: :integer_number } + ], + administrateurs: [admin]) + end + before { get :options, params: { procedure_id: procedure.id, state: 'choix' } } + + it do + expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure)) + expect(procedure.reload.routing_enabled).to be_truthy + end + end + end + describe '#create_simple_routing' do context 'with a drop_down_list type de champ' do let!(:procedure3) do diff --git a/spec/lib/tasks/re_routing_dossiers_spec.rb b/spec/lib/tasks/re_routing_dossiers_spec.rb index dd31215b5..c0e2d4948 100644 --- a/spec/lib/tasks/re_routing_dossiers_spec.rb +++ b/spec/lib/tasks/re_routing_dossiers_spec.rb @@ -12,7 +12,7 @@ describe 're_routing_dossiers' do dossier2.champs.last.update(value: 'Allier') - tdc = procedure.active_revision.routable_types_de_champ.first + tdc = procedure.active_revision.simple_routable_types_de_champ.first tdc_options = APIGeoService.departements.map { ["#{_1[:code]} – #{_1[:name]}", _1[:code]] } diff --git a/spec/models/procedure_revision_spec.rb b/spec/models/procedure_revision_spec.rb index 4b17da875..99e307b21 100644 --- a/spec/models/procedure_revision_spec.rb +++ b/spec/models/procedure_revision_spec.rb @@ -1144,7 +1144,7 @@ describe ProcedureRevision do } end - describe '#routable_types_de_champ' do + describe '#simple_routable_types_de_champ' do let(:procedure) do create(:procedure, types_de_champ_public: [ { type: :text, libelle: 'l1' }, @@ -1156,6 +1156,6 @@ describe ProcedureRevision do ]) end - it { expect(draft.routable_types_de_champ.pluck(:libelle)).to eq(['l2', 'l3', 'l4', 'l5', 'l6']) } + it { expect(draft.simple_routable_types_de_champ.pluck(:libelle)).to eq(['l2', 'l3', 'l4', 'l5', 'l6']) } end end