Remove instructeur from the group
This commit is contained in:
parent
a6deafd885
commit
a5ffe9f54b
6 changed files with 84 additions and 0 deletions
|
@ -64,6 +64,22 @@ module NewAdministrateur
|
||||||
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
|
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remove_instructeur
|
||||||
|
if groupe_instructeur.instructeurs.one?
|
||||||
|
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe"
|
||||||
|
|
||||||
|
else
|
||||||
|
@instructeur = Instructeur.find(instructeur_id)
|
||||||
|
groupe_instructeur.instructeurs.destroy(@instructeur)
|
||||||
|
flash[:notice] = "L’instructeur « #{@instructeur.email} » a été retiré du groupe."
|
||||||
|
GroupeInstructeurMailer
|
||||||
|
.remove_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)
|
def create_instructeur(email)
|
||||||
|
@ -91,6 +107,10 @@ module NewAdministrateur
|
||||||
params[:instructeur][:email].strip.downcase
|
params[:instructeur][:email].strip.downcase
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def instructeur_id
|
||||||
|
params[:instructeur][:id]
|
||||||
|
end
|
||||||
|
|
||||||
def label
|
def label
|
||||||
params[:groupe_instructeur][:label]
|
params[:groupe_instructeur][:label]
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,4 +11,15 @@ class GroupeInstructeurMailer < ApplicationMailer
|
||||||
emails = @group.instructeurs.pluck(:email)
|
emails = @group.instructeurs.pluck(:email)
|
||||||
mail(bcc: emails, subject: subject)
|
mail(bcc: emails, subject: subject)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remove_instructeur(group, instructeur, current_instructeur_email)
|
||||||
|
@email = instructeur.email
|
||||||
|
@group = group
|
||||||
|
@current_instructeur_email = current_instructeur_email
|
||||||
|
|
||||||
|
subject = "Suppression d’un instructeur dans le groupe \"#{group.label}\""
|
||||||
|
|
||||||
|
emails = @group.instructeurs.pluck(:email)
|
||||||
|
mail(bcc: emails, subject: subject)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
%p
|
||||||
|
Bonjour,
|
||||||
|
|
||||||
|
%p
|
||||||
|
L’instructeur « #{@email} » a été retiré du 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"
|
|
@ -37,5 +37,11 @@
|
||||||
- @instructeurs.each do |instructeur|
|
- @instructeurs.each do |instructeur|
|
||||||
%tr
|
%tr
|
||||||
%td= instructeur.email
|
%td= instructeur.email
|
||||||
|
%td.actions= button_to 'retirer',
|
||||||
|
{ action: :remove_instructeur },
|
||||||
|
{ method: :delete,
|
||||||
|
data: { confirm: "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » du groupe « #{@groupe_instructeur.label} » ?" },
|
||||||
|
params: { instructeur: { id: instructeur.id }},
|
||||||
|
class: 'button' }
|
||||||
|
|
||||||
= paginate @instructeurs
|
= paginate @instructeurs
|
||||||
|
|
|
@ -353,6 +353,7 @@ Rails.application.routes.draw do
|
||||||
resources :groupe_instructeurs, only: [:index, :show, :create, :update] do
|
resources :groupe_instructeurs, only: [:index, :show, :create, :update] do
|
||||||
member do
|
member do
|
||||||
post 'add_instructeur'
|
post 'add_instructeur'
|
||||||
|
delete 'remove_instructeur'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -112,4 +112,39 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
|
||||||
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur)) }
|
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur)) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#remove_instructeur' do
|
||||||
|
let!(:instructeur) { create(:instructeur) }
|
||||||
|
|
||||||
|
before { gi_1_1.instructeurs << admin.instructeur << instructeur }
|
||||||
|
|
||||||
|
def remove_instructeur(email)
|
||||||
|
delete :remove_instructeur,
|
||||||
|
params: {
|
||||||
|
procedure_id: procedure.id,
|
||||||
|
id: gi_1_1.id,
|
||||||
|
instructeur: { id: admin.instructeur.id }
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when there are many instructeurs' do
|
||||||
|
before { remove_instructeur(admin.user.email) }
|
||||||
|
|
||||||
|
it { expect(gi_1_1.instructeurs).to include(instructeur) }
|
||||||
|
it { expect(gi_1_1.reload.instructeurs.count).to eq(1) }
|
||||||
|
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, gi_1_1)) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when there is only one instructeur' do
|
||||||
|
before do
|
||||||
|
remove_instructeur(admin.user.email)
|
||||||
|
remove_instructeur(instructeur.email)
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(gi_1_1.instructeurs).to include(instructeur) }
|
||||||
|
it { expect(gi_1_1.instructeurs.count).to eq(1) }
|
||||||
|
it { expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un instructeur dans le groupe') }
|
||||||
|
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, gi_1_1)) }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue