refactor(DossierAssignment): move create_assignment to assign_to_groupe_instructeur
This commit is contained in:
parent
24f68b4deb
commit
0e58e10b82
10 changed files with 18 additions and 58 deletions
|
@ -200,14 +200,7 @@ module Administrateurs
|
|||
target_group = procedure.groupe_instructeurs.find(params[:target_group])
|
||||
reaffecter_bulk_messages(target_group)
|
||||
groupe_instructeur.dossiers.find_each do |dossier|
|
||||
previous_group = dossier.groupe_instructeur
|
||||
dossier.assign_to_groupe_instructeur(target_group, current_administrateur)
|
||||
dossier.create_assignment(
|
||||
DossierAssignment.modes.fetch(:manual),
|
||||
previous_group,
|
||||
target_group,
|
||||
current_administrateur.email
|
||||
)
|
||||
dossier.assign_to_groupe_instructeur(target_group, DossierAssignment.modes.fetch(:manual), current_administrateur)
|
||||
end
|
||||
|
||||
flash[:notice] = "Les dossiers du groupe « #{groupe_instructeur.label} » ont été réaffectés au groupe « #{target_group.label} »."
|
||||
|
@ -215,17 +208,9 @@ module Administrateurs
|
|||
end
|
||||
|
||||
def reaffecter_all_dossiers_to_defaut_groupe
|
||||
defaut_groupe = procedure.defaut_groupe_instructeur
|
||||
procedure.groupe_instructeurs_but_defaut.each do |gi|
|
||||
gi.dossiers.find_each do |dossier|
|
||||
previous_group = dossier.groupe_instructeur
|
||||
dossier.assign_to_groupe_instructeur(defaut_groupe, current_administrateur)
|
||||
dossier.create_assignment(
|
||||
DossierAssignment.modes.fetch(:manual),
|
||||
previous_group,
|
||||
defaut_groupe,
|
||||
current_administrateur.email
|
||||
)
|
||||
dossier.assign_to_groupe_instructeur(procedure.defaut_groupe_instructeur, DossierAssignment.modes.fetch(:manual), current_administrateur)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -359,23 +359,14 @@ module Instructeurs
|
|||
def reaffecter
|
||||
dossier = current_instructeur.dossiers.find(params[:dossier_id])
|
||||
|
||||
previous_groupe_instructeur = dossier.groupe_instructeur
|
||||
|
||||
new_group = dossier
|
||||
.procedure
|
||||
.groupe_instructeurs.find(params[:groupe_instructeur_id])
|
||||
|
||||
dossier.assign_to_groupe_instructeur(new_group)
|
||||
dossier.assign_to_groupe_instructeur(new_group, DossierAssignment.modes.fetch(:manual), current_instructeur)
|
||||
|
||||
dossier.update!(forced_groupe_instructeur: true)
|
||||
|
||||
dossier.create_assignment(
|
||||
DossierAssignment.modes.fetch(:manual),
|
||||
previous_groupe_instructeur,
|
||||
new_group,
|
||||
current_instructeur.email
|
||||
)
|
||||
|
||||
flash.notice = t('instructeurs.dossiers.reaffectation', dossier_id: dossier.id, label: new_group.label)
|
||||
redirect_to instructeur_procedure_path(procedure)
|
||||
end
|
||||
|
|
|
@ -11,15 +11,7 @@ module Mutations
|
|||
field :errors, [Types::ValidationErrorType], null: true
|
||||
|
||||
def resolve(dossier:, groupe_instructeur:)
|
||||
previous_groupe_instructeur = dossier.groupe_instructeur
|
||||
|
||||
dossier.assign_to_groupe_instructeur(groupe_instructeur)
|
||||
|
||||
dossier.create_assignment(
|
||||
DossierAssignment.modes.fetch(:manual),
|
||||
previous_groupe_instructeur,
|
||||
dossier.groupe_instructeur
|
||||
)
|
||||
dossier.assign_to_groupe_instructeur(groupe_instructeur, DossierAssignment.modes.fetch(:manual))
|
||||
|
||||
{ dossier: }
|
||||
end
|
||||
|
|
|
@ -69,7 +69,6 @@ module DossierCloneConcern
|
|||
diff = make_diff(editing_fork)
|
||||
apply_diff(diff)
|
||||
touch(:last_champ_updated_at)
|
||||
assign_to_groupe_instructeur(editing_fork.groupe_instructeur)
|
||||
end
|
||||
reload
|
||||
update_search_terms_later
|
||||
|
|
|
@ -688,12 +688,16 @@ class Dossier < ApplicationRecord
|
|||
procedure.discarded? || (brouillon? && !procedure.dossier_can_transition_to_en_construction?)
|
||||
end
|
||||
|
||||
def assign_to_groupe_instructeur(groupe_instructeur, author = nil)
|
||||
def assign_to_groupe_instructeur(groupe_instructeur, mode, author = nil)
|
||||
return if groupe_instructeur.present? && groupe_instructeur.procedure != procedure
|
||||
return if self.groupe_instructeur == groupe_instructeur
|
||||
|
||||
previous_groupe_instructeur = self.groupe_instructeur
|
||||
|
||||
update!(groupe_instructeur:, groupe_instructeur_updated_at: Time.zone.now)
|
||||
|
||||
create_assignment(mode, previous_groupe_instructeur, groupe_instructeur, author&.email)
|
||||
|
||||
if !brouillon?
|
||||
unfollow_stale_instructeurs
|
||||
if author.present?
|
||||
|
|
|
@ -2,16 +2,12 @@ module RoutingEngine
|
|||
def self.compute(dossier)
|
||||
return if dossier.forced_groupe_instructeur
|
||||
|
||||
previous_groupe_instructeur = dossier.groupe_instructeur
|
||||
|
||||
matching_groupe = dossier.procedure.groupe_instructeurs.active.reject(&:invalid_rule?).find do |gi|
|
||||
gi.routing_rule&.compute(dossier.champs)
|
||||
end
|
||||
|
||||
matching_groupe ||= dossier.procedure.defaut_groupe_instructeur
|
||||
|
||||
dossier.assign_to_groupe_instructeur(matching_groupe)
|
||||
|
||||
dossier.create_assignment(DossierAssignment.modes.fetch(:auto), previous_groupe_instructeur, matching_groupe)
|
||||
dossier.assign_to_groupe_instructeur(matching_groupe, DossierAssignment.modes.fetch(:auto))
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1187,12 +1187,11 @@ describe Instructeurs::DossiersController, type: :controller do
|
|||
describe '#reaffecter' do
|
||||
let!(:gi_1) { procedure.groupe_instructeurs.first }
|
||||
let!(:gi_2) { GroupeInstructeur.create(label: 'deuxième groupe', procedure: procedure) }
|
||||
let!(:dossier) { create(:dossier, :en_construction, procedure: procedure, groupe_instructeur: gi_1) }
|
||||
let!(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: procedure, groupe_instructeur: gi_1) }
|
||||
let!(:new_instructeur) { create(:instructeur) }
|
||||
|
||||
before do
|
||||
gi_1.instructeurs << new_instructeur
|
||||
gi_1.dossiers << dossier
|
||||
new_instructeur.followed_dossiers << dossier
|
||||
|
||||
post :reaffecter,
|
||||
|
@ -1221,20 +1220,14 @@ describe Instructeurs::DossiersController, type: :controller do
|
|||
describe '#personnes_impliquees' do
|
||||
let!(:gi_1) { procedure.groupe_instructeurs.first }
|
||||
let!(:gi_2) { GroupeInstructeur.create(label: 'deuxième groupe', procedure: procedure) }
|
||||
let!(:dossier) { create(:dossier, :en_construction, procedure: procedure, groupe_instructeur: gi_1) }
|
||||
let!(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: procedure, groupe_instructeur: gi_1) }
|
||||
let!(:new_instructeur) { create(:instructeur) }
|
||||
|
||||
before do
|
||||
gi_1.instructeurs << new_instructeur
|
||||
gi_2.instructeurs << instructeur
|
||||
new_instructeur.followed_dossiers << dossier
|
||||
dossier.assign_to_groupe_instructeur(gi_2)
|
||||
dossier.create_assignment(
|
||||
DossierAssignment.modes.fetch(:manual),
|
||||
gi_1,
|
||||
gi_2,
|
||||
new_instructeur.email
|
||||
)
|
||||
dossier.assign_to_groupe_instructeur(gi_2, DossierAssignment.modes.fetch(:manual), new_instructeur)
|
||||
|
||||
get :personnes_impliquees,
|
||||
params: {
|
||||
|
|
|
@ -221,7 +221,7 @@ RSpec.describe DossierCloneConcern do
|
|||
context 'with updated groupe instructeur' do
|
||||
before {
|
||||
dossier.update!(groupe_instructeur: create(:groupe_instructeur))
|
||||
forked_dossier.assign_to_groupe_instructeur(dossier.procedure.defaut_groupe_instructeur)
|
||||
forked_dossier.assign_to_groupe_instructeur(dossier.procedure.defaut_groupe_instructeur, DossierAssignment.modes.fetch(:manual))
|
||||
}
|
||||
|
||||
it { is_expected.to eq(added: [], updated: [], removed: []) }
|
||||
|
|
|
@ -578,12 +578,12 @@ describe Dossier, type: :model do
|
|||
let(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
|
||||
|
||||
it "can change groupe instructeur" do
|
||||
dossier.assign_to_groupe_instructeur(new_groupe_instructeur_new_procedure)
|
||||
dossier.assign_to_groupe_instructeur(new_groupe_instructeur_new_procedure, DossierAssignment.modes.fetch(:auto))
|
||||
expect(dossier.groupe_instructeur).not_to eq(new_groupe_instructeur_new_procedure)
|
||||
end
|
||||
|
||||
it "can not change groupe instructeur if new groupe is from another procedure" do
|
||||
dossier.assign_to_groupe_instructeur(new_groupe_instructeur)
|
||||
dossier.assign_to_groupe_instructeur(new_groupe_instructeur, DossierAssignment.modes.fetch(:auto))
|
||||
expect(dossier.groupe_instructeur).to eq(new_groupe_instructeur)
|
||||
end
|
||||
end
|
||||
|
@ -603,7 +603,7 @@ describe Dossier, type: :model do
|
|||
it "unfollows stale instructeurs when groupe instructeur change" do
|
||||
instructeur.follow(dossier)
|
||||
instructeur2.follow(dossier)
|
||||
dossier.reload.assign_to_groupe_instructeur(new_groupe_instructeur, procedure.administrateurs.first)
|
||||
dossier.reload.assign_to_groupe_instructeur(new_groupe_instructeur, DossierAssignment.modes.fetch(:auto), procedure.administrateurs.first)
|
||||
|
||||
expect(dossier.reload.followers_instructeurs).not_to include(instructeur)
|
||||
expect(dossier.reload.followers_instructeurs).to include(instructeur2)
|
||||
|
|
|
@ -209,7 +209,7 @@ describe Instructeur, type: :model do
|
|||
|
||||
context 'when there is a modification on groupe instructeur' do
|
||||
let(:groupe_instructeur) { create(:groupe_instructeur, instructeurs: [instructeur], procedure: dossier.procedure) }
|
||||
before { dossier.assign_to_groupe_instructeur(groupe_instructeur) }
|
||||
before { dossier.assign_to_groupe_instructeur(groupe_instructeur, DossierAssignment.modes.fetch(:auto)) }
|
||||
|
||||
it { is_expected.to match({ demande: true, annotations_privees: false, avis: false, messagerie: false }) }
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue