merge instructeur
This commit is contained in:
parent
9a6a53349f
commit
136f29524e
4 changed files with 59 additions and 2 deletions
|
@ -17,7 +17,12 @@ module Manager
|
|||
else
|
||||
user.dossiers.update_all(user_id: preexisting_user.id)
|
||||
|
||||
user.instructeur&.update(user: preexisting_user)
|
||||
if preexisting_user.instructeur.nil?
|
||||
user.instructeur&.update(user: preexisting_user)
|
||||
else
|
||||
preexisting_user.instructeur.merge(user.instructeur)
|
||||
end
|
||||
|
||||
user.expert&.update(user: preexisting_user)
|
||||
end
|
||||
|
||||
|
|
13
app/models/administrateurs_instructeur.rb
Normal file
13
app/models/administrateurs_instructeur.rb
Normal 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
|
|
@ -10,7 +10,8 @@
|
|||
# updated_at :datetime
|
||||
#
|
||||
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 :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 :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 :follows, -> { active }, 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
|
||||
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
|
||||
|
||||
def annotations_hash(demande, annotations_privees, avis, messagerie)
|
||||
|
|
|
@ -69,6 +69,35 @@ describe Manager::UsersController, type: :controller do
|
|||
expect(preexisting_user.instructeur).to match(instructeur)
|
||||
expect(preexisting_user.expert).to match(expert)
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue