diff --git a/app/components/conditions/routing_rules_component/routing_rules_component.html.haml b/app/components/conditions/routing_rules_component/routing_rules_component.html.haml
index 5296b704eab..1bbe85324c7 100644
--- a/app/components/conditions/routing_rules_component/routing_rules_component.html.haml
+++ b/app/components/conditions/routing_rules_component/routing_rules_component.html.haml
@@ -3,7 +3,7 @@
method: :patch,
data: { turbo: true, controller: 'autosave' },
class: 'form width-100' do
- .conditionnel.mt-2.width-100
+ .conditionnel.width-100
.flex
- if @groupe_instructeur.invalid_rule?
%p.fr-mb-1w.fr-badge.fr-badge--warning.fr-badge--sm règle invalide
@@ -12,7 +12,7 @@
= render Conditions::ConditionsErrorsComponent.new(conditions: condition_per_row, source_tdcs: @source_tdcs)
- %table.condition-table.mt-2
+ %table.condition-table
%thead
%tr
%th.far-left
diff --git a/app/components/procedure/groupes_management_component/groupes_management_component.html.haml b/app/components/procedure/groupes_management_component/groupes_management_component.html.haml
index ef0be2b231f..ab36b8a1c25 100644
--- a/app/components/procedure/groupes_management_component/groupes_management_component.html.haml
+++ b/app/components/procedure/groupes_management_component/groupes_management_component.html.haml
@@ -1,5 +1,5 @@
- content_for(:title, 'Groupes')
-%h1 Gestion des groupes
+%h1.fr-h2 Gestion des groupes
= render Procedure::ImportComponent.new(procedure: @procedure)
@@ -17,38 +17,41 @@
Exporter la liste (.csv)
.fr-table.fr-table--no-caption.fr-table--layout-fixed.fr-mt-2w
- %table
- %caption= table_header
- %thead
- %tr
- %th{ colspan: 4 }
- Groupes
- %th{ colspan: 1 }
- Dossiers
- %th{ colspan: 1 }
- Instructeurs
- %tbody
- - @groupe_instructeurs.each do |gi|
- %tr
- %td{ colspan: 4 }
- = link_to admin_procedure_groupe_instructeur_path(@procedure, gi), class: 'fr-link' do
- %span= gi.label
- - if gi.closed
- %p.fr-badge.fr-badge--info.fr-badge--sm.fr-ml-1w inactif
- - elsif gi.invalid_rule?
- %p.fr-badge.fr-badge--warning.fr-badge--sm.fr-ml-1w règle invalide
- - elsif gi.non_unique_rule?
- %p.fr-badge.fr-badge--warning.fr-badge--sm.fr-ml-1w règle déjà attribuée à #{gi.groups_with_same_rule}
- %p= gi.routing_rule&.to_s(@procedure.active_revision.types_de_champ)
+ .fr-table__wrapper
+ .fr-table__container
+ .fr-table__content
+ %table
+ %caption= table_header
+ %thead
+ %tr
+ %th.fr-col-9{ scope: 'col' }
+ Groupes
+ %th.fr-col-1{ scope: 'col' }
+ Dossiers
+ %th.fr-col-2.fr-cell--right{ scope: 'col' }
+ Instructeurs
+ %tbody
+ - @groupe_instructeurs.each do |gi|
+ %tr
+ %td.fr-col-9{ scope: 'col' }
+ = link_to admin_procedure_groupe_instructeur_path(@procedure, gi), class: 'fr-link' do
+ %span= gi.label
+ - if gi.closed
+ %p.fr-badge.fr-badge--info.fr-badge--sm.fr-ml-1w inactif
+ - elsif gi.invalid_rule?
+ %p.fr-badge.fr-badge--warning.fr-badge--sm.fr-ml-1w règle invalide
+ - elsif gi.non_unique_rule?
+ %p.fr-badge.fr-badge--warning.fr-badge--sm.fr-ml-1w règle déjà attribuée à #{gi.groups_with_same_rule}
+ %p= gi.routing_rule&.to_s(@procedure.active_revision.types_de_champ)
- %td{ colspan: 1 }
- %span.fr-mr-1w
- #{gi.dossiers.visible_by_administration.size}
- %span.fr-icon.fr-icon-folder-2-line.fr-mr-2w{ style: 'width: 25px; text-align: center;' }
- %td{ colspan: 1 }
- %span.fr-mr-1w
- #{gi.instructeurs.count}
- %span.fr-icon.fr-icon-user-line{ style: 'width: 25px; text-align: center;' }
+ %td.fr-col-1{ scope: 'col' }
+ %span.fr-mr-1w
+ #{gi.dossiers.visible_by_administration.size}
+ %span.fr-icon.fr-icon-folder-2-line.fr-mr-2w{ style: 'width: 25px; text-align: center;' }
+ %td.fr-col-2.fr-cell--right{ scope: 'col' }
+ %span.fr-mr-1w
+ #{gi.instructeurs.count}
+ %span.fr-icon.fr-icon-user-line{ style: 'width: 25px; text-align: center;' }
.fr-mt-1w
= paginate @groupe_instructeurs
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 36f8d16652b..1652551fd45 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
@@ -1,6 +1,6 @@
- content_for(:title, 'Options')
- if @state.nil?
- %h1 Options concernant l’instruction
+ %h1.fr-h2 Options concernant l’instruction
%ul.fr-toggle__list
%li
diff --git a/app/components/procedure/one_groupe_management_component/one_groupe_management_component.fr.yml b/app/components/procedure/one_groupe_management_component/one_groupe_management_component.fr.yml
index b39822cdd35..402953cd62e 100644
--- a/app/components/procedure/one_groupe_management_component/one_groupe_management_component.fr.yml
+++ b/app/components/procedure/one_groupe_management_component/one_groupe_management_component.fr.yml
@@ -3,8 +3,12 @@ fr:
select: Sélectionner
move_files_confirmation: Réaffecter les dossiers à un autre groupe afin de pouvoir le supprimer
move_files:
- zero: Déplacer les dossiers en brouillon
- one: Déplacer un dossier
- other: Déplacer les %{count} dossiers
+ zero: Réaffecter les dossiers en brouillon
+ one: Réaffecter le dossier
+ other: Réaffecter les %{count} dossiers
+ number_of_files:
+ zero: Aucun dossier n’est actuellement affecté à ce groupe.
+ one: "%{count} dossier est actuellement affecté à ce groupe."
+ other: "%{count} dossiers sont actuellement affectés à ce groupe."
delete: Supprimer le groupe
delete_confirmation: Êtes-vous sûr de vouloir supprimer le groupe "%{group_name}" ?
diff --git a/app/components/procedure/one_groupe_management_component/one_groupe_management_component.html.haml b/app/components/procedure/one_groupe_management_component/one_groupe_management_component.html.haml
index 6356b579eaa..bddddc1337e 100644
--- a/app/components/procedure/one_groupe_management_component/one_groupe_management_component.html.haml
+++ b/app/components/procedure/one_groupe_management_component/one_groupe_management_component.html.haml
@@ -1,44 +1,51 @@
%div{ id: dom_id(@groupe_instructeur, :routing) }
- %h1 Paramètres du groupe
+ %h1.fr-h2 Configuration du groupe « #{@groupe_instructeur.label} »
+ %h2.fr-h3 Paramètres du groupe
- = render Procedure::ImportComponent.new(procedure: @procedure)
+ .card
+ = form_for @groupe_instructeur,
+ url: admin_procedure_groupe_instructeur_path(@procedure, @groupe_instructeur),
+ method: :patch do |f|
+ = f.label :label, 'Nom du groupe', class: 'fr-label fr-mb-1w'
+ .flex
+ = f.text_field :label, required: true, class: 'fr-input flex auto fr-mr-2w'
+ = f.button 'Renommer', class: 'fr-btn fr-btn--tertiary'
- = form_for @groupe_instructeur,
- url: admin_procedure_groupe_instructeur_path(@procedure, @groupe_instructeur),
- method: :patch do |f|
- = f.label :label, 'Nom du groupe', class: 'fr-label fr-mb-1w'
- .flex
- = f.text_field :label, required: true, class: 'fr-input flex auto fr-mr-2w'
- = f.button 'Renommer', class: 'fr-btn fr-btn--secondary'
-
- = form_for @groupe_instructeur,
- url: admin_procedure_groupe_instructeur_update_state_path(@procedure, @groupe_instructeur),
- method: :patch,
- data: { turbo: true, controller: 'autosubmit' } do |f|
- .fr-checkbox-group.fr-my-3w
- = f.check_box :closed, { id: 'closed', "aria-describedby" => "closed-messages", :name => "closed" }
- %label.fr-label{ :for => "closed" }
- Groupe inactif
- %span.fr-hint-text Si cette option est activée, les usagers ne pourront plus sélectionner ce groupe d’instructeurs
-
- = render Conditions::RoutingRulesComponent.new(groupe_instructeur: @groupe_instructeur)
-
- .fr-hint-text.mt-2.mb-2
- %span Si vous ne trouvez pas l'option correspondant à votre groupe, veuillez l'ajouter dans le
- %span
- = link_to 'champ concerné', champs_admin_procedure_path(@procedure)
-
- .flex.fr-btns-group--sm.fr-btns-group--inline.fr-btns-group--icon-right.mb-2
+ = form_for @groupe_instructeur,
+ url: admin_procedure_groupe_instructeur_update_state_path(@procedure, @groupe_instructeur),
+ method: :patch,
+ data: { turbo: true, controller: 'autosubmit' } do |f|
+ .fr-checkbox-group.fr-my-3w
+ = f.check_box :closed, { id: 'closed', "aria-describedby" => "closed-messages", :name => "closed" }
+ %label.fr-label{ :for => "closed" }
+ Groupe inactif
+ %span.fr-hint-text Si cette option est activée, les dossiers ne seront pas routés dans ce groupe si les usagers sélectionnent ce choix.
- if @groupe_instructeur.can_delete?
- %p= t('.delete')
= button_to admin_procedure_groupe_instructeur_path(@procedure, @groupe_instructeur),
- class: 'fr-btn fr-btn--tertiary fr-btn--icon-left fr-icon-delete-line',
+ class: 'fr-btn fr-btn--secondary fr-btn--icon-left fr-icon-delete-line',
method: :delete,
data: { confirm: t('.delete_confirmation', group_name: @groupe_instructeur.label) } do
- Supprimer
+ Supprimer ce groupe
- else
- = button_to reaffecter_dossiers_admin_procedure_groupe_instructeur_path(@procedure, @groupe_instructeur),
- class: 'fr-btn fr-btn--tertiary fr-icon-folder-2-line',
- title: t('.move_files_confirmation'),
- method: :get do
- = t('.move_files', count: @groupe_instructeur.dossiers.visible_by_administration.size)
+ %em Vous ne pouvez pas supprimer ce groupe car des dossiers lui sont affectés.
+
+ %h2.fr-h3 Dossiers affectés
+ .card
+ .flex.justify-between.align-center.fr-btns-group--sm.fr-btns-group--icon-right
+ %span.fr-icon.fr-icon-folder-2-line.fr-mr-2w
+ = t('.number_of_files', count: @groupe_instructeur.dossiers.visible_by_administration.size)
+ - if !@groupe_instructeur.can_delete?
+ = button_to reaffecter_dossiers_admin_procedure_groupe_instructeur_path(@procedure, @groupe_instructeur),
+ class: 'fr-btn fr-btn--tertiary fr-icon-folder-2-line',
+ title: t('.move_files_confirmation'),
+ method: :get do
+ = t('.move_files', count: @groupe_instructeur.dossiers.visible_by_administration.size)
+
+ %h2.fr-h3 Règle(s) de routage
+ .card
+ = render Conditions::RoutingRulesComponent.new(groupe_instructeur: @groupe_instructeur)
+ %p.fr-alert.fr-alert--info.fr-mt-3w{ aria: { hidden: true } }
+ Si vous ne trouvez pas l’option correspondant à votre groupe, veuillez l’ajouter dans le champ concerné dans la page d’édition des
+ = link_to('champs du formulaire',
+ champs_admin_procedure_path(@procedure),
+ **helpers.external_link_attributes)
diff --git a/app/controllers/concerns/groupe_instructeurs_signature_concern.rb b/app/controllers/concerns/groupe_instructeurs_signature_concern.rb
index 4e2fee3c07e..569abe2a393 100644
--- a/app/controllers/concerns/groupe_instructeurs_signature_concern.rb
+++ b/app/controllers/concerns/groupe_instructeurs_signature_concern.rb
@@ -16,7 +16,7 @@ def add_signature
@available_instructeur_emails = available_instructeur_emails
end
- flash[:alert] = "Aucun fichier joint pour le tampon de l'attestation"
+ flash[:alert] = "Aucun fichier joint pour le tampon de l’attestation"
render :show
else
if @groupe_instructeur.signature.attach(signature_file)
diff --git a/app/views/administrateurs/attestation_templates/_informations.html.haml b/app/views/administrateurs/attestation_templates/_informations.html.haml
index 35d20116da7..fca64c6d883 100644
--- a/app/views/administrateurs/attestation_templates/_informations.html.haml
+++ b/app/views/administrateurs/attestation_templates/_informations.html.haml
@@ -29,7 +29,7 @@
= render Attachment::EditComponent.new(attached_file: @attestation_template.logo, direct_upload: false)
-%h3.fr-h5.fr-mt-5w Tampon de l'attestation
+%h3.fr-h5.fr-mt-5w Tampon de l’attestation
%p.fr-text--sm.fr-text-mention--grey.fr-mb-0
Dimensions conseillées : au minimum 500px de largeur ou de hauteur.
= render Attachment::EditComponent.new(attached_file: @attestation_template.signature, direct_upload: false)
diff --git a/app/views/administrateurs/groupe_instructeurs/_contact_information.html.haml b/app/views/administrateurs/groupe_instructeurs/_contact_information.html.haml
index 5fe916c0403..2f08ea063cc 100644
--- a/app/views/administrateurs/groupe_instructeurs/_contact_information.html.haml
+++ b/app/views/administrateurs/groupe_instructeurs/_contact_information.html.haml
@@ -1,23 +1,24 @@
+%h2.fr-h3 Informations de contact
.card.mt-2
- .card-title Informations de contact
- service = groupe_instructeur.contact_information
- if service.nil?
- = "Le groupe #{groupe_instructeur.label} n'a pas d'informations de contact. Les informations de contact affichées à l'usager seront celles du service de la procédure"
- %p.mt-3
- - if groupe_instructeur.instructeurs.include?(current_administrateur.user.instructeur)
- = link_to "+ Ajouter des informations de contact", new_instructeur_groupe_contact_information_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id, from_admin: true), class: "fr-btn"
- - else
- Si vous souhaitez créer un service pour ce groupe, vous devez faire partie du groupe instructeur
+ %span Le groupe
+ %strong= groupe_instructeur.label
+ %span n’a pas d’informations de contact spécifiques.
+ %p Les informations de contact affichées à l’usager seront celles du service porteur de la démarche.
+ - if groupe_instructeur.instructeurs.include?(current_administrateur.user.instructeur)
+ = link_to "Personnaliser les informations de contact", new_instructeur_groupe_contact_information_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id, from_admin: true), class: "fr-btn"
+ - else
+ %p Si vous souhaitez créer un service pour ce groupe, vous devez faire partie du groupe instructeur
- else
- %p.mt-3
- - if groupe_instructeur.instructeurs.include?(current_administrateur.user.instructeur)
- = link_to "Modifier les informations de contact", edit_instructeur_groupe_contact_information_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id, from_admin: true), class: "fr-btn"
- - else
- Si vous souhaitez modifier ce service, vous devez faire partie du groupe instructeur
- %p.mt-3= service.nom
+ %p= service.nom
= render SimpleFormatComponent.new(service.adresse, class_names_map: {paragraph: 'fr-footer__content-desc'})
= service.email
- if service.telephone.present?
%p= service.telephone
- if service.horaires.present?
%p= service.horaires
+ - if groupe_instructeur.instructeurs.include?(current_administrateur.user.instructeur)
+ = link_to "Modifier les informations de contact", edit_instructeur_groupe_contact_information_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id, from_admin: true), class: "fr-btn"
+ - else
+ %p Si vous souhaitez modifier ce service, vous devez faire partie du groupe instructeur
diff --git a/app/views/administrateurs/groupe_instructeurs/_instructeurs.html.haml b/app/views/administrateurs/groupe_instructeurs/_instructeurs.html.haml
index c2f3a318670..82362a3863f 100644
--- a/app/views/administrateurs/groupe_instructeurs/_instructeurs.html.haml
+++ b/app/views/administrateurs/groupe_instructeurs/_instructeurs.html.haml
@@ -1,12 +1,20 @@
+%h2.fr-h3= t('.instructeur_assignation')
+
.card
+ .card-title= t('.title')
+ - if procedure.routing_enabled?
+ .fr-icon-mail-line.fr-alert.fr-mb-3w
+ - if @procedure.publiee?
+ = t(".notification_alert_publiee_html")
+ - else
+ = t(".notification_alert_html")
+
= render Procedure::InvitationWithTypoComponent.new(maybe_typos: @maybe_typos, url: add_instructeur_admin_procedure_groupe_instructeur_path(@procedure, groupe_instructeur.id), title: "Avant d'ajouter l'email, veuillez confirmer" )
- .card-title= t('.instructeur_assignation')
= form_for :instructeur, url: { action: :add_instructeur, id: groupe_instructeur.id }, html: { class: 'form' } do |f|
.instructeur-wrapper
- - if !procedure.routing_enabled?
- %p= t('.instructeur_emails')
- %p.fr-hint-text= t('.copy_paste_hint')
+ %p= t('.instructeur_emails')
+ %p.fr-hint-text= t('.copy_paste_hint')
- if disabled_as_super_admin
= f.select :emails, available_instructeur_emails, {}, disabled: disabled_as_super_admin, id: 'instructeur_emails'
@@ -20,32 +28,33 @@
.flex.justify-between.align-baseline
.card-title= t('.assigned_instructeur', count: instructeurs.total_count)
- = button_to export_groupe_instructeurs_admin_procedure_groupe_instructeurs_path(procedure, format: :csv), method: :get, class: 'fr-btn fr-btn--tertiary fr-btn--icon-left fr-icon-download-line' do
- Exporter la liste (.csv)
+ - if !@procedure.routing_enabled?
+ = button_to export_groupe_instructeurs_admin_procedure_groupe_instructeurs_path(procedure, format: :csv), method: :get, class: 'fr-btn fr-btn--tertiary fr-btn--icon-left fr-icon-download-line' do
+ Exporter la liste (.csv)
- .fr-table
+ .fr-table.fr-table--bordered.fr-table--no-caption
.fr-table__wrapper
.fr-table__container
.fr-table__content
%table
%thead
%tr
- %th{ scope: 'col' }= t('.title')
- %th{ scope: 'col' }= t('.actions')
+ %th.fr-col-11{ scope: 'col' }= t('.table_title')
+ %th.fr-col-1.fr-cell--center{ scope: 'col' }= t('.actions')
%tbody
- instructeurs.each do |instructeur|
%tr
- %td
+ %td.fr-col-11{ scope: 'col' }
= dsfr_icon('fr-icon-user-line')
#{instructeur.email}
- confirmation_message = procedure.routing_enabled? ? "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » du groupe « #{groupe_instructeur.label} » ?" : "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » de la démarche ?"
- %td.actions= button_to t('.remove'),
+ %td.fr-col-1.fr-cell--center.actions{ scope: 'col' }= button_to t('.remove'),
{ action: :remove_instructeur, id: groupe_instructeur.id },
{ method: :delete,
data: { confirm: confirmation_message },
params: { instructeur: { id: instructeur.id }},
- class: 'fr-btn fr-btn--sm fr-btn--secondary fr-btn--icon-left fr-icon-subtract-line' }
+ class: 'fr-btn fr-btn--sm fr-btn--secondary fr-btn--icon-left fr-icon-subtract-line fr-cell---right' }
.fr-table__footer
.fr-table__footer--start
diff --git a/app/views/shared/groupe_instructeurs/_signature_form.html.haml b/app/views/shared/groupe_instructeurs/_signature_form.html.haml
index 170168729fa..865bf51d209 100644
--- a/app/views/shared/groupe_instructeurs/_signature_form.html.haml
+++ b/app/views/shared/groupe_instructeurs/_signature_form.html.haml
@@ -1,13 +1,15 @@
+%h2.fr-h3 Tampon de l’attestation d’acceptation
.card.mt-2
- %h2.fr-h3 Tampon de l'attestation
= render NestedForms::FormOwnerComponent.new
= form_with url: { action: :add_signature }, method: :post, html: { multipart: true } do |f|
- %p.fr-text--sm.fr-text-mention--grey
- Vous pouvez apposer sur l’attestation un tampon (ou signature) dédié à ce groupe d’instructeurs.
+ %p
+ Vous pouvez apposer sur l’attestation d’acceptation du dossier un tampon (ou signature) dédié à ce groupe d’instructeurs.
Si vous n’en fournissez pas, celui de la démarche sera utilisé, le cas échéant.
- .fr-upload-group.fr-mb-4w
- %p.fr-text--sm.fr-text-mention--grey.fr-mb-1w
+ .fr-upload-group.fr-mb-2w
+ .card-title
+ Tampon
+ .fr-hint-text
Dimensions conseillées : au minimum 500px de largeur ou de hauteur.
= render Attachment::EditComponent.new(attached_file: groupe_instructeur.signature, direct_upload: false)
diff --git a/config/locales/views/administrateurs/groupe_instructeurs/en.yml b/config/locales/views/administrateurs/groupe_instructeurs/en.yml
index 790906ba27a..a8148c4b5c8 100644
--- a/config/locales/views/administrateurs/groupe_instructeurs/en.yml
+++ b/config/locales/views/administrateurs/groupe_instructeurs/en.yml
@@ -20,7 +20,7 @@ en:
one: "%{count} group exist"
other: "%{count} groups exist"
instructeurs:
- title: Instructors
+ title: Assign a new instructor
assigned_instructeur:
one: "%{count} instructor assigned"
other: "%{count} instructors assigned"
diff --git a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml
index 0594811e35f..86b01f36cb5 100644
--- a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml
+++ b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml
@@ -27,16 +27,19 @@ fr:
one: "%{count} groupe existe"
other: "%{count} groupes existent"
instructeurs:
- title: Instructeurs
+ title: Affecter un nouvel instructeur
+ table_title: Instructeurs
assigned_instructeur:
one: "%{count} instructeur affecté"
other: "%{count} instructeurs affectés"
instructeur_assignation: Affectation des instructeurs
assign: Affecter
remove: Retirer
- instructeur_emails: Adresse électronique des instructeurs que vous souhaitez affecter à cette démarche
+ instructeur_emails: Adresse(s) électronique(s)
copy_paste_hint: "Vous pouvez saisir les adresses individuellement, ou bien copier-coller dans le champ ci-dessous une liste d’adresses séparées par des points-virgules (exemple : adresse1@mail.com; adresse2@mail.com; adresse3@mail.com)."
- actions: Retirer
+ actions: Action
+ notification_alert_html: Même si votre démarche est encore en test / non publiée, tous les instructeurs que vous ajouterez à la démarche seront notifiés par email.
+ notification_alert_publiee_html: Tous les instructeurs que vous ajouterez à la démarche seront notifiés par email.
import:
groupe:
one: "%{count} groupe"