From d979bf6c680e7f52c1230c18f3760b8f8c35ad97 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 14 Oct 2024 18:06:59 +0200 Subject: [PATCH] feat(instruction options management): add routable champs by category --- .../instructeurs_options_component.fr.yml | 7 ++++--- .../instructeurs_options_component.html.haml | 7 ++++++- app/models/logic/champ_value.rb | 5 +++++ app/models/type_de_champ.rb | 7 +++---- spec/models/type_de_champ_spec.rb | 6 ++++++ 5 files changed, 24 insertions(+), 8 deletions(-) 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 43c22013d..a36d12183 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 @@ -7,9 +7,10 @@ fr: routing_configured_html: Vous avez configuré un routage avec %{groupe_instructeurs_count} groupes d’instructeurs. routing_configuration_notice_2_html: | -

Pour le configurer, votre formulaire doit comporter - au moins un champ de type %{conditionable_types}.

-

Ajoutez ce champ dans la page « Configuration des champs ».

+ Pour le configurer, votre formulaire doit comporter + au moins un « champ routable », soit un champ de type : + routing_configuration_notice_3_html: | + Ajoutez ce champ dans la page d’édition des champs du formulaire. 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: | Attention : tous les dossiers vont être déplacés dans le groupe « %{defaut_label} » et seuls les instructeurs présent dans ce groupe resteront affectés à la démarche. Souhaitez-vous continuer ? 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 8caeb0814..4b281219a 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 @@ -31,7 +31,12 @@ %p.fr-mt-2w %i.fr-mt-2w= t('.routing_configured_html', groupe_instructeurs_count: @procedure.groupe_instructeurs.count) - 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) + %p.fr-mt-2w.fr-mb-0= t('.routing_configuration_notice_2_html') + %ul + - TypeDeChamp.humanized_conditionable_types_by_category.each do |category| + %li + = category.join(', ') + %p.fr-mt-2w= t('.routing_configuration_notice_3_html', path: champs_admin_procedure_path(@procedure)) - 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/models/logic/champ_value.rb b/app/models/logic/champ_value.rb index 0d0015198..c515b5bf3 100644 --- a/app/models/logic/champ_value.rb +++ b/app/models/logic/champ_value.rb @@ -16,6 +16,11 @@ class Logic::ChampValue < Logic::Term :pays ) + MANAGED_TYPE_DE_CHAMP_BY_CATEGORY = MANAGED_TYPE_DE_CHAMP.keys.map(&:to_sym) + .each_with_object(Hash.new { |h, k| h[k] = [] }) do |type, h| + h[TypeDeChamp::TYPE_DE_CHAMP_TO_CATEGORIE[type]] << type + end + CHAMP_VALUE_TYPE = { boolean: :boolean, # from yes_no or checkbox champ number: :number, # from integer or decimal number champ diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 563ee0220..abb5df34e 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -655,10 +655,9 @@ class TypeDeChamp < ApplicationRecord 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 ') + def self.humanized_conditionable_types_by_category + Logic::ChampValue::MANAGED_TYPE_DE_CHAMP_BY_CATEGORY + .map { |_, v| v.map { "« #{I18n.t(_1, scope: [:activerecord, :attributes, :type_de_champ, :type_champs])} »" } } end def invalid_regexp? diff --git a/spec/models/type_de_champ_spec.rb b/spec/models/type_de_champ_spec.rb index 605ddb961..33b3ccc57 100644 --- a/spec/models/type_de_champ_spec.rb +++ b/spec/models/type_de_champ_spec.rb @@ -475,4 +475,10 @@ describe TypeDeChamp do it { expect(subject).to eq('') } end end + + describe '#humanized_conditionable_types_by_category' do + subject { TypeDeChamp.humanized_conditionable_types_by_category } + + it { is_expected.to eq([["« Oui/Non »", "« Case à cocher seule »", "« Choix simple »", "« Choix multiple »"], ["« Nombre entier »", "« Nombre décimal »"], ["« Communes »", "« EPCI »", "« Départements »", "« Régions »", "« Adresse »", "« Pays »"]]) } + end end