Merge pull request #10957 from demarches-simplifiees/update-configuration-routage-interface-v2

ETQ administrateur j'ai une nouvelle interface de configuration du routage
This commit is contained in:
Eric Leroy-Terquem 2024-11-07 09:15:56 +00:00 committed by GitHub
commit 510799bf23
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 77 additions and 26 deletions

View file

@ -44,6 +44,6 @@
.fr-col-12 .fr-col-12
%ul.fr-btns-group.fr-btns-group--inline-md %ul.fr-btns-group.fr-btns-group--inline-md
%li %li
= link_to "Annuler et revenir à l'écran de gestion", admin_procedure_path(id: @draft_revision.procedure), class: 'fr-btn fr-btn--secondary', data: { confirm: 'Si vous avez fait des modifications elles ne seront pas sauvegardées.'} = link_to "Annuler et revenir à lécran de gestion", admin_procedure_path(id: @draft_revision.procedure), class: 'fr-btn fr-btn--secondary', data: { confirm: 'Si vous avez fait des modifications elles ne seront pas sauvegardées.'}
%li %li
= button_tag "Enregistrer", class: "fr-btn", form: 'ineligibilite_form' = button_tag "Enregistrer", class: "fr-btn", form: 'ineligibilite_form'

View file

@ -1,4 +1,4 @@
fr: fr:
back: Revenir à l'écran de gestion back: Revenir à lécran de gestion
submit: Enregistrer submit: Enregistrer
cancel: Annuler et revenir à l'écran de gestion cancel: Annuler et revenir à lécran de gestion

View file

@ -50,3 +50,6 @@
= select_tag :defaut_groupe_instructeur_id, = select_tag :defaut_groupe_instructeur_id,
options_for_select(@procedure.groupe_instructeurs.pluck(:label, :id), selected: @procedure.defaut_groupe_instructeur.id), options_for_select(@procedure.groupe_instructeurs.pluck(:label, :id), selected: @procedure.defaut_groupe_instructeur.id),
class: 'fr-select' class: 'fr-select'
- if flash[:routing_mode] == 'custom'
= render partial: 'custom_routing_modal'

View file

@ -1,6 +1,13 @@
.container .container
.fr-grid-row .fr-grid-row
.fr-col.fr-col-12.fr-col-md-3 .fr-col.fr-col-12.fr-col-md-3
- if params[:state] != 'choix'
= render(Dsfr::SidemenuComponent.new) do |component| = render(Dsfr::SidemenuComponent.new) do |component|
- component.with_links(links) - component.with_links(links)
- else
.fr-container
%ul.fr-btns-group.fr-btns-group--inline-md.fr-ml-0
%li
= link_to options_admin_procedure_groupe_instructeurs_path, class: 'fr-link fr-icon-arrow-left-line fr-link--icon-left fr-mb-2w fr-mr-2w' do
Revenir aux options
.fr-col= content .fr-col= content

View file

@ -54,15 +54,27 @@
data: { controller: 'enable-submit-if-checked' }, data: { controller: 'enable-submit-if-checked' },
url: wizard_admin_procedure_groupe_instructeurs_path(@procedure) do |f| url: wizard_admin_procedure_groupe_instructeurs_path(@procedure) do |f|
%div{ data: { 'action': "click->enable-submit-if-checked#click" } } %h1 Configuration du routage
%h2 Choix du type de routage
.card.fr-pb-0{ data: { 'action': "click->enable-submit-if-checked#click" } }
%p.fr-mb-0 Routage
= render Dsfr::RadioButtonListComponent.new(form: f, = render Dsfr::RadioButtonListComponent.new(form: f,
target: :state, target: :state,
buttons: [ { label: 'À partir dun champ', value: 'routage_simple', hint: 'crée les groupes en fonction dun champ du formulaire' } , buttons: [ { label: 'À partir dun champ', value: 'routage_simple', hint: 'crée les groupes en fonction dun champ du formulaire' } ,
{ label: 'Avancé', value: 'routage_custom', hint: 'libre à vous de créer et de configurer les groupes' }]) do { label: 'Avancé', value: 'custom_routing', hint: 'libre à vous de créer et de configurer les groupes' }])
%h1 Choix du type de routage
%ul.fr-btns-group.fr-btns-group--inline-sm %ul.fr-btns-group.fr-btns-group--inline-sm
%li %li
= link_to 'Retour', options_admin_procedure_groupe_instructeurs_path(@procedure), class: 'fr-btn fr-btn--secondary' = link_to 'Annuler', options_admin_procedure_groupe_instructeurs_path(@procedure), class: 'fr-btn fr-btn--secondary'
%li %li
%button.fr-btn{ disabled: true, data: { 'enable-submit-if-checked-target': 'submit' } } Continuer %button.fr-btn{ disabled: true, data: { 'enable-submit-if-checked-target': 'submit' } } Continuer
- if params[:state] != 'choix'
.padded-fixed-footer
.fixed-footer
.fr-container
%ul.fr-btns-group.fr-btns-group--inline-md.fr-ml-0
%li
= link_to admin_procedure_path(id: @procedure), class: 'fr-link fr-icon-arrow-left-line fr-link--icon-left fr-mb-2w fr-mr-2w' do
Revenir à lécran de gestion

View file

@ -27,7 +27,7 @@ module Administrateurs
def options def options
@procedure = procedure @procedure = procedure
if params[:state] == 'choix' && @procedure.active_revision.simple_routable_types_de_champ.none? if params[:state] == 'choix' && @procedure.active_revision.simple_routable_types_de_champ.none?
configurate_routage_custom configurate_custom_routing
end end
end end
@ -93,20 +93,22 @@ module Administrateurs
end end
def wizard def wizard
if params[:choice][:state] == 'routage_custom' if params[:choice][:state] == 'custom_routing'
configurate_routage_custom configurate_custom_routing
elsif params[:choice][:state] == 'routage_simple' elsif params[:choice][:state] == 'routage_simple'
redirect_to simple_routing_admin_procedure_groupe_instructeurs_path redirect_to simple_routing_admin_procedure_groupe_instructeurs_path
end end
end end
def configurate_routage_custom def configurate_custom_routing
new_label = procedure.defaut_groupe_instructeur.label + ' bis' procedure.defaut_groupe_instructeur.update!(label: 'Groupe 1 (à renommer et configurer)')
procedure.groupe_instructeurs procedure.groupe_instructeurs
.create({ label: new_label, instructeurs: [current_administrateur.instructeur] }) .create({ label: 'Groupe 2 (à renommer et configurer)', instructeurs: [current_administrateur.instructeur] })
procedure.toggle_routing procedure.toggle_routing
flash[:routing_mode] = 'custom'
redirect_to admin_procedure_groupe_instructeurs_path(procedure) redirect_to admin_procedure_groupe_instructeurs_path(procedure)
end end

View file

@ -44,6 +44,8 @@ module ApplicationHelper
class_names << 'alert-success' class_names << 'alert-success'
when 'alert', 'error' when 'alert', 'error'
class_names << 'alert-danger' class_names << 'alert-danger'
when 'routing_mode'
class_names << 'hidden'
end end
if sticky if sticky
class_names << 'sticky' class_names << 'sticky'

View file

@ -0,0 +1,20 @@
%dialog{ aria: { labelledby: "fr-modal-title-modal-1" }, role: "dialog", id: "routing-mode-modal", class: "fr-modal fr-modal--opened" }
.fr-container.fr-container--fluid.fr-container-md
.fr-grid-row.fr-grid-row--center
.fr-col-12.fr-col-md-8.fr-col-lg-6
.fr-modal__body
.fr-modal__header
%button.fr-btn.fr-btn--close{ title: "Fermer la fenêtre modale", aria: { controls: "routing-mode-modal" } } Fermer
.fr-modal__content
%h1#fr-modal-title-modal-1.fr-modal__title
%span.fr-icon-arrow-right-line.fr-icon--lg
Routage avancé
.fr-alert.fr-alert--success
%h2.fr-alert__title
Deux groupes par défaut ont été créés
%p
Vous devez maintenant les renommer et leur attribuer des règles de routage à partir du ou des champs « routables » de votre formulaire, soit des champs de type :
%ul
- TypeDeChamp.humanized_conditionable_types_by_category.each do |category|
%li
= category.join(', ')

View file

@ -20,7 +20,7 @@
.fr-container .fr-container
%ul.fr-btns-group.fr-btns-group--inline-md.fr-ml-0 %ul.fr-btns-group.fr-btns-group--inline-md.fr-ml-0
%li %li
= link_to "Revenir à l'écran de gestion", admin_procedure_path(@procedure), title: t('continue_annotations', scope: [:layouts, :breadcrumb]), class: 'fr-link fr-icon-arrow-left-line fr-link--icon-left fr-mb-2w fr-mr-2w' = link_to "Revenir à lécran de gestion", admin_procedure_path(@procedure), title: t('continue_annotations', scope: [:layouts, :breadcrumb]), class: 'fr-link fr-icon-arrow-left-line fr-link--icon-left fr-mb-2w fr-mr-2w'
- if @procedure.draft_revision.revision_types_de_champ_private.count > 0 - if @procedure.draft_revision.revision_types_de_champ_private.count > 0
%li %li
= link_to t('preview_annotations', scope: [:layouts, :breadcrumb]), apercu_admin_procedure_path(@procedure, params: {tab: 'annotations-privees'}), target: "_blank", rel: "noopener", class: 'fr-link fr-mb-2w' = link_to t('preview_annotations', scope: [:layouts, :breadcrumb]), apercu_admin_procedure_path(@procedure, params: {tab: 'annotations-privees'}), target: "_blank", rel: "noopener", class: 'fr-link fr-mb-2w'

View file

@ -26,7 +26,7 @@
%ul.fr-btns-group.fr-btns-group--inline-md.fr-ml-0 %ul.fr-btns-group.fr-btns-group--inline-md.fr-ml-0
%li %li
= link_to admin_procedure_path(id: @procedure), class: 'fr-link fr-icon-arrow-left-line fr-link--icon-left fr-mb-2w fr-mr-2w' do = link_to admin_procedure_path(id: @procedure), class: 'fr-link fr-icon-arrow-left-line fr-link--icon-left fr-mb-2w fr-mr-2w' do
Revenir à l'écran de gestion Revenir à lécran de gestion
- if @procedure.draft_revision.revision_types_de_champ_public.count > 0 - if @procedure.draft_revision.revision_types_de_champ_public.count > 0
%li %li
= link_to t('preview', scope: [:layouts, :breadcrumb]), apercu_admin_procedure_path(@procedure), target: "_blank", rel: "noopener", class: 'fr-link fr-mb-2w' = link_to t('preview', scope: [:layouts, :breadcrumb]), apercu_admin_procedure_path(@procedure), target: "_blank", rel: "noopener", class: 'fr-link fr-mb-2w'

View file

@ -1058,11 +1058,11 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
let!(:drop_down_tdc) { procedure4.draft_revision.types_de_champ.first } let!(:drop_down_tdc) { procedure4.draft_revision.types_de_champ.first }
before { patch :wizard, params: { procedure_id: procedure4.id, choice: { state: 'routage_custom' } } } before { patch :wizard, params: { procedure_id: procedure4.id, choice: { state: 'custom_routing' } } }
it do it do
expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure4)) expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure4))
expect(procedure4.groupe_instructeurs.pluck(:label)).to match_array(['défaut', 'défaut bis']) expect(procedure4.groupe_instructeurs.pluck(:label)).to match_array(['Groupe 1 (à renommer et configurer)', 'Groupe 2 (à renommer et configurer)'])
expect(procedure4.reload.routing_enabled).to be_truthy expect(procedure4.reload.routing_enabled).to be_truthy
end end
end end

View file

@ -24,7 +24,7 @@ describe 'Administrateurs can edit procedures', js: true do
click_on 'Ajouter un champ' click_on 'Ajouter un champ'
select "Oui/Non" select "Oui/Non"
fill_in "Libellé du champ", with: "Un champ oui non" fill_in "Libellé du champ", with: "Un champ oui non"
click_on "Revenir à l'écran de gestion" click_on "Revenir à lécran de gestion"
procedure.reload procedure.reload
first_tdc = procedure.draft_revision.types_de_champ.first first_tdc = procedure.draft_revision.types_de_champ.first
# back to procedure dashboard, explain you can set it up now # back to procedure dashboard, explain you can set it up now

View file

@ -53,8 +53,13 @@ describe 'The routing with rules', js: true do
expect(page).to have_text('Gestion des groupes') expect(page).to have_text('Gestion des groupes')
expect(page).to have_text('règle invalide') expect(page).to have_text('règle invalide')
# close modal
expect(page).to have_selector("#routing-mode-modal", visible: true)
within("#routing-mode-modal") { click_on "Fermer" }
expect(page).to have_selector("#routing-mode-modal", visible: false)
# update defaut groupe # update defaut groupe
click_on 'défaut' click_on 'Groupe 1 (à renommer et configurer)'
expect(page).to have_text('Paramètres du groupe') expect(page).to have_text('Paramètres du groupe')
fill_in 'Nom du groupe', with: 'littéraire' fill_in 'Nom du groupe', with: 'littéraire'
click_on 'Renommer' click_on 'Renommer'
@ -83,7 +88,7 @@ describe 'The routing with rules', js: true do
# # add scientifique groupe # # add scientifique groupe
click_on '3 groupes' click_on '3 groupes'
click_on 'défaut bis' click_on 'Groupe 2 (à renommer et configurer)'
fill_in 'Nom du groupe', with: 'scientifique' fill_in 'Nom du groupe', with: 'scientifique'
click_on 'Renommer' click_on 'Renommer'
expect(page).to have_text('Le nom est à présent « scientifique ». ') expect(page).to have_text('Le nom est à présent « scientifique ». ')