[Fix #835] Enable asking for multiple avis at the same time
This commit is contained in:
parent
31ca0552ab
commit
c7358a8f53
6 changed files with 33 additions and 12 deletions
|
@ -5,22 +5,39 @@ module CreateAvisConcern
|
||||||
|
|
||||||
def create_avis_from_params(dossier, confidentiel = false)
|
def create_avis_from_params(dossier, confidentiel = false)
|
||||||
confidentiel ||= create_avis_params[:confidentiel]
|
confidentiel ||= create_avis_params[:confidentiel]
|
||||||
avis = Avis.new(create_avis_params.merge(claimant: current_gestionnaire, dossier: dossier, confidentiel: confidentiel))
|
emails = create_avis_params[:emails].split(',').map(&:strip)
|
||||||
|
|
||||||
if avis.save
|
create_results = Avis.create(
|
||||||
flash.notice = "Une demande d'avis a été envoyée à #{avis.email_to_display}"
|
emails.map do |email|
|
||||||
|
{
|
||||||
|
email: email,
|
||||||
|
introduction: create_avis_params[:introduction],
|
||||||
|
claimant: current_gestionnaire,
|
||||||
|
dossier: dossier,
|
||||||
|
confidentiel: confidentiel
|
||||||
|
}
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
if create_results.all?(&:persisted?)
|
||||||
|
sent_emails_addresses = create_results.map(&:email_to_display).join(", ")
|
||||||
|
flash.notice = "Une demande d'avis a été envoyée à #{sent_emails_addresses}"
|
||||||
|
|
||||||
nil
|
nil
|
||||||
else
|
else
|
||||||
flash.now.alert = @avis.errors.full_messages
|
flash.now.alert = create_results
|
||||||
|
.map(&:errors)
|
||||||
|
.reject(&:empty?)
|
||||||
|
.map(&:full_messages)
|
||||||
|
.flatten
|
||||||
|
|
||||||
# When an error occurs, return the avis back to the controller
|
# When an error occurs, return the avis back to the controller
|
||||||
# to give the user a chance to correct and resubmit
|
# to give the user a chance to correct and resubmit
|
||||||
avis
|
Avis.new(create_avis_params)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_avis_params
|
def create_avis_params
|
||||||
params.require(:avis).permit(:email, :introduction, :confidentiel)
|
params.require(:avis).permit(:emails, :introduction, :confidentiel)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,6 +19,10 @@ class Avis < ApplicationRecord
|
||||||
scope :by_latest, -> { order(updated_at: :desc) }
|
scope :by_latest, -> { order(updated_at: :desc) }
|
||||||
scope :updated_since?, -> (date) { where('avis.updated_at > ?', date) }
|
scope :updated_since?, -> (date) { where('avis.updated_at > ?', date) }
|
||||||
|
|
||||||
|
# The form allows subtmitting avis requests to several emails at once,
|
||||||
|
# hence this virtual attribute.
|
||||||
|
attr_accessor :emails
|
||||||
|
|
||||||
def email_to_display
|
def email_to_display
|
||||||
gestionnaire&.email || email
|
gestionnaire&.email || email
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
%section.ask-avis
|
%section.ask-avis
|
||||||
%h1.tab-title Inviter une personne à donner son avis
|
%h1.tab-title Inviter des personnes à donner leur avis
|
||||||
%p.avis-notice L'invité pourra consulter, donner un avis sur le dossier et contribuer au fil de messagerie, mais il ne pourra le modifier.
|
%p.avis-notice Les invités pourront consulter, donner un avis sur le dossier et contribuer au fil de messagerie, mais ils ne pourront pas le modifier.
|
||||||
|
|
||||||
= form_for avis, url: url, html: { class: 'form' } do |f|
|
= form_for avis, url: url, html: { class: 'form' } do |f|
|
||||||
= f.email_field :email, placeholder: 'Adresse email', required: true
|
= f.text_field :emails, placeholder: 'Adresses email, séparées par des virgules', required: true
|
||||||
= f.text_area :introduction, rows: 3, value: avis.introduction || 'Bonjour, merci de me donner votre avis sur ce dossier.', required: true
|
= f.text_area :introduction, rows: 3, value: avis.introduction || 'Bonjour, merci de me donner votre avis sur ce dossier.', required: true
|
||||||
.flex.justify-between.align-baseline
|
.flex.justify-between.align-baseline
|
||||||
- if must_be_confidentiel
|
- if must_be_confidentiel
|
||||||
|
|
|
@ -105,7 +105,7 @@ describe NewGestionnaire::AvisController, type: :controller do
|
||||||
let(:created_avis) { Avis.last }
|
let(:created_avis) { Avis.last }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
post :create_avis, params: { id: previous_avis.id, avis: { email: email, introduction: intro, confidentiel: asked_confidentiel } }
|
post :create_avis, params: { id: previous_avis.id, avis: { emails: email, introduction: intro, confidentiel: asked_confidentiel } }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when an invalid email' do
|
context 'when an invalid email' do
|
||||||
|
|
|
@ -313,7 +313,7 @@ describe NewGestionnaire::DossiersController, type: :controller do
|
||||||
post :create_avis, params: {
|
post :create_avis, params: {
|
||||||
procedure_id: procedure.id,
|
procedure_id: procedure.id,
|
||||||
dossier_id: dossier.id,
|
dossier_id: dossier.id,
|
||||||
avis: { email: email, introduction: 'intro', confidentiel: true }
|
avis: { emails: email, introduction: 'intro', confidentiel: true }
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -192,7 +192,7 @@ feature 'The gestionnaire part' do
|
||||||
end
|
end
|
||||||
|
|
||||||
def ask_confidential_avis(to, introduction)
|
def ask_confidential_avis(to, introduction)
|
||||||
fill_in 'avis_email', with: to
|
fill_in 'avis_emails', with: to
|
||||||
fill_in 'avis_introduction', with: introduction
|
fill_in 'avis_introduction', with: introduction
|
||||||
select 'confidentiel', from: 'avis_confidentiel'
|
select 'confidentiel', from: 'avis_confidentiel'
|
||||||
click_on 'Demander un avis'
|
click_on 'Demander un avis'
|
||||||
|
|
Loading…
Add table
Reference in a new issue