constraint logic to active groups

This commit is contained in:
Eric Leroy-Terquem 2022-10-20 18:24:27 +02:00
parent 63ae328bee
commit 110953e450
7 changed files with 34 additions and 28 deletions

View file

@ -70,7 +70,7 @@ module Administrateurs
flash[:alert] = "Suppression impossible : il doit y avoir au moins un groupe instructeur sur chaque procédure"
else
@groupe_instructeur.destroy!
if procedure.groupe_instructeurs.actif.count == 1
if procedure.groupe_instructeurs.actif.one?
procedure.update!(routing_enabled: false)
routing_notice = " et le routage a été désactivé"
end
@ -199,13 +199,6 @@ 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_instructeurs_self_management_enabled
procedure.update!(instructeurs_self_management_enabled_params)

View file

@ -432,7 +432,7 @@ module Users
end
def should_fill_groupe_instructeur?
(!@dossier.procedure.routee? || @dossier.procedure.groupe_instructeurs.size == 1) && @dossier.groupe_instructeur_id.nil?
(!@dossier.procedure.routee? || @dossier.procedure.groupe_instructeurs.actif.one?) && @dossier.groupe_instructeur_id.nil?
end
def defaut_groupe_instructeur

View file

@ -619,7 +619,7 @@ class Dossier < ApplicationRecord
end
def show_groupe_instructeur_selector?
procedure.routee? && !procedure.feature_enabled?(:procedure_routage_api) && procedure.groupe_instructeurs.size > 1
procedure.routee? && !procedure.feature_enabled?(:procedure_routage_api) && procedure.groupe_instructeurs.actif.many?
end
def assign_to_groupe_instructeur(groupe_instructeur, author = nil)

View file

@ -51,4 +51,8 @@ class GroupeInstructeur < ApplicationRecord
.where(dossiers: { groupe_instructeur: self })
.update_all(unfollowed_at: Time.zone.now)
end
def can_delete?
dossiers.empty? && (procedure.groupe_instructeurs.actif.many? || (procedure.groupe_instructeurs.actif.one? && closed))
end
end

View file

@ -205,7 +205,7 @@ class Procedure < ApplicationRecord
has_one :refused_mail, class_name: "Mails::RefusedMail", dependent: :destroy
has_one :without_continuation_mail, class_name: "Mails::WithoutContinuationMail", dependent: :destroy
has_one :defaut_groupe_instructeur, -> { order(:label) }, class_name: 'GroupeInstructeur', inverse_of: :procedure
has_one :defaut_groupe_instructeur, -> { actif.order(:label) }, class_name: 'GroupeInstructeur', inverse_of: :procedure
has_one_attached :logo
has_one_attached :notice
@ -703,7 +703,7 @@ class Procedure < ApplicationRecord
end
def defaut_groupe_instructeur_for_new_dossier
if !routee? || feature_enabled?(:procedure_routage_api) || (routee? && self.groupe_instructeurs.size == 1)
if !routee? || feature_enabled?(:procedure_routage_api) || (routee? && self.groupe_instructeurs.actif.size == 1)
defaut_groupe_instructeur
end
end

View file

@ -39,21 +39,20 @@
= t('.csv_import.title')
%p.notice
= t('.csv_import.import_file_procedure_not_published')
%table.table.mt-2
%thead
%tr
// i18n-tasks-use t('.existing_groupe')
%th{ colspan: 2 }= t(".existing_groupe", count: groupes_instructeurs.total_count)
%th
- if groupe_instructeurs_count > 1
= link_to "Exporter au format CSV", export_groupe_instructeurs_admin_procedure_groupe_instructeurs_path(procedure, format: :csv)
%tbody
- groupes_instructeurs.each do |group|
- if groupes_instructeurs.many?
%table.table.mt-2
%thead
%tr
%td= group.label
%td.actions= link_to t('.set_up'), admin_procedure_groupe_instructeur_path(procedure, group)
- if groupes_instructeurs.many?
- if group.dossiers.empty?
// i18n-tasks-use t('.existing_groupe')
%th{ colspan: 2 }= t(".existing_groupe", count: groupes_instructeurs.total_count)
%th
= link_to "Exporter au format CSV", export_groupe_instructeurs_admin_procedure_groupe_instructeurs_path(procedure, format: :csv)
%tbody
- groupes_instructeurs.each do |group|
%tr
%td= group.label
%td.actions= link_to t('.set_up'), admin_procedure_groupe_instructeur_path(procedure, group)
- if group.can_delete?
%td.actions
= link_to admin_procedure_groupe_instructeur_path(procedure, group), { method: :delete, class: 'button', data: { confirm: t('.group_management.delete_confirmation', group_name: group.label) }} do
%span.icon.delete

View file

@ -183,22 +183,32 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
describe '#update' do
let(:new_name) { 'nouveau nom du groupe' }
let(:closed_value) { false }
before do
patch :update,
params: {
procedure_id: procedure.id,
id: gi_1_1.id,
groupe_instructeur: { label: new_name, closed: true }
groupe_instructeur: { label: new_name, closed: closed_value }
}
gi_1_1.reload
end
it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1)) }
it { expect(gi_1_1.label).to eq(new_name) }
it { expect(gi_1_1.closed).to eq(true) }
it { expect(gi_1_1.closed).to eq(false) }
it { expect(flash.notice).to be_present }
context 'when we try do disable the only groupe instructeur' do
let(:closed_value) { true }
it { expect(response).to render_template(:show) }
it { expect(gi_1_1.label).not_to eq(new_name) }
it { expect(gi_1_1.closed).to eq(false) }
it { expect(flash.alert).to be_present }
end
context 'when the name is already taken' do
let!(:gi_1_2) { procedure.groupe_instructeurs.create(label: 'groupe instructeur 2') }
let(:new_name) { gi_1_2.label }