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
|
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
|
||||||
|
|
||||||
|
|
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
|
# 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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue