update wording and cards order

This commit is contained in:
Eric Leroy-Terquem 2022-10-17 11:01:55 +02:00
parent b419c48262
commit 63ae328bee
10 changed files with 73 additions and 85 deletions

View file

@ -15,13 +15,8 @@ module Administrateurs
@procedure = procedure @procedure = procedure
@groupes_instructeurs = paginated_groupe_instructeurs @groupes_instructeurs = paginated_groupe_instructeurs
if procedure.routee? @instructeurs = paginated_instructeurs
@instructeurs = [] @available_instructeur_emails = available_instructeur_emails
@available_instructeur_emails = []
else
@instructeurs = paginated_instructeurs
@available_instructeur_emails = available_instructeur_emails
end
end end
def show def show
@ -37,8 +32,9 @@ module Administrateurs
.new({ instructeurs: [current_administrateur.instructeur] }.merge(groupe_instructeur_params)) .new({ instructeurs: [current_administrateur.instructeur] }.merge(groupe_instructeur_params))
if @groupe_instructeur.save 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), redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
notice: "Le groupe dinstructeurs « #{@groupe_instructeur.label} » a été créé." notice: "Le groupe dinstructeurs « #{@groupe_instructeur.label} » a été créé#{routing_notice}."
else else
@procedure = procedure @procedure = procedure
@instructeurs = paginated_instructeurs @instructeurs = paginated_instructeurs
@ -60,7 +56,7 @@ module Administrateurs
@instructeurs = paginated_instructeurs @instructeurs = paginated_instructeurs
@available_instructeur_emails = available_instructeur_emails @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('<br>')
render :show render :show
end end
end end
@ -76,9 +72,9 @@ module Administrateurs
@groupe_instructeur.destroy! @groupe_instructeur.destroy!
if procedure.groupe_instructeurs.actif.count == 1 if procedure.groupe_instructeurs.actif.count == 1
procedure.update!(routing_enabled: false) procedure.update!(routing_enabled: false)
routing_notice = " et le routage a été désactivé"
end 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 end
redirect_to admin_procedure_groupe_instructeurs_path(procedure) redirect_to admin_procedure_groupe_instructeurs_path(procedure)
end end

View file

@ -20,6 +20,7 @@ class GroupeInstructeur < ApplicationRecord
validates :label, presence: { message: 'doit être renseigné' }, allow_nil: false validates :label, presence: { message: 'doit être renseigné' }, allow_nil: false
validates :label, uniqueness: { scope: :procedure, message: 'existe déjà' } 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! } before_validation -> { label&.strip! }
after_create :toggle_routing after_create :toggle_routing

View file

@ -13,4 +13,4 @@
= f.check_box :closed = f.check_box :closed
%br %br
= f.submit 'Valider', class: 'button primary send' = f.submit 'Modifier le groupe', class: 'button primary send'

View file

@ -1,15 +1,14 @@
- groupe_instructeurs_count = procedure.groupe_instructeurs.count - if groupes_instructeurs.many?
.card .card
= form_for procedure, = form_for procedure,
url: { action: :update_routing_criteria_name }, url: { action: :update_routing_criteria_name },
html: { class: 'form' } do |f| html: { class: 'form' } do |f|
= f.label :routing_criteria_name do = f.label :routing_criteria_name do
= t('.routing.title') = t('.routing.title')
%p.notice %p.notice
= t('.routing.notice') = f.text_field :routing_criteria_name, required: true
= f.text_field :routing_criteria_name, placeholder: t('.add_a_group.placeholder'), required: true = f.submit t('.button.rename'), class: 'button primary send'
= f.submit t('.button.rename'), class: 'button primary send'
.card .card
.card-title .card-title
@ -18,9 +17,10 @@
= form_for :groupe_instructeur, html: { class: 'form' } do |f| = form_for :groupe_instructeur, html: { class: 'form' } do |f|
= f.label :label do = f.label :label do
= t('.add_a_group.title') = t('.add_a_group.title')
%p.notice - if groupes_instructeurs.many?
= t('.add_a_group.notice', routing_criteria_name: procedure.routing_criteria_name) %p.notice
= f.text_field :label, placeholder: t('.add_a_group.placeholder'), required: true = 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" = f.submit t('.button.add_group'), class: "button primary send"
- csv_max_size = Administrateurs::GroupeInstructeursController::CSV_MAX_SIZE - csv_max_size = Administrateurs::GroupeInstructeursController::CSV_MAX_SIZE
@ -51,7 +51,7 @@
- groupes_instructeurs.each do |group| - groupes_instructeurs.each do |group|
%tr %tr
%td= group.label %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 groupes_instructeurs.many?
- if group.dossiers.empty? - if group.dossiers.empty?
%td.actions %td.actions

