instructeur can create contact information for groupe instructeur
This commit is contained in:
parent
46dec40543
commit
ba0d3fa678
7 changed files with 140 additions and 1 deletions
|
@ -0,0 +1,30 @@
|
|||
module Instructeurs
|
||||
class ContactInformationsController < InstructeurController
|
||||
def new
|
||||
assign_procedure_and_groupe_instructeur
|
||||
@contact_information = @groupe_instructeur.build_contact_information
|
||||
end
|
||||
|
||||
def create
|
||||
assign_procedure_and_groupe_instructeur
|
||||
@contact_information = @groupe_instructeur.build_contact_information(contact_information_params)
|
||||
if @contact_information.save
|
||||
redirect_to instructeur_groupe_path(@groupe_instructeur, procedure_id: @procedure.id), notice: "Les informations de contact ont bien été ajoutées"
|
||||
else
|
||||
flash[:alert] = @contact_information.errors.full_messages
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def assign_procedure_and_groupe_instructeur
|
||||
@procedure = current_instructeur.procedures.find params[:procedure_id]
|
||||
@groupe_instructeur = current_instructeur.groupe_instructeurs.find params[:groupe_id]
|
||||
end
|
||||
|
||||
def contact_information_params
|
||||
params.require(:contact_information).permit(:nom, :email, :telephone, :horaires, :adresse)
|
||||
end
|
||||
end
|
||||
end
|
32
app/views/instructeurs/contact_informations/_form.html.haml
Normal file
32
app/views/instructeurs/contact_informations/_form.html.haml
Normal file
|
@ -0,0 +1,32 @@
|
|||
= form_with url: instructeur_groupe_contact_information_path, model: @contact_information, local: true do |f|
|
||||
|
||||
= render Dsfr::CalloutComponent.new(title: "Informations de contact") do |c|
|
||||
- c.body do
|
||||
Votre démarche est hébergée par #{APPLICATION_NAME} – mais nous ne pouvons pas assurer le support des démarches. Et malgré la dématérialisation, les usagers se posent parfois des questions légitimes sur le processus administratif.
|
||||
%br
|
||||
%br
|
||||
%strong Il est donc indispensable que les usagers puissent vous contacter
|
||||
par le moyen de leur choix s’ils ont des questions sur votre démarche.
|
||||
%br
|
||||
%br
|
||||
Ces informations de contact seront visibles par les utilisateurs de la démarche, affichées dans le menu « Aide », ainsi qu’en pied de page lors du dépôt d’un dossier.
|
||||
%br
|
||||
%br
|
||||
⚠️ En cas d’informations invalides, #{APPLICATION_NAME} se réserve le droit de suspendre la publication de la démarche.
|
||||
|
||||
= render Dsfr::InputComponent.new(form: f, attribute: :nom, input_type: :text_field) do |c|
|
||||
- c.with_hint do
|
||||
Indiquez le nom à utiliser pour contacter le groupe instructeur
|
||||
(Exemple: Secrétariat de la Mairie)
|
||||
|
||||
= render Dsfr::InputComponent.new(form: f, attribute: :email, input_type: :email_field)
|
||||
= render Dsfr::InputComponent.new(form: f, attribute: :telephone, input_type: :telephone_field)
|
||||
= render Dsfr::InputComponent.new(form: f, attribute: :horaires, input_type: :text_area)
|
||||
= render Dsfr::InputComponent.new(form: f, attribute: :adresse, input_type: :text_area)
|
||||
|
||||
- if procedure_id.present?
|
||||
= hidden_field_tag :procedure_id, procedure_id
|
||||
|
||||
.sticky-action-footer
|
||||
= f.submit "Enregistrer", class: "fr-btn fr-mr-2w"
|
||||
= link_to "Annuler", instructeur_groupe_path(@groupe_instructeur, procedure_id: procedure_id), class: "fr-btn fr-btn--secondary"
|
10
app/views/instructeurs/contact_informations/new.html.haml
Normal file
10
app/views/instructeurs/contact_informations/new.html.haml
Normal file
|
@ -0,0 +1,10 @@
|
|||
= render partial: 'administrateurs/breadcrumbs',
|
||||
locals: { steps: [[@procedure.libelle.truncate_words(10), instructeur_procedure_path(@procedure)],
|
||||
['Groupes d’instructeurs', instructeur_groupes_path(@procedure)],
|
||||
[@groupe_instructeur.label, instructeur_groupe_path(@groupe_instructeur, procedure_id: @procedure.id) ],
|
||||
['Service']]}
|
||||
.container
|
||||
%h1 Informations de contact
|
||||
|
||||
= render partial: 'form',
|
||||
locals: { contact_information: @contact_information, procedure_id: @procedure.id }
|
|
@ -48,3 +48,9 @@
|
|||
class: 'button' }
|
||||
|
||||
= paginate @instructeurs, views_prefix: 'shared'
|
||||
.card.mt-2
|
||||
.card-title Informations de contact
|
||||
- if @groupe_instructeur.contact_information.nil?
|
||||
= "Le groupe #{@groupe_instructeur.label} n'a pas d'informations de contact. Les informations de contact affichées à l'usager seront celles du service de la procédure"
|
||||
%p.mt-3
|
||||
= link_to "+ Ajouter des informations de contact", new_instructeur_groupe_contact_information_path(procedure_id: @procedure.id, groupe_id: @groupe_instructeur.id), class: "fr-btn"
|
||||
|
|
|
@ -5,7 +5,7 @@ fr:
|
|||
one: 'Service'
|
||||
other: 'Services'
|
||||
attributes:
|
||||
service:
|
||||
service: &service
|
||||
adresse: 'Adresse postale'
|
||||
email: 'Email de contact'
|
||||
telephone: 'Téléphone'
|
||||
|
@ -27,6 +27,7 @@ fr:
|
|||
Exemple : Du lundi au vendredi de 9h30 à 17h30, le samedi de 9h30 à 12h.
|
||||
adresse: |
|
||||
Indiquez l’adresse à laquelle un usager peut vous contacter, par exemple s’il n’est pas en capacité de compléter son formulaire en ligne.
|
||||
contact_information: *service
|
||||
|
||||
errors:
|
||||
models:
|
||||
|
|
|
@ -394,6 +394,7 @@ Rails.application.routes.draw do
|
|||
resources :archives, only: [:index, :create]
|
||||
|
||||
resources :groupes, only: [:index, :show], controller: 'groupe_instructeurs' do
|
||||
resource :contact_information
|
||||
member do
|
||||
post 'add_instructeur'
|
||||
delete 'remove_instructeur'
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
describe Instructeurs::ContactInformationsController, type: :controller do
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:assign_to) { create(:assign_to, instructeur: instructeur, groupe_instructeur: build(:groupe_instructeur, procedure: procedure)) }
|
||||
let(:gi) { assign_to.groupe_instructeur }
|
||||
|
||||
before do
|
||||
sign_in(instructeur.user)
|
||||
end
|
||||
|
||||
describe '#create' do
|
||||
context 'when submitting a new contact_information' do
|
||||
let(:params) do
|
||||
{
|
||||
contact_information: {
|
||||
nom: 'super service',
|
||||
email: 'email@toto.com',
|
||||
telephone: '1234',
|
||||
horaires: 'horaires',
|
||||
adresse: 'adresse'
|
||||
},
|
||||
procedure_id: procedure.id,
|
||||
groupe_id: gi.id
|
||||
}
|
||||
end
|
||||
|
||||
it do
|
||||
post :create, params: params
|
||||
expect(flash.alert).to be_nil
|
||||
expect(flash.notice).to eq('Les informations de contact ont bien été ajoutées')
|
||||
expect(ContactInformation.last.nom).to eq('super service')
|
||||
expect(ContactInformation.last.email).to eq('email@toto.com')
|
||||
expect(ContactInformation.last.telephone).to eq('1234')
|
||||
expect(ContactInformation.last.horaires).to eq('horaires')
|
||||
expect(ContactInformation.last.adresse).to eq('adresse')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when submitting an invalid contact_information' do
|
||||
before do
|
||||
post :create, params: params
|
||||
end
|
||||
|
||||
let(:params) {
|
||||
{
|
||||
contact_information: {
|
||||
nom: 'super service'
|
||||
},
|
||||
procedure_id: procedure.id,
|
||||
groupe_id: gi.id
|
||||
}
|
||||
}
|
||||
|
||||
it { expect(flash.alert).not_to be_nil }
|
||||
it { expect(response).to render_template(:new) }
|
||||
it { expect(assigns(:contact_information).nom).to eq('super service') }
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue