feat(procedure.routing): allow admin to manage instructeur even when procedure has some routing
This commit is contained in:
parent
641a33e1e0
commit
5407011668
5 changed files with 45 additions and 15 deletions
|
@ -12,8 +12,8 @@
|
||||||
= render Dsfr::ToggleComponent.new(form: f,
|
= render Dsfr::ToggleComponent.new(form: f,
|
||||||
target: :instructeurs_self_management_enabled,
|
target: :instructeurs_self_management_enabled,
|
||||||
title: 'Autogestion des instructeurs',
|
title: 'Autogestion des instructeurs',
|
||||||
hint: "L’autogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.#{ ' Lorsque la démarche est routée, l’autogestion est activée d’office et n’est pas désactivable.' if @procedure.routing_enabled? }",
|
hint: "L’autogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.#{ ' Lorsque la démarche est routée, l’autogestion est activée d’office. A moins que votre démarche requiert une validation des instructeurs (ex: signer une clause de confidentialité), nous recommandons de laisser l’autogestion des instructeurs activée.' if @procedure.routing_enabled? }",
|
||||||
disabled: @procedure.routing_enabled?)
|
disabled: false)
|
||||||
%p.fr-mt-2w Routage
|
%p.fr-mt-2w Routage
|
||||||
%p.fr-mt-2w= t('.routing_configuration_notice_1')
|
%p.fr-mt-2w= t('.routing_configuration_notice_1')
|
||||||
%p.fr-icon-info-line.fr-hint-text{ aria: { hidden: true } }
|
%p.fr-icon-info-line.fr-hint-text{ aria: { hidden: true } }
|
||||||
|
|
|
@ -34,10 +34,6 @@ module ProcedureHelper
|
||||||
procedure_auto_archive_date(procedure) + ' ' + procedure_auto_archive_time(procedure)
|
procedure_auto_archive_date(procedure) + ' ' + procedure_auto_archive_time(procedure)
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_manage_groupe_instructeurs?(procedure)
|
|
||||||
procedure.routing_enabled? && current_administrateur&.owns?(procedure)
|
|
||||||
end
|
|
||||||
|
|
||||||
def can_send_groupe_message?(procedure)
|
def can_send_groupe_message?(procedure)
|
||||||
groupe_instructeur_on_procedure_ids = procedure.groupe_instructeurs.active.ids.sort
|
groupe_instructeur_on_procedure_ids = procedure.groupe_instructeurs.active.ids.sort
|
||||||
groupe_instructeur_on_instructeur_ids = current_instructeur.groupe_instructeurs.active.where(procedure: procedure).ids.sort
|
groupe_instructeur_on_instructeur_ids = current_instructeur.groupe_instructeurs.active.where(procedure: procedure).ids.sort
|
||||||
|
|
|
@ -718,7 +718,7 @@ class Procedure < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def instructeurs_self_management?
|
def instructeurs_self_management?
|
||||||
routing_enabled? || instructeurs_self_management_enabled?
|
instructeurs_self_management_enabled?
|
||||||
end
|
end
|
||||||
|
|
||||||
def groupe_instructeurs_but_defaut
|
def groupe_instructeurs_but_defaut
|
||||||
|
|
|
@ -7,14 +7,15 @@
|
||||||
|
|
|
|
||||||
= link_to t('instructeurs.dossiers.header.banner.statistics'), stats_instructeur_procedure_path(procedure), class: 'header-link'
|
= link_to t('instructeurs.dossiers.header.banner.statistics'), stats_instructeur_procedure_path(procedure), class: 'header-link'
|
||||||
|
|
||||||
- if procedure.instructeurs_self_management?
|
- if current_administrateur&.owns?(procedure)
|
||||||
|
|
|
|
||||||
- if can_manage_groupe_instructeurs?(procedure)
|
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), admin_procedure_groupe_instructeurs_path(procedure), class: 'header-link'
|
||||||
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), admin_procedure_groupe_instructeurs_path(procedure), class: 'header-link'
|
- elsif procedure.instructeurs_self_management? && procedure.routing_enabled?
|
||||||
- elsif procedure.routing_enabled?
|
|
|
||||||
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupes_path(procedure), class: 'header-link'
|
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupes_path(procedure), class: 'header-link'
|
||||||
- else
|
- elsif procedure.instructeurs_self_management?
|
||||||
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur), class: 'header-link'
|
|
|
||||||
|
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur), class: 'header-link'
|
||||||
|
|
||||||
- if can_send_groupe_message?(procedure)
|
- if can_send_groupe_message?(procedure)
|
||||||
|
|
|
|
||||||
|
|
|
@ -257,7 +257,7 @@ describe Instructeurs::ProceduresController, type: :controller do
|
||||||
|
|
||||||
describe "#show" do
|
describe "#show" do
|
||||||
let(:instructeur) { create(:instructeur) }
|
let(:instructeur) { create(:instructeur) }
|
||||||
let!(:procedure) { create(:procedure, :expirable, instructeurs: [instructeur]) }
|
let(:procedure) { create(:procedure, :expirable, instructeurs: [instructeur]) }
|
||||||
let!(:gi_2) { create(:groupe_instructeur, label: '2', procedure: procedure) }
|
let!(:gi_2) { create(:groupe_instructeur, label: '2', procedure: procedure) }
|
||||||
let!(:gi_3) { create(:groupe_instructeur, label: '3', procedure: procedure) }
|
let!(:gi_3) { create(:groupe_instructeur, label: '3', procedure: procedure) }
|
||||||
|
|
||||||
|
@ -267,6 +267,39 @@ describe Instructeurs::ProceduresController, type: :controller do
|
||||||
get :show, params: { procedure_id: procedure.id, statut: statut }
|
get :show, params: { procedure_id: procedure.id, statut: statut }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'access to groupes_instructeur' do
|
||||||
|
render_views
|
||||||
|
let(:procedure) { create(:procedure, instructeurs_self_management_enabled:, instructeurs: [instructeur]) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
sign_in(instructeur.user)
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when instructeurs_self_management? is false' do
|
||||||
|
let(:instructeurs_self_management_enabled) { false }
|
||||||
|
it { expect(response.body).not_to have_link(href: admin_procedure_groupe_instructeurs_path(procedure)) }
|
||||||
|
it { expect(response.body).not_to have_link(href: instructeur_groupes_path(procedure)) }
|
||||||
|
it { expect(response.body).not_to have_link(href: instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur)) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when instructeurs_self_management? is true' do
|
||||||
|
let(:instructeurs_self_management_enabled) { true }
|
||||||
|
it { expect(response.body).not_to have_link(href: admin_procedure_groupe_instructeurs_path(procedure)) }
|
||||||
|
it { expect(response.body).to have_link(href: instructeur_groupes_path(procedure)) }
|
||||||
|
it { expect(response.body).not_to have_link(href: instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur)) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when instructeurs_self_management? is false but as owner of the procedure' do
|
||||||
|
let(:instructeurs_self_management_enabled) { false }
|
||||||
|
let(:administrateur) { create(:administrateur, user: instructeur.user) }
|
||||||
|
let(:procedure) { create(:procedure, :expirable, instructeurs_self_management_enabled:, administrateurs: [administrateur], instructeurs: [instructeur]) }
|
||||||
|
it { expect(response.body).to have_link(href: admin_procedure_groupe_instructeurs_path(procedure)) }
|
||||||
|
it { expect(response.body).not_to have_link(href: instructeur_groupes_path(procedure)) }
|
||||||
|
it { expect(response.body).not_to have_link(href: instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur)) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "when logged in, and belonging to gi_1, gi_2" do
|
context "when logged in, and belonging to gi_1, gi_2" do
|
||||||
before do
|
before do
|
||||||
sign_in(instructeur.user)
|
sign_in(instructeur.user)
|
||||||
|
|
Loading…
Reference in a new issue