refactor(DossierAssignment): move create_assignment to assign_to_groupe_instructeur

This commit is contained in:
Eric Leroy-Terquem 2023-07-05 17:48:18 +02:00 committed by Paul Chavard
parent 24f68b4deb
commit 0e58e10b82
10 changed files with 18 additions and 58 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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?

View file

@ -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

View file

@ -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: {

View file

@ -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: []) }

View file

@ -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)

View file

@ -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