toggle routing when adding or deleting groupe_instructeurs

This commit is contained in:
Eric Leroy-Terquem 2022-10-14 17:10:42 +02:00
parent 55a2db2cb0
commit b419c48262
9 changed files with 32 additions and 47 deletions

View file

@ -13,13 +13,12 @@ module Administrateurs
def index
@procedure = procedure
@groupes_instructeurs = paginated_groupe_instructeurs
if procedure.routee?
@groupes_instructeurs = paginated_groupe_instructeurs
@instructeurs = []
@available_instructeur_emails = []
else
@groupes_instructeurs = []
@instructeurs = paginated_instructeurs
@available_instructeur_emails = available_instructeur_emails
end
@ -42,6 +41,7 @@ module Administrateurs
notice: "Le groupe dinstructeurs « #{@groupe_instructeur.label} » a été créé."
else
@procedure = procedure
@instructeurs = paginated_instructeurs
@groupes_instructeurs = paginated_groupe_instructeurs
flash[:alert] = "le nom « #{@groupe_instructeur.label} » est déjà pris par un autre groupe."
@ -74,7 +74,11 @@ module Administrateurs
flash[:alert] = "Suppression impossible : il doit y avoir au moins un groupe instructeur sur chaque procédure"
else
@groupe_instructeur.destroy!
flash[:notice] = "le groupe « #{@groupe_instructeur.label} » a été supprimé."
if procedure.groupe_instructeurs.actif.count == 1
procedure.update!(routing_enabled: false)
end
routing_notice = "et le routage a été désactivé" if procedure.groupe_instructeurs.size == 1
flash[:notice] = "le groupe « #{@groupe_instructeur.label} » a été supprimé #{routing_notice}."
end
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
end
@ -199,12 +203,12 @@ module Administrateurs
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
end
def update_routing_enabled
procedure.update!(routing_enabled_params)
redirect_to admin_procedure_groupe_instructeurs_path(procedure),
notice: "Le routage est #{procedure.routing_enabled? ? "activée" : "désactivée"}."
end
# def update_routing_enabled
# procedure.update!(routing_enabled_params)
#
# redirect_to admin_procedure_groupe_instructeurs_path(procedure),
# notice: "Le routage est #{procedure.routing_enabled? ? "activée" : "désactivée"}."
# end
def update_instructeurs_self_management_enabled
procedure.update!(instructeurs_self_management_enabled_params)

View file

@ -22,9 +22,17 @@ class GroupeInstructeur < ApplicationRecord
validates :label, uniqueness: { scope: :procedure, message: 'existe déjà' }
before_validation -> { label&.strip! }
after_create :toggle_routing
scope :without_group, -> (group) { where.not(id: group) }
scope :for_api_v2, -> { includes(procedure: [:administrateurs]) }
scope :actif, -> { where(closed: false) }
def toggle_routing
procedure = self.procedure.reload
routing_enabled = procedure.groupe_instructeurs.actif.count > 1
procedure.update!(routing_enabled: routing_enabled)
end
def add(instructeur)
return if in?(instructeur.groupe_instructeurs)

View file

@ -4,11 +4,6 @@
- if !procedure.routee?
%p.notice= t('.notice_html')
- if procedure.routee?
- if procedure.routing_enabled? && procedure.groupe_instructeurs.size == 1
= link_to t('.button.routing_disable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure, routing: :disable), class: 'fr-btn', method: 'patch'
- else
= link_to t('.button.routing_enable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure, routing: :enable), class: 'fr-btn', method: 'patch'
.card
%h2.card-title Lautogestion des instructeurs
%p.notice= t('.self_managment_notice_html')

View file

@ -14,9 +14,8 @@
= render partial: 'administrateurs/groupe_instructeurs/routing', locals: { procedure: @procedure }
- if @procedure.routee?
= render partial: 'administrateurs/groupe_instructeurs/edit', locals: { procedure: @procedure, groupes_instructeurs: @groupes_instructeurs }
- else
= render partial: 'administrateurs/groupe_instructeurs/edit', locals: { procedure: @procedure, groupes_instructeurs: @groupes_instructeurs }
- if @procedure.groupe_instructeurs.one?
= render partial: 'administrateurs/groupe_instructeurs/instructeurs',
locals: { procedure: @procedure,
groupe_instructeur: @procedure.defaut_groupe_instructeur,

View file

@ -480,7 +480,6 @@ Rails.application.routes.draw do
collection do
patch 'update_routing_criteria_name'
patch 'update_routing_enabled'
patch 'update_instructeurs_self_management_enabled'
post 'import'
get 'export_groupe_instructeurs'

View file

@ -97,8 +97,9 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
context 'of a group that can be deleted' do
before { delete_group gi_1_2 }
it { expect(flash.notice).to be_present }
it { expect(flash.notice).to eq "le groupe « groupe instructeur 2 » a été supprimé et le routage a été désactivé." }
it { expect(procedure.groupe_instructeurs.count).to eq(1) }
it { expect(procedure.reload.routing_enabled?).to eq(false) }
it { expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure)) }
end

View file

@ -26,11 +26,15 @@ describe 'Manage procedure instructeurs', js: true do
scenario 'can add instructeur' do
visit admin_procedure_groupe_instructeurs_path(procedure)
expect {
fill_in "instructeur_emails", with: create(:instructeur).email
click_on "Affecter"
}.to change { procedure.instructeurs.count }.by(1)
expect {
fill_in "groupe_instructeur_label", with: "Bordeaux"
click_on "Ajouter le groupe"
}.to change { procedure.groupe_instructeurs.count }.by(1)
expect(procedure.reload.routing_enabled).to eq true
end
end

View file

@ -32,19 +32,18 @@ describe 'The routing', js: true do
# add victor to littéraire groupe
fill_in 'Emails', with: 'victor@inst.com'
perform_enqueued_jobs { click_on 'Affecter' }
expect(page).to have_text("Linstructeur victor@inst.com a été affecté au groupe « littéraire »")
expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche")
victor = User.find_by(email: 'victor@inst.com').instructeur
# add superwoman to littéraire groupe
fill_in 'Emails', with: 'superwoman@inst.com'
perform_enqueued_jobs { click_on 'Affecter' }
expect(page).to have_text("Linstructeur superwoman@inst.com a été affecté au groupe « littéraire »")
expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche")
superwoman = User.find_by(email: 'superwoman@inst.com').instructeur
# add inactive groupe
click_on 'Groupes dinstructeurs'
fill_in 'Ajouter un groupe', with: 'non visible car inactif'
click_on 'Ajouter le groupe'
check "Groupe inactif"

View file

@ -238,30 +238,6 @@ describe 'The user' do
expect(page).to have_text('file.pdf')
end
context 'with routing activated and one instructor group' do
let!(:simple_procedure) { create(:simple_procedure, :published, :with_type_de_champ, :for_individual) }
let!(:administrateur) { create(:administrateur, procedures: [simple_procedure]) }
before do
simple_procedure.update(routing_enabled: true)
simple_procedure.defaut_groupe_instructeur.instructeurs << administrateur.instructeur
end
it 'sends the dossier without selecting instructor group', js: true do
log_in(user, simple_procedure)
fill_individual
fill_in('Texte obligatoire', with: 'bla bla')
wait_for_autosave
expect(page).not_to have_text('Votre ville')
click_on 'Déposer le dossier'
expect(page).to have_current_path(merci_dossier_path(user_dossier))
expect(page).to have_text('Merci')
end
end
context 'with condition' do
include Logic