Merge pull request #10000 from mfo/US/groupe-instructeur-manageable-for-routee-procedure

ETQ administrateur, je peux gerer la liste des instructeurs même si le routage est activé sur ma démarche
This commit is contained in:
mfo 2024-02-16 09:26:06 +00:00 committed by GitHub
commit 4dfb3b86ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 70 additions and 17 deletions

View file

@ -12,8 +12,8 @@
= render Dsfr::ToggleComponent.new(form: f,
target: :instructeurs_self_management_enabled,
title: 'Autogestion des instructeurs',
hint: "Lautogestion 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, lautogestion est activée doffice et nest pas désactivable.' if @procedure.routing_enabled? }",
disabled: @procedure.routing_enabled?)
hint: "Lautogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.#{ 'Nous recommandons de laisser lautogestion des instructeurs activée.' if @procedure.routing_enabled? }",
disabled: false)
%p.fr-mt-2w Routage
%p.fr-mt-2w= t('.routing_configuration_notice_1')
%p.fr-icon-info-line.fr-hint-text{ aria: { hidden: true } }

View file

@ -34,10 +34,6 @@ module ProcedureHelper
procedure_auto_archive_date(procedure) + ' ' + procedure_auto_archive_time(procedure)
end
def can_manage_groupe_instructeurs?(procedure)
procedure.routing_enabled? && current_administrateur&.owns?(procedure)
end
def can_send_groupe_message?(procedure)
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

View file

@ -718,7 +718,7 @@ class Procedure < ApplicationRecord
end
def instructeurs_self_management?
routing_enabled? || instructeurs_self_management_enabled?
instructeurs_self_management_enabled?
end
def groupe_instructeurs_but_defaut

View file

@ -7,14 +7,15 @@
|
= 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'
- elsif procedure.routing_enabled?
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupes_path(procedure), class: 'header-link'
- else
= 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'), admin_procedure_groupe_instructeurs_path(procedure), class: 'header-link'
- elsif procedure.instructeurs_self_management? && procedure.routing_enabled?
|
= link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupes_path(procedure), class: 'header-link'
- elsif procedure.instructeurs_self_management?
|
= 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)
|

View file

@ -0,0 +1,5 @@
class ChangeColumnDefaultProceduresInstructeursSelfManagementEnabled < ActiveRecord::Migration[7.0]
def change
change_column_default :procedures, :instructeurs_self_management_enabled, false
end
end

View file

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2024_01_26_071130) do
ActiveRecord::Schema[7.0].define(version: 2024_02_15_164247) do
# These are extensions that must be enabled in order to support this database
enable_extension "pgcrypto"
enable_extension "plpgsql"
@ -871,7 +871,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_01_26_071130) do
t.boolean "for_individual", default: false
t.datetime "hidden_at", precision: nil
t.datetime "hidden_at_as_template", precision: nil
t.boolean "instructeurs_self_management_enabled"
t.boolean "instructeurs_self_management_enabled", default: false
t.boolean "juridique_required", default: true
t.string "libelle"
t.string "lien_demarche"

View file

@ -0,0 +1,18 @@
namespace :after_party do
desc 'Deployment task: backfill_procedure_instructeurs_self_management_enabled'
task backfill_procedure_instructeurs_self_management_enabled: :environment do
puts "Running deploy task 'backfill_procedure_instructeurs_self_management_enabled'"
# rubocop:disable DS/Unscoped
procedures = Procedure.unscoped.all
# rubocop:enable DS/Unscoped
progress = ProgressReport.new(procedures.count)
Procedure.find_each do |procedure|
procedure.update_column(:instructeurs_self_management_enabled, procedure.routing_enabled?)
progress.inc(1)
end
progress.finish
end
end

View file

@ -257,7 +257,7 @@ describe Instructeurs::ProceduresController, type: :controller do
describe "#show" do
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_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 }
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
before do
sign_in(instructeur.user)