diff --git a/app/controllers/concerns/create_avis_concern.rb b/app/controllers/concerns/create_avis_concern.rb new file mode 100644 index 000000000..c086ee726 --- /dev/null +++ b/app/controllers/concerns/create_avis_concern.rb @@ -0,0 +1,26 @@ +module CreateAvisConcern + extend ActiveSupport::Concern + + private + + def create_avis_from_params(dossier, confidentiel = false) + confidentiel ||= create_avis_params[:confidentiel] + avis = Avis.new(create_avis_params.merge(claimant: current_gestionnaire, dossier: dossier, confidentiel: confidentiel)) + + if avis.save + flash.notice = "Une demande d'avis a été envoyée à #{avis.email_to_display}" + + nil + else + flash.now.alert = @avis.errors.full_messages + + # When an error occurs, return the avis back to the controller + # to give the user a chance to correct and resubmit + avis + end + end + + def create_avis_params + params.require(:avis).permit(:email, :introduction, :confidentiel) + end +end diff --git a/app/controllers/new_gestionnaire/avis_controller.rb b/app/controllers/new_gestionnaire/avis_controller.rb index 4be6b09ad..e8267f944 100644 --- a/app/controllers/new_gestionnaire/avis_controller.rb +++ b/app/controllers/new_gestionnaire/avis_controller.rb @@ -1,5 +1,7 @@ module NewGestionnaire class AvisController < GestionnaireController + include CreateAvisConcern + before_action :authenticate_gestionnaire!, except: [:sign_up, :create_gestionnaire] before_action :redirect_if_no_sign_up_needed, only: [:sign_up] before_action :check_avis_exists_and_email_belongs_to_avis, only: [:sign_up, :create_gestionnaire] @@ -60,14 +62,11 @@ module NewGestionnaire end def create_avis - confidentiel = avis.confidentiel || create_avis_params[:confidentiel] - @new_avis = Avis.new(create_avis_params.merge(claimant: current_gestionnaire, dossier: avis.dossier, confidentiel: confidentiel)) + @new_avis = create_avis_from_params(avis.dossier, avis.confidentiel) - if @new_avis.save - flash.notice = "Une demande d'avis a été envoyée à #{@new_avis.email_to_display}" + if @new_avis.nil? redirect_to instruction_gestionnaire_avis_path(avis) else - flash.now.alert = @new_avis.errors.full_messages set_avis_and_dossier render :instruction end @@ -141,9 +140,5 @@ module NewGestionnaire def commentaire_params params.require(:commentaire).permit(:body, :file) end - - def create_avis_params - params.require(:avis).permit(:email, :introduction, :confidentiel) - end end end diff --git a/app/controllers/new_gestionnaire/dossiers_controller.rb b/app/controllers/new_gestionnaire/dossiers_controller.rb index ce56a4617..47aafc301 100644 --- a/app/controllers/new_gestionnaire/dossiers_controller.rb +++ b/app/controllers/new_gestionnaire/dossiers_controller.rb @@ -2,6 +2,7 @@ module NewGestionnaire class DossiersController < ProceduresController include ActionView::Helpers::NumberHelper include ActionView::Helpers::TextHelper + include CreateAvisConcern after_action :mark_demande_as_read, only: :show after_action :mark_messagerie_as_read, only: [:messagerie, :create_commentaire] @@ -130,12 +131,11 @@ module NewGestionnaire end def create_avis - @avis = Avis.new(avis_params.merge(claimant: current_gestionnaire, dossier: dossier)) - if @avis.save - flash.notice = "Une demande d'avis a été envoyée à #{@avis.email_to_display}" + @avis = create_avis_from_params(dossier) + + if @avis.nil? redirect_to avis_gestionnaire_dossier_path(procedure, dossier) else - flash.now.alert = @avis.errors.full_messages @avis_seen_at = current_gestionnaire.follows.find_by(dossier: dossier)&.avis_seen_at render :avis end @@ -163,10 +163,6 @@ module NewGestionnaire params.require(:commentaire).permit(:body, :file) end - def avis_params - params.require(:avis).permit(:email, :introduction, :confidentiel) - end - def champs_private_params params.require(:dossier).permit(champs_private_attributes: [ :id, :primary_value, :secondary_value, :piece_justificative_file, :value, value: [], diff --git a/config/application.rb b/config/application.rb index bb335c9a4..bb00d8c27 100644 --- a/config/application.rb +++ b/config/application.rb @@ -25,6 +25,7 @@ module TPS config.i18n.available_locales = [:fr] config.paths.add "#{config.root}/lib", eager_load: true + config.paths.add "#{config.root}/app/controllers/concerns", eager_load: true config.assets.paths << Rails.root.join('app', 'assets', 'javascript') config.assets.paths << Rails.root.join('app', 'assets', 'fonts')