From cf7c7d9761be3ae8e14e791f1dd8b7ffbae34af7 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 11 Sep 2023 18:09:30 +0200 Subject: [PATCH 1/7] feat(routing): add epci to routable_types_de_champ --- app/models/type_de_champ.rb | 3 ++- spec/models/procedure_revision_spec.rb | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index e3fdd44b1..7bb8a0cb9 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -102,7 +102,8 @@ class TypeDeChamp < ApplicationRecord type_champs.fetch(:drop_down_list), type_champs.fetch(:communes), type_champs.fetch(:departements), - type_champs.fetch(:regions) + type_champs.fetch(:regions), + type_champs.fetch(:epci) ] store_accessor :options, diff --git a/spec/models/procedure_revision_spec.rb b/spec/models/procedure_revision_spec.rb index 086467477..96dd11ce2 100644 --- a/spec/models/procedure_revision_spec.rb +++ b/spec/models/procedure_revision_spec.rb @@ -950,9 +950,10 @@ describe ProcedureRevision do p.draft_revision.add_type_de_champ(type_champ: :departements, libelle: 'l3') p.draft_revision.add_type_de_champ(type_champ: :regions, libelle: 'l4') p.draft_revision.add_type_de_champ(type_champ: :communes, libelle: 'l5') + p.draft_revision.add_type_de_champ(type_champ: :epci, libelle: 'l6') end end - it { expect(draft.routable_types_de_champ.pluck(:libelle)).to eq(['l2', 'l3', 'l4', 'l5']) } + it { expect(draft.routable_types_de_champ.pluck(:libelle)).to eq(['l2', 'l3', 'l4', 'l5', 'l6']) } end end From 60e5abd26635845c51fba8a3d5ab7d1f7e7ac409 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 11 Sep 2023 18:12:11 +0200 Subject: [PATCH 2/7] feat(routing): add departements options to value tag if routing by epci --- app/components/procedure/one_groupe_management_component.rb | 2 +- app/models/groupe_instructeur.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/procedure/one_groupe_management_component.rb b/app/components/procedure/one_groupe_management_component.rb index 639e6edb2..17cf69c17 100644 --- a/app/components/procedure/one_groupe_management_component.rb +++ b/app/components/procedure/one_groupe_management_component.rb @@ -79,7 +79,7 @@ class Procedure::OneGroupeManagementComponent < ApplicationComponent return [] if targeted_champ.is_a?(Logic::Empty) case @revision.types_de_champ_public.find_by(stable_id: targeted_champ.stable_id).type_champ - when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements) + when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements), TypeDeChamp.type_champs.fetch(:epci) departements_for_select when TypeDeChamp.type_champs.fetch(:regions) regions_for_select diff --git a/app/models/groupe_instructeur.rb b/app/models/groupe_instructeur.rb index a45158c4d..1d0af0c7b 100644 --- a/app/models/groupe_instructeur.rb +++ b/app/models/groupe_instructeur.rb @@ -105,7 +105,7 @@ class GroupeInstructeur < ApplicationRecord routing_tdc = procedure.active_revision.types_de_champ.find_by(stable_id: routing_rule.left.stable_id) options = case routing_tdc.type_champ - when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements) + when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements), TypeDeChamp.type_champs.fetch(:epci) APIGeoService.departements.map { _1[:code] } when TypeDeChamp.type_champs.fetch(:regions) APIGeoService.regions.map { _1[:code] } From 588143f9fd5b946571a562e52e3e27d6cb285434 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 11 Sep 2023 18:13:44 +0200 Subject: [PATCH 3/7] feat(routing): can create simple routing from epci tdc --- .../administrateurs/groupe_instructeurs_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 4fbd9367e..8eb719e3c 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -41,7 +41,7 @@ module Administrateurs tdc = @procedure.active_revision.routable_types_de_champ.find { |tdc| tdc.stable_id == stable_id } case tdc.type_champ - when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements) + when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements), TypeDeChamp.type_champs.fetch(:epci) tdc_options = APIGeoService.departements.map { ["#{_1[:code]} – #{_1[:name]}", _1[:code]] } create_groups_from_territorial_tdc(tdc_options, stable_id) when TypeDeChamp.type_champs.fetch(:regions) From 967139ec88c05a5eb5f7873373a1a0bf67e94c75 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 11 Sep 2023 20:34:16 +0200 Subject: [PATCH 4/7] feat(routing): make routing engine work with epci champ --- app/models/logic/champ_value.rb | 2 +- spec/models/routing_engine_spec.rb | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/models/logic/champ_value.rb b/app/models/logic/champ_value.rb index 4da360642..866c66ae0 100644 --- a/app/models/logic/champ_value.rb +++ b/app/models/logic/champ_value.rb @@ -46,7 +46,7 @@ class Logic::ChampValue < Logic::Term targeted_champ.selected_options when "Champs::DepartementChamp", "Champs::RegionChamp" targeted_champ.code - when "Champs::CommuneChamp" + when "Champs::CommuneChamp", "Champs::EpciChamp" targeted_champ.code_departement end end diff --git a/spec/models/routing_engine_spec.rb b/spec/models/routing_engine_spec.rb index 3b8c08e4f..676e7c7de 100644 --- a/spec/models/routing_engine_spec.rb +++ b/spec/models/routing_engine_spec.rb @@ -130,6 +130,31 @@ describe RoutingEngine, type: :model do end end + context 'with an epci type de champ' do + let(:procedure) do + create(:procedure, types_de_champ_public: [{ type: :epci }]).tap do |p| + p.groupe_instructeurs.create(label: 'a third group') + end + end + + let(:epci_tdc) { procedure.draft_revision.types_de_champ.first } + + context 'with a matching rule' do + before do + gi_2.update(routing_rule: ds_eq(champ_value(epci_tdc.stable_id), constant('42'))) + dossier.champs.first.update_columns( + external_id: 244200895, + value: 'CC du Pilat Rhodanien', + value_json: { code_departement: '42' } + ) + end + + it do + is_expected.to eq(gi_2) + end + end + end + context 'routing rules priorities' do let(:procedure) do create(:procedure, From aac9182ce45b525fdd28d96742914f5345184a66 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 11 Sep 2023 20:36:26 +0200 Subject: [PATCH 5/7] wording(routing): update routing configuration notice --- .../instructeurs_options_component.fr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c91b3135d..117659e58 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 », « départements » ou « régions ».

+ au moins un champ de type « choix simple », « communes », « epci », « départements » ou « régions ».

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: | From 67703c94e73998337a51abc7aacc7fbf67af2051 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 11 Sep 2023 20:39:09 +0200 Subject: [PATCH 6/7] test(routing): test simple routing with epci type de champ --- .../groupe_instructeurs_controller_spec.rb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index e9c821372..c6901eb44 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -762,6 +762,26 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do end end + context 'with a epci type de champ' do + let!(:procedure3) do + create(:procedure, + types_de_champ_public: [{ type: :epci }], + administrateurs: [admin]) + end + + let!(:epci_tdc) { procedure3.draft_revision.types_de_champ.first } + + before { post :create_simple_routing, params: { procedure_id: procedure3.id, create_simple_routing: { stable_id: epci_tdc.stable_id } } } + + it do + expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure3)) + expect(flash.notice).to eq 'Les groupes instructeurs ont été ajoutés' + expect(procedure3.groupe_instructeurs.pluck(:label)).to include("01 – Ain") + expect(procedure3.reload.defaut_groupe_instructeur.routing_rule).to eq(ds_eq(champ_value(epci_tdc.stable_id), constant('01'))) + expect(procedure3.routing_enabled).to be_truthy + end + end + context 'with a departements type de champ' do let!(:procedure3) do create(:procedure, From 0aa0b27810d7423e9184da6f2236cb78cad536b1 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Fri, 15 Sep 2023 12:19:30 +0200 Subject: [PATCH 7/7] test(champ value): test compute of champ value for epci tdc --- spec/models/logic/champ_value_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spec/models/logic/champ_value_spec.rb b/spec/models/logic/champ_value_spec.rb index 86df61926..624294387 100644 --- a/spec/models/logic/champ_value_spec.rb +++ b/spec/models/logic/champ_value_spec.rb @@ -82,6 +82,19 @@ describe Logic::ChampValue do it { is_expected.to eq('92') } end + context 'epci tdc' do + let(:champ) { build(:champ_epci, code_departement: '43') } + + before do + champ.save! + champ.update_columns(external_id: '244301016', value: 'CC des Sucs') + end + + it do + is_expected.to eq('43') + end + end + context 'region tdc' do let(:champ) { create(:champ_regions, value: 'La Réunion') }