transfere les services lors de suppression admin

Lorsqu'un administrateur est supprimé, ses services sont transférés à un
autre administrateur pour chacune de ses procédures
This commit is contained in:
Christophe Robillard 2020-01-17 16:24:33 +01:00
parent d9570eedc6
commit 675bbdad15
3 changed files with 29 additions and 5 deletions

View file

@ -22,11 +22,7 @@ module Manager
def delete
administrateur = Administrateur.find(params[:id])
if !administrateur.can_be_deleted?
fail "Impossible de supprimer cet administrateur car il a des dossiers ou des procédures"
end
administrateur.dossiers.each(&:delete_and_keep_track)
administrateur.destroy
administrateur.delete_and_transfer_services
logger.info("L'administrateur #{administrateur.id} est supprimé par #{current_administration.id}")
flash[:notice] = "L'administrateur #{administrateur.id} est supprimé"

View file

@ -70,4 +70,17 @@ class Administrateur < ApplicationRecord
def can_be_deleted?
dossiers.state_instruction_commencee.none? && procedures.all? { |p| p.administrateurs.count > 1 }
end
def delete_and_transfer_services
if !can_be_deleted?
fail "Impossible de supprimer cet administrateur car il a des dossiers ou des procédures"
end
dossiers.each(&:delete_and_keep_track)
procedures.each do |procedure|
next_administrateur = procedure.administrateurs.where.not(id: self.id).first
procedure.service.update(administrateur: next_administrateur)
end
destroy
end
end

View file

@ -46,6 +46,21 @@ describe Administrateur, type: :model do
end
end
describe '#delete_and_transfer_services' do
let!(:administrateur) { create(:administrateur) }
let!(:autre_administrateur) { create(:administrateur) }
let!(:procedure) { create(:procedure, :with_service, administrateurs: [administrateur, autre_administrateur]) }
let(:service) { procedure.service }
it "delete and transfer services to other admin" do
service.update(administrateur: administrateur)
administrateur.delete_and_transfer_services
expect(Administrateur.find_by(id: administrateur.id)).to be_nil
expect(service.reload.administrateur).to eq(autre_administrateur)
end
end
# describe '#password_complexity' do
# let(:email) { 'mail@beta.gouv.fr' }
# let(:passwords) { ['pass', '12pass23', 'démarches ', 'démarches-simple', 'démarches-simplifiées-pwd'] }