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') }