From b020cb31b6b35ac894d8f1d7207708ebdb40ffa1 Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Mon, 7 Nov 2022 12:45:10 +0000 Subject: [PATCH] fix(publication): improuve publication warnings --- .../publication_warning_component.rb | 30 +++++++++++++++++++ .../publication_warning_component.html.haml | 7 +++++ app/helpers/procedure_helper.rb | 6 ---- .../procedures/_publication_form.html.haml | 24 +++++---------- config/locales/models/procedure/en.yml | 7 ++++- config/locales/models/procedure/fr.yml | 5 ++++ 6 files changed, 55 insertions(+), 24 deletions(-) create mode 100644 app/components/procedure/publication_warning_component.rb create mode 100644 app/components/procedure/publication_warning_component/publication_warning_component.html.haml diff --git a/app/components/procedure/publication_warning_component.rb b/app/components/procedure/publication_warning_component.rb new file mode 100644 index 000000000..914a44cba --- /dev/null +++ b/app/components/procedure/publication_warning_component.rb @@ -0,0 +1,30 @@ +class Procedure::PublicationWarningComponent < ApplicationComponent + def initialize(procedure:) + @procedure = procedure + end + + private + + def render? + @procedure.validate(:publication) + @procedure.errors.delete(:path) + @procedure.errors.any? + end + + def error_messages + @procedure.errors + .to_hash(full_messages: true) + .map do |attribute, messages| + [messages, error_correction_page(attribute)] + end + end + + def error_correction_page(attribute) + case attribute + when :draft_revision + champs_admin_procedure_path(@procedure) + when :initiated_mail, :received_mail, :closed_mail, :refused_mail, :without_continuation_mail + admin_procedure_mail_templates_path(@procedure) + end + end +end diff --git a/app/components/procedure/publication_warning_component/publication_warning_component.html.haml b/app/components/procedure/publication_warning_component/publication_warning_component.html.haml new file mode 100644 index 000000000..68e359408 --- /dev/null +++ b/app/components/procedure/publication_warning_component/publication_warning_component.html.haml @@ -0,0 +1,7 @@ += render Dsfr::AlertComponent.new(state: :warning, title: "Des problèmes empêchent la publication de la démarche") do |c| + - c.body do + - error_messages.each do |(messages, path)| + %p.mt-2 + = messages.to_sentence + - if path.present? + = "(#{link_to 'corriger', path, class: 'fr-link'})" diff --git a/app/helpers/procedure_helper.rb b/app/helpers/procedure_helper.rb index 2b2fa2609..3e2f62b6e 100644 --- a/app/helpers/procedure_helper.rb +++ b/app/helpers/procedure_helper.rb @@ -30,12 +30,6 @@ module ProcedureHelper t(action, scope: [:modal, :publish, key]) end - # Returns a hash of { attribute: full_message } errors. - def procedure_publication_errors(procedure) - procedure.validate(:publication) - procedure.errors.to_hash(full_messages: true).except(:path) - end - def procedure_auto_archive_date(procedure) I18n.l(procedure.auto_archive_on - 1.day, format: '%-d %B %Y') end diff --git a/app/views/administrateurs/procedures/_publication_form.html.haml b/app/views/administrateurs/procedures/_publication_form.html.haml index 14962ad13..7e7301e86 100644 --- a/app/views/administrateurs/procedures/_publication_form.html.haml +++ b/app/views/administrateurs/procedures/_publication_form.html.haml @@ -1,25 +1,15 @@ .card.mb-4 %h2.card-title Publiez votre démarche = form_tag admin_procedure_publish_path(procedure_id: procedure.id), method: :put, class: 'form' do - - publication_errors = procedure_publication_errors(procedure) - - if publication_errors.present? - .card.warning - .card-title Des problèmes empêchent la publication de la démarche - - publication_errors.each do |_attribute, full_messages| - %p= full_messages.to_sentence - - - if procedure.draft_changed? - - if procedure.close? + = render Procedure::PublicationWarningComponent.new(procedure: procedure) + .mt-2 + - if procedure.draft_changed? %p.mb-2 Publiez une nouvelle version de votre démarche. Les modifications suivantes seront appliquées : = render partial: 'revision_changes', locals: { changes: procedure.revision_changes } + - if procedure.close? + = render partial: 'publication_form_inputs', locals: { procedure: procedure, closed_procedures: @closed_procedures } + - else = render partial: 'publication_form_inputs', locals: { procedure: procedure, closed_procedures: @closed_procedures } - - else - %p.mb-2 Publiez une nouvelle version de votre démarche. Les modifications suivantes seront appliquées : - = render partial: 'revision_changes', locals: { changes: procedure.revision_changes } - - - else - = render partial: 'publication_form_inputs', locals: { procedure: procedure, closed_procedures: @closed_procedures } - .flex.justify-end - = submit_tag procedure_publish_label(procedure, :submit), { disabled: publication_errors.present?, class: "fr-btn fr-btn--primary", id: 'publish' } + = submit_tag procedure_publish_label(procedure, :submit), { disabled: procedure.errors.present?, class: "fr-btn fr-btn--primary", id: 'publish' } diff --git a/config/locales/models/procedure/en.yml b/config/locales/models/procedure/en.yml index fcb23826e..537fb3fdd 100644 --- a/config/locales/models/procedure/en.yml +++ b/config/locales/models/procedure/en.yml @@ -19,7 +19,12 @@ en: declarative_with_state/accepte: Accepted api_particulier_token: Token API Particulier lien_dpo: DPO contact - routing_criteria_name: Routee criteria name + routing_criteria_name: Routing criteria name + initiated_mail: File sorted for processing notification email + received_mail: File submitted notification email + closed_mail: File sorted as accepted notification email + refused_mail: File sorted as refused notification email + without_continuation_mail: File sorted with no further action notification email errors: models: procedure: diff --git a/config/locales/models/procedure/fr.yml b/config/locales/models/procedure/fr.yml index b13eb43b9..a5293881c 100644 --- a/config/locales/models/procedure/fr.yml +++ b/config/locales/models/procedure/fr.yml @@ -20,6 +20,11 @@ fr: api_particulier_token: Jeton API Particulier lien_dpo: Contact du DPO routing_criteria_name: Nomination du routage + initiated_mail: L’email de notification de passage de dossier en instruction + received_mail: L’email de notification de dépot de dossier + closed_mail: L’email de notification d’acceptation de dossier + refused_mail: L’email de notification de refus de dossier + without_continuation_mail: L’email de notification de classement sans suite de dossier errors: models: procedure: