Merge pull request #10286 from demarches-simplifiees/fix-app-name-hardcoded

ETQ admin: form des infos de démarche plus lisible
This commit is contained in:
Colin Darie 2024-04-17 08:14:39 +00:00 committed by GitHub
commit 09dd31829a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 184 additions and 150 deletions

View file

@ -383,7 +383,7 @@ module Administrateurs
def close def close
@published_procedures = current_administrateur.procedures.publiees.to_h { |p| ["#{p.libelle} (#{p.id})", p.id] } @published_procedures = current_administrateur.procedures.publiees.to_h { |p| ["#{p.libelle} (#{p.id})", p.id] }
@closing_reason_options = Procedure.closing_reasons.values.map { |reason| [I18n.t("activerecord.attributes.procedure.closing_reasons.#{reason}"), reason] } @closing_reason_options = Procedure.closing_reasons.values.map { |reason| [I18n.t("activerecord.attributes.procedure.closing_reasons.#{reason}", app_name: Current.application_name), reason] }
end end
def confirmation def confirmation

View file

@ -4,36 +4,41 @@
%p %p
Certains éléments de la description ne sont plus modifiables. Certains éléments de la description ne sont plus modifiables.
= render Dsfr::InputComponent.new(form: f, attribute: :libelle, input_type: :text_field, opts: {}) %fieldset.fr-fieldset
.fr-fieldset__element
= render Dsfr::InputComponent.new(form: f, attribute: :libelle, input_type: :text_field, opts: {})
.fr-fieldset__element
= render Dsfr::InputComponent.new(form: f, attribute: :description, input_type: :text_area, opts: {})
.fr-fieldset__element
= render Dsfr::InputComponent.new(form: f, attribute: :description_target_audience, input_type: :text_area, opts: {}, required: false)
.fr-fieldset__element
= render Dsfr::InputComponent.new(form: f, attribute: :description_pj, input_type: :text_area, opts: {placeholder: t('activerecord.attributes.procedure.description_pj_placeholder')}, required: false)
= render Dsfr::InputComponent.new(form: f, attribute: :description, input_type: :text_area, opts: {}) .fr-fieldset__element
.fr-input-group
= f.label :logo, 'Ajouter un logo de la démarche', class: 'fr-label'
= render Attachment::EditComponent.new(attached_file: @procedure.logo, view_as: :link)
.fr-fieldset__element
.fr-input-group
= f.label :duree_conservation_dossiers_dans_ds, class: 'fr-label' do
= Procedure.human_attribute_name(:duree_conservation_dossiers_dans_ds)
= render EditableChamp::AsteriskMandatoryComponent.new
= render Dsfr::InputComponent.new(form: f, attribute: :description_target_audience, input_type: :text_area, opts: {}, required: false) %span.fr-hint-text
= render Dsfr::InputComponent.new(form: f, attribute: :description_pj, input_type: :text_area, opts: {placeholder: t('activerecord.attributes.procedure.description_pj_placeholder')}, required: false)
= f.label :logo, 'Ajouter un logo de la démarche (facultatif)', class: 'fr-label'
= render Attachment::EditComponent.new(attached_file: @procedure.logo, view_as: :link)
= render Dsfr::CalloutComponent.new(title: "Conservation des données") do |c|
- c.with_body do
%p
= t(:notice, scope: [:administrateurs, :duree_conservation_dossiers_dans_ds]) = t(:notice, scope: [:administrateurs, :duree_conservation_dossiers_dans_ds])
- if f.object.duree_conservation_dossiers_dans_ds.to_i < Expired::DEFAULT_DOSSIER_RENTENTION_IN_MONTH - if f.object.duree_conservation_dossiers_dans_ds.to_i < Expired::DEFAULT_DOSSIER_RENTENTION_IN_MONTH
%p
= t(:new_duration_constraint, scope: [:administrateurs, :duree_conservation_dossiers_dans_ds], new_duration_in_month: f.object.max_duree_conservation_dossiers_dans_ds) = t(:new_duration_constraint, scope: [:administrateurs, :duree_conservation_dossiers_dans_ds], new_duration_in_month: f.object.max_duree_conservation_dossiers_dans_ds)
.fr-input-group
= f.label :duree_conservation_dossiers_dans_ds, class: 'fr-label' do
Sur #{Current.application_name}
= render EditableChamp::AsteriskMandatoryComponent.new
= f.number_field :duree_conservation_dossiers_dans_ds, { class: 'fr-input', placeholder: '6', required: true, max: f.object.max_duree_conservation_dossiers_dans_ds } = f.number_field :duree_conservation_dossiers_dans_ds, { class: 'fr-input', placeholder: '6', required: true, max: f.object.max_duree_conservation_dossiers_dans_ds }
- if @procedure.persisted? - if @procedure.persisted?
.fr-fieldset__element
= render Dsfr::InputComponent.new(form: f, attribute: :lien_site_web, input_type: :text_field, opts: {}, required: false) = render Dsfr::InputComponent.new(form: f, attribute: :lien_site_web, input_type: :text_field, opts: {}, required: false)
= render Dsfr::CalloutComponent.new(title: "Cadre juridique") do |c| %fieldset.fr-fieldset
%legend.fr-fieldset__legend Cadre juridique
.fr-fieldset__element
= render Dsfr::CalloutComponent.new(title: nil) do |c|
- c.with_body do - c.with_body do
%p %p
Le cadre juridique justifie le droit de collecter les données demandées dans votre démarche auprès des usagers. Par exemple : Le cadre juridique justifie le droit de collecter les données demandées dans votre démarche auprès des usagers. Par exemple :
@ -45,23 +50,26 @@
= link_to("En savoir plus avec cette vidéo de 5 minutes", CADRE_JURIDIQUE_URL, target: "_blank", rel: "noopener") = link_to("En savoir plus avec cette vidéo de 5 minutes", CADRE_JURIDIQUE_URL, target: "_blank", rel: "noopener")
%p Vous pouvez saisir un lien web vers ce texte, ou limporter depuis un fichier. %p Vous pouvez saisir un lien web vers ce texte, ou limporter depuis un fichier.
.fr-fieldset__element
= render Dsfr::InputComponent.new(form: f, attribute: :cadre_juridique, input_type: :text_field, opts: {})
= render Dsfr::InputComponent.new(form: f, attribute: :cadre_juridique, input_type: :text_field, opts: {}) .fr-fieldset__element
.fr-input-group
= f.label :deliberation, 'Cadre juridique - texte à importer', class: 'fr-label'
= render Attachment::EditComponent.new(attached_file: @procedure.deliberation, view_as: :download)
= f.label :deliberation, 'Importer le texte', class: 'fr-label' %fieldset.fr-fieldset
= render Attachment::EditComponent.new(attached_file: @procedure.deliberation, view_as: :download) .fr-fieldset__element
= render Dsfr::InputComponent.new(form: f, attribute: :lien_dpo, input_type: :text_field, opts: {}, required: false) do |c|
- c.with_hint_content("Pour certaines démarches, veuillez indiquer soit le mail de contact de votre délégué à la protection des données, soit un lien web pointant vers les informations")
= render Dsfr::CalloutComponent.new(title: "RGPD") do |c| - if Rails.application.config.ds_opendata_enabled
- c.with_body do .fr-fieldset__element
%p Pour certaines démarches, veuillez indiquer soit le mail de contact de votre délégué à la protection des données, soit un lien web pointant vers les informations
= render Dsfr::InputComponent.new(form: f, attribute: :lien_dpo, input_type: :text_field, opts: {}, required: false)
- if Rails.application.config.ds_opendata_enabled
= render Dsfr::CalloutComponent.new(title: t(:opendata_header, scope: [:administrateurs, :informations])) do |c| = render Dsfr::CalloutComponent.new(title: t(:opendata_header, scope: [:administrateurs, :informations])) do |c|
- c.with_body do - c.with_body do
%p= t(:opendata_notice_html, scope: [:administrateurs, :informations]) %p= t(:opendata_notice_html, scope: [:administrateurs, :informations])
.fr-fieldset__element
.fr-input-group .fr-input-group
= f.label :opendata, t(:opendata, scope: [:administrateurs, :informations]), class: 'fr-label' = f.label :opendata, t(:opendata, scope: [:administrateurs, :informations]), class: 'fr-label'
%label.toggle-switch %label.toggle-switch
@ -70,45 +78,52 @@
%span.toggle-switch-label.on Oui %span.toggle-switch-label.on Oui
%span.toggle-switch-label.off Non %span.toggle-switch-label.off Non
= render Dsfr::CalloutComponent.new(title: "Notice explicative de la démarche") do |c| .fr-fieldset__element
- c.with_body do .fr-input-group
%p Une notice explicative est un document destiné à guider lusager dans sa démarche. Cest un document que vous avez élaboré et qui peut prendre la forme dun fichier doc, dun pdf ou encore de diapositives. Le bouton pour télécharger cette notice apparaît en haut du formulaire pour lusager. = f.label :notice, 'Notice explicative de la démarche', class: 'fr-label'
.fr-mb-3w
= f.label :notice, 'Notice', class: 'fr-label'
%p.fr-hint-text %p.fr-hint-text
Une notice explicative est un document que vous avez élaboré, destiné à guider lusager dans sa démarche. Le bouton pour télécharger cette notice apparaît en haut du formulaire pour lusager.
%br
Formats acceptés : .doc, .odt, .pdf, .ppt, .pptx Formats acceptés : .doc, .odt, .pdf, .ppt, .pptx
= render Attachment::EditComponent.new(attached_file: @procedure.notice, view_as: :download) = render Attachment::EditComponent.new(attached_file: @procedure.notice, view_as: :download)
- if !@procedure.locked? - if !@procedure.locked?
%fieldset.fr-fieldset{ "aria-labelledby": "for-individual-legend" }
%legend#for-individual-legend.fr-fieldset__legend.fr-fieldset__legend--regular À qui sadresse ma démarche ?
.fr-fieldset__element .fr-fieldset__element
.fr-radio-group %fieldset.fr-fieldset{ "aria-labelledby": "for-individual-legend" }
%legend#for-individual-legend.fr-fieldset__legend.fr-fieldset__legend--regular
À qui sadresse ma démarche ?
%span.fr-hint-text Si votre démarche sadresse indifféremment à une personne morale ou un particulier, choisissez l'option « Particuliers ». Vous pourrez ajouter un champ SIRET directement dans le formulaire.
.fr-fieldset__element
.fr-radio-group.fr-radio-rich
= f.radio_button :for_individual, true = f.radio_button :for_individual, true
= f.label :for_individual, value: true, class: "fr-label" do = f.label :for_individual, value: true, class: "fr-label" do
Ma démarche sadresse à un particulier Ma démarche sadresse à un particulier
%span.fr-hint-text En choisissant cette option, lusager devra renseigner son nom et prénom avant daccéder au formulaire %span.fr-hint-text En choisissant cette option, lusager devra renseigner son nom et prénom avant daccéder au formulaire
.fr-radio-rich__img
%svg.fr-artwork{ aria_hidden: "true", viewBox: "0 0 80 80", width: "80px", height: "80px" }
%use.fr-artwork-decorative{ href: image_path("pictograms/digital/avatar.svg#artwork-decorative") }
%use.fr-artwork-minor{ href: image_path("pictograms/digital/avatar.svg#artwork-minor") }
%use.fr-artwork-major{ href: image_path("pictograms/digital/avatar.svg#artwork-major") }
.fr-fieldset__element .fr-fieldset__element
.fr-radio-group .fr-radio-group.fr-radio-rich
= f.radio_button :for_individual, false = f.radio_button :for_individual, false
= f.label :for_individual, value: false, class: 'fr-label' do = f.label :for_individual, value: false, class: 'fr-label' do
Ma démarche sadresse à une personne morale Ma démarche sadresse à une personne morale
%span.fr-hint-text %span.fr-hint-text
En choisissant cette option, lusager devra renseigner son n° SIRET.<br>Grâce à lAPI Entreprise, les informations sur la personne morale (raison sociale, adresse du siège, etc.) seront automatiquement renseignées. En choisissant cette option, lusager devra renseigner son n° SIRET.<br>Grâce à lAPI Entreprise, les informations sur la personne morale (raison sociale, adresse du siège, etc.) seront automatiquement renseignées.
.fr-radio-rich__img
%svg.fr-artwork{ aria_hidden: "true", viewBox: "0 0 80 80", width: "80px", height: "80px" }
%use.fr-artwork-decorative{ href: image_path("pictograms/buildings/school.svg#artwork-decorative") }
%use.fr-artwork-minor{ href: image_path("pictograms/buildings/school.svg#artwork-minor") }
%use.fr-artwork-major{ href: image_path("pictograms/buildings/school.svg#artwork-major") }
.fr-fieldset__element .fr-fieldset__element
.fr-highlight = f.label :tags, 'Associez les tags à la démarche', class: 'fr-label'
%p.fr-text--sm %p.fr-hint-text Les tags sont des mots ou des expressions que vous attribuez aux démarches pour décrire leur contenu et pour les retrouver. Les tags sont partagés avec la communauté, ce qui vous permet de voir les tags attribués aux démarches créées par les autres administrateurs.
Si votre démarche sadresse indifféremment à une personne morale ou un particulier, choisissez l'option « Particuliers ». = hidden_field_tag 'procedure[tags]', JSON.generate(@procedure.tags)
Vous pourrez ajouter un champ SIRET directement dans le formulaire. = react_component("ComboMultiple",
= f.label :tags, 'Associez les tags à la démarche (facultatif)', class: 'fr-label'
%p.fr-hint-text Les tags sont des mots ou des expressions que vous attribuez aux démarches pour décrire leur contenu et pour les retrouver. Les tags sont partagés avec la communauté, ce qui vous permet de voir les tags attribués aux démarches créées par les autres administrateurs.
= hidden_field_tag 'procedure[tags]', JSON.generate(@procedure.tags)
= react_component("ComboMultiple",
id: "procedure_tags_combo", id: "procedure_tags_combo",
options: Procedure.tags, options: Procedure.tags,
selected: @procedure.tags, selected: @procedure.tags,
@ -119,10 +134,12 @@
describedby: 'procedure-tags', describedby: 'procedure-tags',
acceptNewValues: true) acceptNewValues: true)
%details.procedure-form__options-details %details.procedure-form__options-details
%summary.procedure-form__options-summary %summary.procedure-form__options-summary
%h3.fr-h6 Options avancées %h3.fr-h6 Options avancées
.card
%fieldset.fr-fieldset
.fr-fieldset__element
- if feature_enabled?(:administrateur_web_hook) - if feature_enabled?(:administrateur_web_hook)
= f.label :web_hook_url, class: 'fr-label' do = f.label :web_hook_url, class: 'fr-label' do
Lien de rappel HTTP (webhook) Lien de rappel HTTP (webhook)
@ -132,31 +149,48 @@
= link_to "voici un exemple d'implementation ", WEBHOOK_ALTERNATIVE_DOC_URL, rel: "noopener", target: "_blank", title: "Voir une implémentation alternative à l'ancien système de webhook" = link_to "voici un exemple d'implementation ", WEBHOOK_ALTERNATIVE_DOC_URL, rel: "noopener", target: "_blank", title: "Voir une implémentation alternative à l'ancien système de webhook"
= f.text_field :web_hook_url, class: 'fr-input', placeholder: 'https://callback.exemple.fr/' = f.text_field :web_hook_url, class: 'fr-input', placeholder: 'https://callback.exemple.fr/'
= render Dsfr::CalloutComponent.new(title: "Date limite de dépôt des dossiers") do |c| .fr-fieldset__element
- c.with_body do = f.label :auto_archive_on, class: 'fr-label fr-mb-2w' do
%p Date limite de dépôt des dossiers
%span.fr-hint-text
Si une date est définie, aucun dossier ne pourra plus être déposé ou modifié après cette limite. Si une date est définie, aucun dossier ne pourra plus être déposé ou modifié après cette limite.
Les dossiers en construction passeront en instruction et la démarche sera clôturée. Les dossiers en construction passeront en instruction et la démarche sera clôturée.
%span.flex.align-center
= f.label :auto_archive_on, 'Mentionnez une date (facultatif)', class: 'fr-label fr-mb-2w'
%p.notice
Le
- value = @procedure.auto_archive_on ? @procedure.auto_archive_on - 1.day : nil - value = @procedure.auto_archive_on ? @procedure.auto_archive_on - 1.day : nil
= f.date_field :auto_archive_on, id: 'auto_archive_on', class: 'fr-input', value: value = f.date_field :auto_archive_on, id: 'auto_archive_on', class: 'fr-input', value: value
%span.fr-ml-1w.fr-text-mention--grey
#{procedure_auto_archive_time(@procedure)}. #{procedure_auto_archive_time(@procedure)}.
= render Dsfr::CalloutComponent.new(title: "Démarche déclarative") do |c| %fieldset.fr-fieldset{ "aria-labelledby": "declarative_with_state-legend" }
- c.with_body do %legend#declarative_with_state-legend.fr-fieldset__legend.fr-fieldset__legend--regular
%p Démarche déclarative
%span.fr-hint-text.fr-mt-0
Par défaut, un dossier déposé peut être complété ou corrigé par le demandeur jusqu'à sa mise en instruction.<br> Par défaut, un dossier déposé peut être complété ou corrigé par le demandeur jusqu'à sa mise en instruction.<br>
Dans une démarche déclarative, une fois déposé, un dossier ne peut plus être modifié. Dans une démarche déclarative, une fois déposé, un dossier ne peut plus être modifié. Soit il passe immédiatement « en instruction » pour être traité, soit il est immédiatement « accepté ».
Soit il passe immédiatement « en instruction » pour être traité soit il est immédiatement « accepté ». .fr-fieldset__element
.fr-radio-group
= f.radio_button :declarative_with_state, ''
= f.label :declarative_with_state, value: '', class: "fr-label" do
La démarche nest pas déclarative (lusager peut modifier son dossier jusqu'à sa mise en instruction)
.fr-fieldset__element
.fr-radio-group
= f.radio_button :declarative_with_state, Procedure.declarative_with_states.fetch(:en_instruction)
= f.label :declarative_with_state, value: Procedure.declarative_with_states.fetch(:en_instruction), class: 'fr-label' do
Passage automatique en instruction (l'usager ne peut plus modifier son dossier)
.fr-fieldset__element
.fr-radio-group
= f.radio_button :declarative_with_state, Procedure.declarative_with_states.fetch(:accepte)
= f.label :declarative_with_state, value: Procedure.declarative_with_states.fetch(:accepte), class: 'fr-label' do
Passage automatique au statut « accepté » (l'usager ne peut plus modifier son dossier)
= f.label :declarative_with_state, 'Mentionnez létat davancement (facultatif)', class: 'fr-label fr-mb-2w'
= f.select :declarative_with_state, Procedure.declarative_attributes_for_select, { include_blank: 'Non' }, class: 'fr-select'
- if !@procedure.piece_justificative_multiple? - if !@procedure.piece_justificative_multiple?
.fr-checkbox-group .fr-fieldset__element
.fr-checkbox-group.fr-mt-3w
= f.check_box :piece_justificative_multiple = f.check_box :piece_justificative_multiple
= f.label :piece_justificative_multiple, class: 'fr-label' do = f.label :piece_justificative_multiple, class: 'fr-label' do
Champ “Pièce justificative” avec multiples fichiers Champ “Pièce justificative” avec multiples fichiers

View file

@ -30,7 +30,7 @@ en:
closing_reason: Closing reason closing_reason: Closing reason
closing_reasons: closing_reasons:
other: Other other: Other
internal_procedure: I replace my procedure with another in Démarches Simplifiées internal_procedure: I replace my procedure with another in %{app_name}
procedure_path: Procedure link to disseminate to users procedure_path: Procedure link to disseminate to users
procedure_path_placeholder: procedure-name procedure_path_placeholder: procedure-name
cadre_juridique: Link to the legal text cadre_juridique: Link to the legal text

View file

@ -18,8 +18,8 @@ fr:
closing_details_placeholder: "Cette démarche a été remplacée par la page…\n\nLe guide de la nouvelle démarche est disponible ici\n\nPour toute information complémentaire, contactez…\n\nCordialement," closing_details_placeholder: "Cette démarche a été remplacée par la page…\n\nLe guide de la nouvelle démarche est disponible ici\n\nPour toute information complémentaire, contactez…\n\nCordialement,"
path: Lien public path: Lien public
organisation: Organisme organisation: Organisme
duree_conservation_dossiers_dans_ds: Durée de conservation des dossiers sur demarches-simplifiees.fr (choisi par un usager) duree_conservation_dossiers_dans_ds: Durée de conservation des dossiers
max_duree_conservation_dossiers_dans_ds: Durée maximale de conservation des dossiers (autorisée par un super admin de DS) max_duree_conservation_dossiers_dans_ds: Durée maximale de conservation des dossiers (autorisée par un super admin)
id: Id id: Id
libelle: Titre de la démarche libelle: Titre de la démarche
description: Quel est lobjet de la démarche ? description: Quel est lobjet de la démarche ?
@ -34,10 +34,10 @@ fr:
closing_reason: Raison de la clôture closing_reason: Raison de la clôture
closing_reasons: closing_reasons:
other: Autre other: Autre
internal_procedure: Je remplace ma démarche par une autre dans Démarches simplifiées internal_procedure: Je remplace ma démarche par une autre dans %{app_name}
procedure_path: Lien de la démarche à diffuser aux usagers procedure_path: Lien de la démarche à diffuser aux usagers
procedure_path_placeholder: nom-de-la-demarche procedure_path_placeholder: nom-de-la-demarche
cadre_juridique: Lien vers le texte cadre_juridique: Cadre juridique - lien web vers le texte
lien_dpo: Lien ou email pour contacter le Délégué à la Protection des Données (DPO) lien_dpo: Lien ou email pour contacter le Délégué à la Protection des Données (DPO)
published_at: 'Date de publication' published_at: 'Date de publication'
aasm_state: 'Statut' aasm_state: 'Statut'

View file

@ -34,7 +34,7 @@ describe 'Closing a procedure', js: true do
expect(page).to have_text('Clore la démarche') expect(page).to have_text('Clore la démarche')
select('Je remplace ma démarche par une autre dans Démarches simplifiées') select('Je remplace ma démarche par une autre dans demarches-simplifiees.fr')
select("#{other_procedure.libelle} (#{other_procedure.id})") select("#{other_procedure.libelle} (#{other_procedure.id})")