merge instructeur

This commit is contained in:
simon lehericey 2021-10-04 15:26:01 +02:00
parent 9a6a53349f
commit 136f29524e
4 changed files with 59 additions and 2 deletions

View file

@ -17,7 +17,12 @@ module Manager
else else
user.dossiers.update_all(user_id: preexisting_user.id) user.dossiers.update_all(user_id: preexisting_user.id)
if preexisting_user.instructeur.nil?
user.instructeur&.update(user: preexisting_user) user.instructeur&.update(user: preexisting_user)
else
preexisting_user.instructeur.merge(user.instructeur)
end
user.expert&.update(user: preexisting_user) user.expert&.update(user: preexisting_user)
end end

View file

@ -0,0 +1,13 @@
# == Schema Information
#
# Table name: administrateurs_instructeurs
#
# created_at :datetime
# updated_at :datetime
# administrateur_id :integer
# instructeur_id :integer
#
class AdministrateursInstructeur < ApplicationRecord
belongs_to :administrateur
belongs_to :instructeur
end

View file

@ -10,7 +10,8 @@
# updated_at :datetime # updated_at :datetime
# #
class Instructeur < ApplicationRecord class Instructeur < ApplicationRecord
has_and_belongs_to_many :administrateurs has_many :administrateurs_instructeurs
has_many :administrateurs, through: :administrateurs_instructeurs
has_many :assign_to, dependent: :destroy has_many :assign_to, dependent: :destroy
has_many :groupe_instructeurs, through: :assign_to has_many :groupe_instructeurs, through: :assign_to
@ -19,6 +20,7 @@ class Instructeur < ApplicationRecord
has_many :assign_to_with_email_notifications, -> { with_email_notifications }, class_name: 'AssignTo', inverse_of: :instructeur has_many :assign_to_with_email_notifications, -> { with_email_notifications }, class_name: 'AssignTo', inverse_of: :instructeur
has_many :groupe_instructeur_with_email_notifications, through: :assign_to_with_email_notifications, source: :groupe_instructeur has_many :groupe_instructeur_with_email_notifications, through: :assign_to_with_email_notifications, source: :groupe_instructeur
has_many :commentaires
has_many :dossiers, -> { state_not_brouillon }, through: :groupe_instructeurs has_many :dossiers, -> { state_not_brouillon }, through: :groupe_instructeurs
has_many :follows, -> { active }, inverse_of: :instructeur has_many :follows, -> { active }, inverse_of: :instructeur
has_many :previous_follows, -> { inactive }, class_name: 'Follow', inverse_of: :instructeur has_many :previous_follows, -> { inactive }, class_name: 'Follow', inverse_of: :instructeur
@ -249,6 +251,14 @@ class Instructeur < ApplicationRecord
Dossier.connection.select_all(sanitized_query).first Dossier.connection.select_all(sanitized_query).first
end end
def merge(old_instructeur)
old_instructeur.assign_to.update_all(instructeur_id: id)
old_instructeur.follows.update_all(instructeur_id: id)
old_instructeur.administrateurs_instructeurs.update_all(instructeur_id: id)
old_instructeur.commentaires.update_all(instructeur_id: id)
old_instructeur.bulk_messages.update_all(instructeur_id: id)
end
private private
def annotations_hash(demande, annotations_privees, avis, messagerie) def annotations_hash(demande, annotations_privees, avis, messagerie)

View file

@ -69,6 +69,35 @@ describe Manager::UsersController, type: :controller do
expect(preexisting_user.instructeur).to match(instructeur) expect(preexisting_user.instructeur).to match(instructeur)
expect(preexisting_user.expert).to match(expert) expect(preexisting_user.expert).to match(expert)
end end
context 'and the preexisting account owns an instructeur and expert as well' do
let!(:preexisting_instructeur) { create(:instructeur, user: preexisting_user) }
let!(:preexisting_expert) { create(:expert, user: preexisting_user) }
context 'and the source instructeur has some procedures and dossiers' do
let!(:procedure) { create(:procedure, instructeurs: [instructeur]) }
let(:dossier) { create(:dossier) }
let(:administrateur) { create(:administrateur) }
let!(:commentaire) { create(:commentaire, instructeur: instructeur, dossier: dossier) }
let!(:bulk_message) { BulkMessage.create!(instructeur: instructeur, body: 'body', sent_at: Time.zone.now) }
before do
user.instructeur.followed_dossiers << dossier
user.instructeur.administrateurs << administrateur
end
it 'transferts all the stuff' do
subject
preexisting_user.reload
expect(procedure.instructeurs).to match([preexisting_user.instructeur])
expect(preexisting_user.instructeur.followed_dossiers).to match([dossier])
expect(preexisting_user.instructeur.administrateurs).to match([administrateur])
expect(preexisting_user.instructeur.commentaires).to match([commentaire])
expect(preexisting_user.instructeur.bulk_messages).to match([bulk_message])
end
end
end
end end
end end
end end