View file

@ -0,0 +1,13 @@
.card
%h2.card-title Lautogestion 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

View file

@ -1,19 +1,4 @@
.card .card
%h2.card-title= t('.title') %h2.card-title= t('.title')
- if !procedure.routee? %p.notice= t('.notice_html')
%p.notice= t('.notice_html')
.card
%h2.card-title Lautogestion 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

View file

@ -12,9 +12,6 @@
.container.groupe-instructeur .container.groupe-instructeur
%h1 Gérer les instructeurs et les options d'instruction de « #{@procedure.libelle} » %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? - if @procedure.groupe_instructeurs.one?
= render partial: 'administrateurs/groupe_instructeurs/instructeurs', = render partial: 'administrateurs/groupe_instructeurs/instructeurs',
locals: { procedure: @procedure, locals: { procedure: @procedure,
@ -22,3 +19,9 @@
instructeurs: @instructeurs, instructeurs: @instructeurs,
available_instructeur_emails: @available_instructeur_emails, available_instructeur_emails: @available_instructeur_emails,
disabled_as_super_admin: administrateur_as_manager? } 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 }

View file

@ -26,8 +26,7 @@ en:
other: "%{count} instructors are assigned" other: "%{count} instructors are assigned"
edit: edit:
routing: routing:
title: Routing label title: Label of the groups list
notice: This text will appear on the user form as the label of a list
group_management: group_management:
title: Group management title: Group management
delete: delete the group delete: delete the group
@ -37,7 +36,6 @@ en:
add_a_group: add_a_group:
title: Add a group title: Add a group
notice: This group will be a choice from the list "%{routing_criteria_name}" notice: This group will be a choice from the list "%{routing_criteria_name}"
placeholder: ex. City of Bordeaux
csv_import: csv_import:
title: 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. 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 download_exemple: Download sample CSV file
import_file: Import 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 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: button:
add_group: Add group add_group: Add group
rename: Rename 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. 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.
<br><br> <br><br>
Instructors only see the files that concern them, and therefore do not have access to data outside their scope. Instructors only see the files that concern them, and therefore do not have access to data outside their scope.
<br><br>
Routing is activated once there are at least two active instructors groups
instructeurs_self_management:
self_managment_notice_html: | self_managment_notice_html: |
Instructor Self-Management allows instructors to self-manage the list of Gait Instructors. Instructor Self-Management allows instructors to self-manage the list of Gait Instructors.
button:
routing_enable: Enable routing
routing_disable: Disable routing

View file

