Merge pull request from demarches-simplifiees/can-route-from-commune-champ

ETQ admin je peux router par département depuis un type de champ communes
This commit is contained in:
Eric Leroy-Terquem 2023-09-15 08:18:24 +00:00 committed by GitHub
commit 0454d2066e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 65 additions and 6 deletions

View file

@ -4,7 +4,7 @@ fr:
Le routage permet dacheminer les dossiers vers différents groupes dinstructeurs.
routing_configuration_notice_2_html: |
<p>Pour le configurer, votre formulaire doit comporter
au moins un champ de type « choix simple », « départements » ou « régions ».</p>
au moins un champ de type « choix simple », « communes », « départements » ou « régions ».</p>
<p>Ajoutez ce champ dans la page <a href="%{path}">« Configuration des champs »</a>.</p>
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: |

View file

@ -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(:departements)
when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements)
departements_for_select
when TypeDeChamp.type_champs.fetch(:regions)
regions_for_select

View file

@ -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(:departements)
when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements)
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)

View file

@ -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(:departements)
when TypeDeChamp.type_champs.fetch(:communes), TypeDeChamp.type_champs.fetch(:departements)
APIGeoService.departements.map { _1[:code] }
when TypeDeChamp.type_champs.fetch(:regions)
APIGeoService.regions.map { _1[:code] }

View file

@ -46,6 +46,8 @@ class Logic::ChampValue < Logic::Term
targeted_champ.selected_options
when "Champs::DepartementChamp", "Champs::RegionChamp"
targeted_champ.code
when "Champs::CommuneChamp"
targeted_champ.code_departement
end
end

View file

@ -224,7 +224,7 @@ class ProcedureRevision < ApplicationRecord
end
def routable_types_de_champ
types_de_champ_public.filter { |tdc| [:drop_down_list, :departements, :regions].include?(tdc.type_champ.to_sym) }
types_de_champ_public.filter(&:routable?)
end
private

View file

@ -98,6 +98,13 @@ class TypeDeChamp < ApplicationRecord
cojo: 'cojo'
}
ROUTABLE_TYPES = [
type_champs.fetch(:drop_down_list),
type_champs.fetch(:communes),
type_champs.fetch(:departements),
type_champs.fetch(:regions)
]
store_accessor :options,
:cadastres,
:old_pj,
@ -566,6 +573,10 @@ class TypeDeChamp < ApplicationRecord
end
end
def routable?
type_champ.in?(ROUTABLE_TYPES)
end
private
DEFAULT_EMPTY = ['']

View file

@ -742,6 +742,26 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
end
end
context 'with a communes type de champ' do
let!(:procedure3) do
create(:procedure,
types_de_champ_public: [{ type: :communes }],
administrateurs: [admin])
end
let!(:communes_tdc) { procedure3.draft_revision.types_de_champ.first }
before { post :create_simple_routing, params: { procedure_id: procedure3.id, create_simple_routing: { stable_id: communes_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(communes_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,

View file

@ -76,6 +76,12 @@ describe Logic::ChampValue do
it { is_expected.to eq(true) }
end
context 'commune tdc' do
let(:champ) { create(:champ_communes, value: 'Rueil-Malmaison', value_json: { code_postal: '92500', code_departement: '92' }) }
it { is_expected.to eq('92') }
end
context 'region tdc' do
let(:champ) { create(:champ_regions, value: 'La Réunion') }

View file

@ -949,9 +949,10 @@ describe ProcedureRevision do
p.draft_revision.add_type_de_champ(type_champ: :drop_down_list, libelle: 'l2')
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')
end
end
it { expect(draft.routable_types_de_champ.pluck(:libelle)).to eq(['l2', 'l3', 'l4']) }
it { expect(draft.routable_types_de_champ.pluck(:libelle)).to eq(['l2', 'l3', 'l4', 'l5']) }
end
end

View file

@ -111,6 +111,25 @@ describe RoutingEngine, type: :model do
end
end
context 'with a communes type de champ' do
let(:procedure) do
create(:procedure, types_de_champ_public: [{ type: :communes }]).tap do |p|
p.groupe_instructeurs.create(label: 'a third group')
end
end
let(:communes_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(communes_tdc.stable_id), constant('92')))
dossier.champs.first.update(value: 'Rueil-Malmaison', value_json: { code_postal: '92500', code_departement: '92' })
end
it { is_expected.to eq(gi_2) }
end
end
context 'routing rules priorities' do
let(:procedure) do
create(:procedure,