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' }
|
class: 'button' }
|
||||||
|
|
||||||
= paginate @instructeurs, views_prefix: 'shared'
|
= 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'
|
one: 'Service'
|
||||||
other: 'Services'
|
other: 'Services'
|
||||||
attributes:
|
attributes:
|
||||||
service:
|
service: &service
|
||||||
adresse: 'Adresse postale'
|
adresse: 'Adresse postale'
|
||||||
email: 'Email de contact'
|
email: 'Email de contact'
|
||||||
telephone: 'Téléphone'
|
telephone: 'Téléphone'
|
||||||
|
@ -27,6 +27,7 @@ fr:
|
||||||
Exemple : Du lundi au vendredi de 9h30 à 17h30, le samedi de 9h30 à 12h.
|
Exemple : Du lundi au vendredi de 9h30 à 17h30, le samedi de 9h30 à 12h.
|
||||||
adresse: |
|
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.
|
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:
|
errors:
|
||||||
models:
|
models:
|
||||||
|
|
|
@ -394,6 +394,7 @@ Rails.application.routes.draw do
|
||||||
resources :archives, only: [:index, :create]
|
resources :archives, only: [:index, :create]
|
||||||
|
|
||||||
resources :groupes, only: [:index, :show], controller: 'groupe_instructeurs' do
|
resources :groupes, only: [:index, :show], controller: 'groupe_instructeurs' do
|
||||||
|
resource :contact_information
|
||||||
member do
|
member do
|
||||||
post 'add_instructeur'
|
post 'add_instructeur'
|
||||||
delete 'remove_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