@ -32,8 +32,7 @@ fr:
other: "%{count} instructeurs sont affectés" other: "%{count} instructeurs sont affectés"
edit: edit:
routing: routing:
title: Libellé du routage title: Libellé de la liste de groupes
notice: Ce texte apparaitra sur le formulaire usager comme le libellé dune liste
group_management: group_management:
title: Gestion des Groupes title: Gestion des Groupes
delete: supprimer le groupe delete: supprimer le groupe
@ -41,9 +40,8 @@ fr:
move_folders: déplacer les dossiers move_folders: déplacer les dossiers
move_folders_confirmation: Réaffecter les dossiers à un autre groupe afin de pouvoir le supprimer move_folders_confirmation: Réaffecter les dossiers à un autre groupe afin de pouvoir le supprimer
add_a_group: 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}" notice: Ce groupe sera un choix de la liste "%{routing_criteria_name}"
placeholder: ex. Ville de Bordeaux
csv_import: csv_import:
title: Importer par CSV 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. 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: Importer le fichier
import_file_procedure_not_published: Limport dinstructeurs par fichier CSV est disponible une fois la démarche publiée import_file_procedure_not_published: Limport dinstructeurs par fichier CSV est disponible une fois la démarche publiée
view: voir view: voir
set_up: paramétrer
button: button:
add_group: Ajouter le groupe add_group: Ajouter le groupe
rename: Renommer rename: Renommer
@ -61,15 +60,10 @@ fr:
routing: routing:
title: Routage title: Routage
notice_html: | notice_html: |
Le routage est une fonctionnalité pour les démarches nécessitant le partage de linstruction entre différents groupes en fonction dun critère précis (territoire, thématique ou autre). 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.
<br><br>
Cette fonctionnalité permet dacheminer 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.
<br><br>
Les instructeurs ne voient que les dossiers les concernant, et nont donc pas accès aux données extérieures à leur périmètre.
self_managment_notice_html: |
Lautogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.
button: button:
routing_enable: Activer le routage
routing_disable: Désactiver le routage
self_managment_toggle: Activer lautogestion des instructeurs self_managment_toggle: Activer lautogestion des instructeurs
add_group: Ajouter le groupe add_group: Ajouter le groupe
instructeurs_self_management:
self_managment_notice_html: |
Lautogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.

View file

@ -12,46 +12,44 @@ describe 'The routing', js: true do
scenario 'works' do scenario 'works' do
login_as administrateur.user, scope: :user login_as administrateur.user, scope: :user
visit admin_procedure_path(procedure.id) visit admin_procedure_path(procedure.id)
find('#groupe-instructeurs').click find('#groupe-instructeurs').click
# rename routing criteria to spécialité # add littéraire groupe
fill_in 'Libellé du routage', with: 'spécialité' fill_in 'Ajouter un nom de groupe', with: 'littéraire'
click_on 'Renommer' click_on 'Ajouter le groupe'
expect(page).to have_text('Le libellé est maintenant « spécialité ».') expect(page).to have_text('Le groupe dinstructeurs « littéraire » a été créé et le routage a été activé.')
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 victor to littéraire groupe # add victor to littéraire groupe
fill_in 'Emails', with: 'victor@inst.com' fill_in 'Emails', with: 'victor@inst.com'
perform_enqueued_jobs { click_on 'Affecter' } 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("Linstructeur victor@inst.com a été affecté")
victor = User.find_by(email: 'victor@inst.com').instructeur victor = User.find_by(email: 'victor@inst.com').instructeur
# add superwoman to littéraire groupe # add superwoman to littéraire groupe
fill_in 'Emails', with: 'superwoman@inst.com' fill_in 'Emails', with: 'superwoman@inst.com'
perform_enqueued_jobs { click_on 'Affecter' } 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("Linstructeur superwoman@inst.com a été affecté")
superwoman = User.find_by(email: 'superwoman@inst.com').instructeur superwoman = User.find_by(email: 'superwoman@inst.com').instructeur
# rename routing criteria to spécialité
click_on 'Groupes dinstructeurs'
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 # 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' click_on 'Ajouter le groupe'
check "Groupe inactif" check "Groupe inactif"
click_on 'Valider' click_on 'Modifier'
# add scientifique groupe # add scientifique groupe
click_on 'Groupes dinstructeurs' click_on 'Groupes dinstructeurs'
fill_in 'Ajouter un groupe', with: 'scientifique' fill_in 'Ajouter un nom de groupe', with: 'scientifique'
click_on 'Ajouter le groupe' click_on 'Ajouter le groupe'
expect(page).to have_text('Le groupe dinstructeurs « scientifique » a été créé.') expect(page).to have_text('Le groupe dinstructeurs « scientifique » a été créé.')