Add instructeurs to groupe
This commit is contained in:
parent
3dd3af8482
commit
a6deafd885
6 changed files with 99 additions and 1 deletions
|
@ -46,8 +46,36 @@ module NewAdministrateur
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_instructeur
|
||||||
|
@instructeur = Instructeur.find_by(email: instructeur_email) ||
|
||||||
|
create_instructeur(instructeur_email)
|
||||||
|
|
||||||
|
if groupe_instructeur.instructeurs.include?(@instructeur)
|
||||||
|
flash[:alert] = "L’instructeur « #{instructeur_email} » est déjà dans le groupe."
|
||||||
|
|
||||||
|
else
|
||||||
|
groupe_instructeur.instructeurs << @instructeur
|
||||||
|
flash[:notice] = "L’instructeur « #{instructeur_email} » a été affecté au groupe."
|
||||||
|
GroupeInstructeurMailer
|
||||||
|
.add_instructeur(groupe_instructeur, @instructeur, current_user.email)
|
||||||
|
.deliver_later
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def create_instructeur(email)
|
||||||
|
user = User.create_or_promote_to_instructeur(
|
||||||
|
email,
|
||||||
|
SecureRandom.hex,
|
||||||
|
administrateurs: [current_administrateur]
|
||||||
|
)
|
||||||
|
user.invite!
|
||||||
|
user.instructeur
|
||||||
|
end
|
||||||
|
|
||||||
def procedure
|
def procedure
|
||||||
current_administrateur
|
current_administrateur
|
||||||
.procedures
|
.procedures
|
||||||
|
@ -59,6 +87,10 @@ module NewAdministrateur
|
||||||
procedure.groupe_instructeurs.find(params[:id])
|
procedure.groupe_instructeurs.find(params[:id])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def instructeur_email
|
||||||
|
params[:instructeur][:email].strip.downcase
|
||||||
|
end
|
||||||
|
|
||||||
def label
|
def label
|
||||||
params[:groupe_instructeur][:label]
|
params[:groupe_instructeur][:label]
|
||||||
end
|
end
|
||||||
|
|
14
app/mailers/groupe_instructeur_mailer.rb
Normal file
14
app/mailers/groupe_instructeur_mailer.rb
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
class GroupeInstructeurMailer < ApplicationMailer
|
||||||
|
layout 'mailers/layout'
|
||||||
|
|
||||||
|
def add_instructeur(group, instructeur, current_instructeur_email)
|
||||||
|
@email = instructeur.email
|
||||||
|
@group = group
|
||||||
|
@current_instructeur_email = current_instructeur_email
|
||||||
|
|
||||||
|
subject = "Ajout d’un instructeur dans le groupe \"#{group.label}\""
|
||||||
|
|
||||||
|
emails = @group.instructeurs.pluck(:email)
|
||||||
|
mail(bcc: emails, subject: subject)
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,11 @@
|
||||||
|
%p
|
||||||
|
Bonjour,
|
||||||
|
|
||||||
|
%p
|
||||||
|
L’instructeur « #{@email} » a été affecté au groupe « #{@group.label} » par « #{@current_instructeur_email} », en charge de la démarche « #{@group.procedure.libelle} ».
|
||||||
|
|
||||||
|
%p
|
||||||
|
Cliquez sur le lien ci-dessous pour voir la liste des instructeurs de ce groupe :
|
||||||
|
= link_to(@group.label, procedure_groupe_instructeur_url(@group.procedure, @group))
|
||||||
|
|
||||||
|
= render partial: "layouts/mailers/signature"
|
|
@ -20,6 +20,14 @@
|
||||||
|
|
||||||
.card
|
.card
|
||||||
.card-title Gestion des instructeurs
|
.card-title Gestion des instructeurs
|
||||||
|
= form_for :instructeur,
|
||||||
|
url: { action: :add_instructeur },
|
||||||
|
html: { class: 'form' } do |f|
|
||||||
|
|
||||||
|
= f.label :email do
|
||||||
|
Affecter un nouvel instructeur
|
||||||
|
= f.email_field :email, placeholder: 'marie.dupont@exemple.fr', required: true
|
||||||
|
= f.submit 'Affecter', class: 'button primary send'
|
||||||
|
|
||||||
%table.table.mt-2
|
%table.table.mt-2
|
||||||
%thead
|
%thead
|
||||||
|
|
|
@ -350,7 +350,11 @@ Rails.application.routes.draw do
|
||||||
get 'annotations'
|
get 'annotations'
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :groupe_instructeurs, only: [:index, :show, :create, :update]
|
resources :groupe_instructeurs, only: [:index, :show, :create, :update] do
|
||||||
|
member do
|
||||||
|
post 'add_instructeur'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
resources :administrateurs, controller: 'procedure_administrateurs', only: [:index, :create, :destroy]
|
resources :administrateurs, controller: 'procedure_administrateurs', only: [:index, :create, :destroy]
|
||||||
|
|
||||||
|
|
|
@ -83,4 +83,33 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
|
||||||
it { expect(flash.alert).to be_present }
|
it { expect(flash.alert).to be_present }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#add_instructeur' do
|
||||||
|
let!(:instructeur) { create(:instructeur) }
|
||||||
|
before do
|
||||||
|
gi_1_1.instructeurs << instructeur
|
||||||
|
|
||||||
|
post :add_instructeur,
|
||||||
|
params: {
|
||||||
|
procedure_id: procedure.id,
|
||||||
|
id: gi_1_1.id,
|
||||||
|
instructeur: { email: new_instructeur_email }
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'of a new instructeur' do
|
||||||
|
let(:new_instructeur_email) { 'new_instructeur@mail.com' }
|
||||||
|
|
||||||
|
it { expect(gi_1_1.instructeurs.pluck(:email)).to include(new_instructeur_email) }
|
||||||
|
it { expect(flash.notice).to be_present }
|
||||||
|
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, gi_1_1)) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'of an instructeur already in the group' do
|
||||||
|
let(:new_instructeur_email) { instructeur.email }
|
||||||
|
|
||||||
|
it { expect(flash.alert).to be_present }
|
||||||
|
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur)) }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue