From 63ae328bee515f52be71e5e31cf9c2b628bafbd4 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 17 Oct 2022 11:01:55 +0200 Subject: [PATCH] update wording and cards order --- .../groupe_instructeurs_controller.rb | 18 ++++------ app/models/groupe_instructeur.rb | 1 + app/views/administrateurs/_groups_header.haml | 2 +- .../groupe_instructeurs/_edit.html.haml | 30 ++++++++-------- .../_instructeurs_self_management.html.haml | 13 +++++++ .../groupe_instructeurs/_routing.html.haml | 17 +--------- .../groupe_instructeurs/index.html.haml | 9 +++-- .../groupe_instructeurs/en.yml | 14 ++++---- .../groupe_instructeurs/fr.yml | 20 ++++------- spec/system/routing/full_scenario_spec.rb | 34 +++++++++---------- 10 files changed, 73 insertions(+), 85 deletions(-) create mode 100644 app/views/administrateurs/groupe_instructeurs/_instructeurs_self_management.html.haml diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 3b0d2c1f5..b241aa86d 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -15,13 +15,8 @@ module Administrateurs @procedure = procedure @groupes_instructeurs = paginated_groupe_instructeurs - if procedure.routee? - @instructeurs = [] - @available_instructeur_emails = [] - else - @instructeurs = paginated_instructeurs - @available_instructeur_emails = available_instructeur_emails - end + @instructeurs = paginated_instructeurs + @available_instructeur_emails = available_instructeur_emails end def show @@ -37,8 +32,9 @@ module Administrateurs .new({ instructeurs: [current_administrateur.instructeur] }.merge(groupe_instructeur_params)) if @groupe_instructeur.save + routing_notice = " et le routage a été activé" if procedure.groupe_instructeurs.actif.size == 2 redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur), - notice: "Le groupe d’instructeurs « #{@groupe_instructeur.label} » a été créé." + notice: "Le groupe d’instructeurs « #{@groupe_instructeur.label} » a été créé#{routing_notice}." else @procedure = procedure @instructeurs = paginated_instructeurs @@ -60,7 +56,7 @@ module Administrateurs @instructeurs = paginated_instructeurs @available_instructeur_emails = available_instructeur_emails - flash[:alert] = "le nom « #{@groupe_instructeur.label} » est déjà pris par un autre groupe." + flash[:alert] = @groupe_instructeur.errors.values.join('
') render :show end end @@ -76,9 +72,9 @@ module Administrateurs @groupe_instructeur.destroy! if procedure.groupe_instructeurs.actif.count == 1 procedure.update!(routing_enabled: false) + routing_notice = " et le routage a été désactivé" end - routing_notice = "et le routage a été désactivé" if procedure.groupe_instructeurs.size == 1 - flash[:notice] = "le groupe « #{@groupe_instructeur.label} » a été supprimé #{routing_notice}." + flash[:notice] = "le groupe « #{@groupe_instructeur.label} » a été supprimé#{routing_notice}." end redirect_to admin_procedure_groupe_instructeurs_path(procedure) end diff --git a/app/models/groupe_instructeur.rb b/app/models/groupe_instructeur.rb index 7d054b8e0..c1f8884ce 100644 --- a/app/models/groupe_instructeur.rb +++ b/app/models/groupe_instructeur.rb @@ -20,6 +20,7 @@ class GroupeInstructeur < ApplicationRecord validates :label, presence: { message: 'doit être renseigné' }, allow_nil: false validates :label, uniqueness: { scope: :procedure, message: 'existe déjà' } + validates :closed, acceptance: { accept: [false], message: "Modification impossible : il doit y avoir au moins un groupe instructeur actif sur chaque procédure" }, if: -> { self.procedure.groupe_instructeurs.actif.one? } before_validation -> { label&.strip! } after_create :toggle_routing diff --git a/app/views/administrateurs/_groups_header.haml b/app/views/administrateurs/_groups_header.haml index 7641aaca2..36493a519 100644 --- a/app/views/administrateurs/_groups_header.haml +++ b/app/views/administrateurs/_groups_header.haml @@ -13,4 +13,4 @@ = f.check_box :closed %br - = f.submit 'Valider', class: 'button primary send' + = f.submit 'Modifier le groupe', class: 'button primary send' diff --git a/app/views/administrateurs/groupe_instructeurs/_edit.html.haml b/app/views/administrateurs/groupe_instructeurs/_edit.html.haml index 4d79c3813..16c738ff1 100644 --- a/app/views/administrateurs/groupe_instructeurs/_edit.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/_edit.html.haml @@ -1,15 +1,14 @@ -- groupe_instructeurs_count = procedure.groupe_instructeurs.count -.card - = form_for procedure, - url: { action: :update_routing_criteria_name }, - html: { class: 'form' } do |f| +- if groupes_instructeurs.many? + .card + = form_for procedure, + url: { action: :update_routing_criteria_name }, + html: { class: 'form' } do |f| - = f.label :routing_criteria_name do - = t('.routing.title') - %p.notice - = t('.routing.notice') - = f.text_field :routing_criteria_name, placeholder: t('.add_a_group.placeholder'), required: true - = f.submit t('.button.rename'), class: 'button primary send' + = f.label :routing_criteria_name do + = t('.routing.title') + %p.notice + = f.text_field :routing_criteria_name, required: true + = f.submit t('.button.rename'), class: 'button primary send' .card .card-title @@ -18,9 +17,10 @@ = form_for :groupe_instructeur, html: { class: 'form' } do |f| = f.label :label do = t('.add_a_group.title') - %p.notice - = t('.add_a_group.notice', routing_criteria_name: procedure.routing_criteria_name) - = f.text_field :label, placeholder: t('.add_a_group.placeholder'), required: true + - if groupes_instructeurs.many? + %p.notice + = t('.add_a_group.notice', routing_criteria_name: procedure.routing_criteria_name) + = f.text_field :label, required: true = f.submit t('.button.add_group'), class: "button primary send" - csv_max_size = Administrateurs::GroupeInstructeursController::CSV_MAX_SIZE @@ -51,7 +51,7 @@ - groupes_instructeurs.each do |group| %tr %td= group.label - %td.actions= link_to t('.view'), admin_procedure_groupe_instructeur_path(procedure, group) + %td.actions= link_to t('.set_up'), admin_procedure_groupe_instructeur_path(procedure, group) - if groupes_instructeurs.many? - if group.dossiers.empty? %td.actions diff --git a/app/views/administrateurs/groupe_instructeurs/_instructeurs_self_management.html.haml b/app/views/administrateurs/groupe_instructeurs/_instructeurs_self_management.html.haml new file mode 100644 index 000000000..94e0fcf11 --- /dev/null +++ b/app/views/administrateurs/groupe_instructeurs/_instructeurs_self_management.html.haml @@ -0,0 +1,13 @@ +.card + %h2.card-title L‘autogestion des instructeurs + %p.notice= t('.self_managment_notice_html') + + = form_for procedure, + method: :patch, + url: update_instructeurs_self_management_enabled_admin_procedure_groupe_instructeurs_path(procedure), + html: { class: 'form procedure-form__column--form no-background' } do |f| + %label.toggle-switch + = f.check_box :instructeurs_self_management_enabled, class: 'toggle-switch-checkbox', onchange: 'this.form.submit()' + %span.toggle-switch-control.round + %span.toggle-switch-label.on + %span.toggle-switch-label.off diff --git a/app/views/administrateurs/groupe_instructeurs/_routing.html.haml b/app/views/administrateurs/groupe_instructeurs/_routing.html.haml index 80b3e1e61..1530dab59 100644 --- a/app/views/administrateurs/groupe_instructeurs/_routing.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/_routing.html.haml @@ -1,19 +1,4 @@ .card %h2.card-title= t('.title') - - if !procedure.routee? - %p.notice= t('.notice_html') - -.card - %h2.card-title L‘autogestion des instructeurs - %p.notice= t('.self_managment_notice_html') - - = form_for procedure, - method: :patch, - url: update_instructeurs_self_management_enabled_admin_procedure_groupe_instructeurs_path(procedure), - html: { class: 'form procedure-form__column--form no-background' } do |f| - %label.toggle-switch - = f.check_box :instructeurs_self_management_enabled, class: 'toggle-switch-checkbox', onchange: 'this.form.submit()' - %span.toggle-switch-control.round - %span.toggle-switch-label.on - %span.toggle-switch-label.off + %p.notice= t('.notice_html') diff --git a/app/views/administrateurs/groupe_instructeurs/index.html.haml b/app/views/administrateurs/groupe_instructeurs/index.html.haml index 45ef9bb60..a7e42cf52 100644 --- a/app/views/administrateurs/groupe_instructeurs/index.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/index.html.haml @@ -12,9 +12,6 @@ .container.groupe-instructeur %h1 Gérer les instructeurs et les options d'instruction de « #{@procedure.libelle} » - = render partial: 'administrateurs/groupe_instructeurs/routing', locals: { procedure: @procedure } - - = render partial: 'administrateurs/groupe_instructeurs/edit', locals: { procedure: @procedure, groupes_instructeurs: @groupes_instructeurs } - if @procedure.groupe_instructeurs.one? = render partial: 'administrateurs/groupe_instructeurs/instructeurs', locals: { procedure: @procedure, @@ -22,3 +19,9 @@ instructeurs: @instructeurs, available_instructeur_emails: @available_instructeur_emails, disabled_as_super_admin: administrateur_as_manager? } + - if !@procedure.routee? + = render partial: 'administrateurs/groupe_instructeurs/instructeurs_self_management', locals: { procedure: @procedure } + + = render partial: 'administrateurs/groupe_instructeurs/routing', locals: { procedure: @procedure } + + = render partial: 'administrateurs/groupe_instructeurs/edit', locals: { procedure: @procedure, groupes_instructeurs: @groupes_instructeurs } diff --git a/config/locales/views/administrateurs/groupe_instructeurs/en.yml b/config/locales/views/administrateurs/groupe_instructeurs/en.yml index e673fcfab..3f7d89d42 100644 --- a/config/locales/views/administrateurs/groupe_instructeurs/en.yml +++ b/config/locales/views/administrateurs/groupe_instructeurs/en.yml @@ -26,8 +26,7 @@ en: other: "%{count} instructors are assigned" edit: routing: - title: Routing label - notice: This text will appear on the user form as the label of a list + title: Label of the groups list group_management: title: Group management delete: delete the group @@ -37,7 +36,6 @@ en: add_a_group: title: Add a group notice: This group will be a choice from the list "%{routing_criteria_name}" - placeholder: ex. City of Bordeaux csv_import: title: CSV Import notice_1: The csv file must have 2 columns (Group, Email) and be separated by commas. The import does not overwrite existing groups and instructors. @@ -45,7 +43,7 @@ en: download_exemple: Download sample CSV file import_file: Import file import_file_procedure_not_published: The import of instructors by CSV file is available once the process has been published - view: view + set_up: set up button: add_group: Add group rename: Rename @@ -60,8 +58,8 @@ en: This feature makes it possible to route the files to each group, and to no longer need to filter its files among a large quantity of requests. It is therefore particularly suitable for national approaches instructed locally.

Instructors only see the files that concern them, and therefore do not have access to data outside their scope. +

+ Routing is activated once there are at least two active instructors groups + instructeurs_self_management: self_managment_notice_html: | - Instructor Self-Management allows instructors to self-manage the list of Gait Instructors. - button: - routing_enable: Enable routing - routing_disable: Disable routing + Instructor Self-Management allows instructors to self-manage the list of Gait Instructors. diff --git a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml index 25a9207e9..f86429d51 100644 --- a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml +++ b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml @@ -32,8 +32,7 @@ fr: other: "%{count} instructeurs sont affectés" edit: routing: - title: Libellé du routage - notice: Ce texte apparaitra sur le formulaire usager comme le libellé d’une liste + title: Libellé de la liste de groupes group_management: title: Gestion des Groupes delete: supprimer le groupe @@ -41,9 +40,8 @@ fr: move_folders: déplacer les dossiers move_folders_confirmation: Réaffecter les dossiers à un autre groupe afin de pouvoir le supprimer add_a_group: - title: Ajouter un groupe + title: Ajouter un nom de groupe notice: Ce groupe sera un choix de la liste "%{routing_criteria_name}" - placeholder: ex. Ville de Bordeaux csv_import: title: Importer par CSV notice_1: Le fichier csv doit comporter 2 colonnes (Groupe, Email) et être séparé par des virgules. L'import n'écrase pas les groupes et les instructeurs existants. @@ -52,6 +50,7 @@ fr: import_file: Importer le fichier import_file_procedure_not_published: L’import d’instructeurs par fichier CSV est disponible une fois la démarche publiée view: voir + set_up: paramétrer button: add_group: Ajouter le groupe rename: Renommer @@ -61,15 +60,10 @@ fr: routing: title: Routage notice_html: | - Le routage est une fonctionnalité pour les démarches nécessitant le partage de l’instruction entre différents groupes en fonction d’un critère précis (territoire, thématique ou autre). -

- Cette fonctionnalité permet d’acheminer les dossier vers chaque groupe, et de ne plus avoir besoin de filtrer ses dossiers parmi une grande quantité de demandes. Elle est donc particulièrement adaptée pour les démarches nationales instruites localement. -

- Les instructeurs ne voient que les dossiers les concernant, et n’ont donc pas accès aux données extérieures à leur périmètre. - self_managment_notice_html: | - L’autogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche. + Le routage permet d'acheminer les dossiers vers différents groupes d'instructeurs. Il s'active automatiquement dès qu'une démarche compte au moins deux groupes actifs. button: - routing_enable: Activer le routage - routing_disable: Désactiver le routage self_managment_toggle: Activer l’autogestion des instructeurs add_group: Ajouter le groupe + instructeurs_self_management: + self_managment_notice_html: | + L’autogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche. diff --git a/spec/system/routing/full_scenario_spec.rb b/spec/system/routing/full_scenario_spec.rb index dfd1eb676..b5cef93e1 100644 --- a/spec/system/routing/full_scenario_spec.rb +++ b/spec/system/routing/full_scenario_spec.rb @@ -12,46 +12,44 @@ describe 'The routing', js: true do scenario 'works' do login_as administrateur.user, scope: :user - visit admin_procedure_path(procedure.id) find('#groupe-instructeurs').click - # rename routing criteria to spécialité - fill_in 'Libellé du routage', with: 'spécialité' - click_on 'Renommer' - expect(page).to have_text('Le libellé est maintenant « spécialité ».') - expect(page).to have_field('Libellé du routage', with: 'spécialité') - - # rename defaut groupe to littéraire - click_on 'voir' - fill_in 'Nom du groupe', with: 'littéraire' - click_on 'Valider' - expect(page).to have_text('Le nom est à présent « littéraire ».') - expect(page).to have_field('Nom du groupe', with: 'littéraire') + # add littéraire groupe + fill_in 'Ajouter un nom de groupe', with: 'littéraire' + click_on 'Ajouter le groupe' + expect(page).to have_text('Le groupe d’instructeurs « littéraire » a été créé et le routage a été activé.') # add victor to littéraire groupe fill_in 'Emails', with: 'victor@inst.com' perform_enqueued_jobs { click_on 'Affecter' } - expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") + expect(page).to have_text("L’instructeur victor@inst.com a été affecté") victor = User.find_by(email: 'victor@inst.com').instructeur # add superwoman to littéraire groupe fill_in 'Emails', with: 'superwoman@inst.com' perform_enqueued_jobs { click_on 'Affecter' } - expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") + expect(page).to have_text("L’instructeur superwoman@inst.com a été affecté") superwoman = User.find_by(email: 'superwoman@inst.com').instructeur + # rename routing criteria to spécialité + click_on 'Groupes d’instructeurs' + fill_in 'Libellé de la liste de groupes', with: 'spécialité' + click_on 'Renommer' + expect(page).to have_text('Le libellé est maintenant « spécialité ».') + expect(page).to have_field('Libellé de la liste de groupes', with: 'spécialité') + # add inactive groupe - fill_in 'Ajouter un groupe', with: 'non visible car inactif' + fill_in 'Ajouter un nom de groupe', with: 'non visible car inactif' click_on 'Ajouter le groupe' check "Groupe inactif" - click_on 'Valider' + click_on 'Modifier' # add scientifique groupe click_on 'Groupes d’instructeurs' - fill_in 'Ajouter un groupe', with: 'scientifique' + fill_in 'Ajouter un nom de groupe', with: 'scientifique' click_on 'Ajouter le groupe' expect(page).to have_text('Le groupe d’instructeurs « scientifique » a été créé.')