update wording and cards order
This commit is contained in:
parent
b419c48262
commit
63ae328bee
10 changed files with 73 additions and 85 deletions
|
@ -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 d’instructeurs « #{@groupe_instructeur.label} » a été créé."
|
notice: "Le groupe d’instructeurs « #{@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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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 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
|
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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é d’une 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: L’import d’instructeurs par fichier CSV est disponible une fois la démarche publiée
|
import_file_procedure_not_published: L’import d’instructeurs 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 l’instruction entre différents groupes en fonction d’un 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 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.
|
|
||||||
<br><br>
|
|
||||||
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.
|
|
||||||
button:
|
button:
|
||||||
routing_enable: Activer le routage
|
|
||||||
routing_disable: Désactiver le routage
|
|
||||||
self_managment_toggle: Activer l’autogestion des instructeurs
|
self_managment_toggle: Activer l’autogestion des instructeurs
|
||||||
add_group: Ajouter le groupe
|
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.
|
||||||
|
|
|
@ -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 d’instructeurs « 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("L’instructeur 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("L’instructeur 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 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
|
# 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 d’instructeurs'
|
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'
|
click_on 'Ajouter le groupe'
|
||||||
expect(page).to have_text('Le groupe d’instructeurs « scientifique » a été créé.')
|
expect(page).to have_text('Le groupe d’instructeurs « scientifique » a été créé.')
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue