constraint logic to active groups
This commit is contained in:
parent
63ae328bee
commit
110953e450
7 changed files with 34 additions and 28 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }
|
||||
|
|
Loading…
Reference in a new issue