fix(publication): improuve publication warnings

This commit is contained in:
Paul Chavard 2022-11-07 12:45:10 +00:00
parent 47e14bd837
commit b020cb31b6
6 changed files with 55 additions and 24 deletions

View file

@ -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

View file

@ -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'})"

View file

@ -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

View file

@ -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' }

View file

@ -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:

View file

@ -20,6 +20,11 @@ fr:
api_particulier_token: Jeton API Particulier
lien_dpo: Contact du DPO
routing_criteria_name: Nomination du routage
initiated_mail: Lemail de notification de passage de dossier en instruction
received_mail: Lemail de notification de dépot de dossier
closed_mail: Lemail de notification dacceptation de dossier
refused_mail: Lemail de notification de refus de dossier
without_continuation_mail: Lemail de notification de classement sans suite de dossier
errors:
models:
procedure: