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]) target_group = procedure.groupe_instructeurs.find(params[:target_group])
reaffecter_bulk_messages(target_group) reaffecter_bulk_messages(target_group)
groupe_instructeur.dossiers.find_each do |dossier| groupe_instructeur.dossiers.find_each do |dossier|
previous_group = dossier.groupe_instructeur dossier.assign_to_groupe_instructeur(target_group, DossierAssignment.modes.fetch(:manual), current_administrateur)
dossier.assign_to_groupe_instructeur(target_group, current_administrateur)
dossier.create_assignment(
DossierAssignment.modes.fetch(:manual),
previous_group,
target_group,
current_administrateur.email
)
end end
flash[:notice] = "Les dossiers du groupe « #{groupe_instructeur.label} » ont été réaffectés au groupe « #{target_group.label} »." 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 end
def reaffecter_all_dossiers_to_defaut_groupe def reaffecter_all_dossiers_to_defaut_groupe
defaut_groupe = procedure.defaut_groupe_instructeur
procedure.groupe_instructeurs_but_defaut.each do |gi| procedure.groupe_instructeurs_but_defaut.each do |gi|
gi.dossiers.find_each do |dossier| gi.dossiers.find_each do |dossier|
previous_group = dossier.groupe_instructeur dossier.assign_to_groupe_instructeur(procedure.defaut_groupe_instructeur, DossierAssignment.modes.fetch(:manual), current_administrateur)
dossier.assign_to_groupe_instructeur(defaut_groupe, current_administrateur)
dossier.create_assignment(
DossierAssignment.modes.fetch(:manual),
previous_group,
defaut_groupe,
current_administrateur.email
)
end end
end end
end end

View file

@ -359,23 +359,14 @@ module Instructeurs
def reaffecter def reaffecter
dossier = current_instructeur.dossiers.find(params[:dossier_id]) dossier = current_instructeur.dossiers.find(params[:dossier_id])
previous_groupe_instructeur = dossier.groupe_instructeur
new_group = dossier new_group = dossier
.procedure .procedure
.groupe_instructeurs.find(params[:groupe_instructeur_id]) .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.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) flash.notice = t('instructeurs.dossiers.reaffectation', dossier_id: dossier.id, label: new_group.label)
redirect_to instructeur_procedure_path(procedure) redirect_to instructeur_procedure_path(procedure)
end end

View file

@ -11,15 +11,7 @@ module Mutations
field :errors, [Types::ValidationErrorType], null: true field :errors, [Types::ValidationErrorType], null: true
def resolve(dossier:, groupe_instructeur:) def resolve(dossier:, groupe_instructeur:)
previous_groupe_instructeur = dossier.groupe_instructeur dossier.assign_to_groupe_instructeur(groupe_instructeur, DossierAssignment.modes.fetch(:manual))
dossier.assign_to_groupe_instructeur(groupe_instructeur)
dossier.create_assignment(
DossierAssignment.modes.fetch(:manual),
previous_groupe_instructeur,
dossier.groupe_instructeur
)
{ dossier: } { dossier: }
end end

View file

@ -69,7 +69,6 @@ module DossierCloneConcern
diff = make_diff(editing_fork) diff = make_diff(editing_fork)
apply_diff(diff) apply_diff(diff)
touch(:last_champ_updated_at) touch(:last_champ_updated_at)
assign_to_groupe_instructeur(editing_fork.groupe_instructeur)
end end
reload reload
update_search_terms_later update_search_terms_later

View file

@ -688,12 +688,16 @@ class Dossier < ApplicationRecord
procedure.discarded? || (brouillon? && !procedure.dossier_can_transition_to_en_construction?) procedure.discarded? || (brouillon? && !procedure.dossier_can_transition_to_en_construction?)
end 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 groupe_instructeur.present? && groupe_instructeur.procedure != procedure
return if self.groupe_instructeur == groupe_instructeur return if self.groupe_instructeur == groupe_instructeur
previous_groupe_instructeur = self.groupe_instructeur
update!(groupe_instructeur:, groupe_instructeur_updated_at: Time.zone.now) update!(groupe_instructeur:, groupe_instructeur_updated_at: Time.zone.now)
create_assignment(mode, previous_groupe_instructeur, groupe_instructeur, author&.email)
if !brouillon? if !brouillon?
unfollow_stale_instructeurs unfollow_stale_instructeurs
if author.present? if author.present?

View file

@ -2,16 +2,12 @@ module RoutingEngine
def self.compute(dossier) def self.compute(dossier)
return if dossier.forced_groupe_instructeur 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| matching_groupe = dossier.procedure.groupe_instructeurs.active.reject(&:invalid_rule?).find do |gi|
gi.routing_rule&.compute(dossier.champs) gi.routing_rule&.compute(dossier.champs)
end end
matching_groupe ||= dossier.procedure.defaut_groupe_instructeur matching_groupe ||= dossier.procedure.defaut_groupe_instructeur
dossier.assign_to_groupe_instructeur(matching_groupe) dossier.assign_to_groupe_instructeur(matching_groupe, DossierAssignment.modes.fetch(:auto))
dossier.create_assignment(DossierAssignment.modes.fetch(:auto), previous_groupe_instructeur, matching_groupe)
end end
end end

View file

@ -1187,12 +1187,11 @@ describe Instructeurs::DossiersController, type: :controller do
describe '#reaffecter' do describe '#reaffecter' do
let!(:gi_1) { procedure.groupe_instructeurs.first } let!(:gi_1) { procedure.groupe_instructeurs.first }
let!(:gi_2) { GroupeInstructeur.create(label: 'deuxième groupe', procedure: procedure) } 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) } let!(:new_instructeur) { create(:instructeur) }
before do before do
gi_1.instructeurs << new_instructeur gi_1.instructeurs << new_instructeur
gi_1.dossiers << dossier
new_instructeur.followed_dossiers << dossier new_instructeur.followed_dossiers << dossier
post :reaffecter, post :reaffecter,
@ -1221,20 +1220,14 @@ describe Instructeurs::DossiersController, type: :controller do
describe '#personnes_impliquees' do describe '#personnes_impliquees' do
let!(:gi_1) { procedure.groupe_instructeurs.first } let!(:gi_1) { procedure.groupe_instructeurs.first }
let!(:gi_2) { GroupeInstructeur.create(label: 'deuxième groupe', procedure: procedure) } 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) } let!(:new_instructeur) { create(:instructeur) }
before do before do
gi_1.instructeurs << new_instructeur gi_1.instructeurs << new_instructeur
gi_2.instructeurs << instructeur gi_2.instructeurs << instructeur
new_instructeur.followed_dossiers << dossier new_instructeur.followed_dossiers << dossier
dossier.assign_to_groupe_instructeur(gi_2) dossier.assign_to_groupe_instructeur(gi_2, DossierAssignment.modes.fetch(:manual), new_instructeur)
dossier.create_assignment(
DossierAssignment.modes.fetch(:manual),
gi_1,
gi_2,
new_instructeur.email
)
get :personnes_impliquees, get :personnes_impliquees,
params: { params: {

View file

@ -221,7 +221,7 @@ RSpec.describe DossierCloneConcern do
context 'with updated groupe instructeur' do context 'with updated groupe instructeur' do
before { before {
dossier.update!(groupe_instructeur: create(:groupe_instructeur)) 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: []) } 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) } let(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
it "can change groupe instructeur" do 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) expect(dossier.groupe_instructeur).not_to eq(new_groupe_instructeur_new_procedure)
end end
it "can not change groupe instructeur if new groupe is from another procedure" do 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) expect(dossier.groupe_instructeur).to eq(new_groupe_instructeur)
end end
end end
@ -603,7 +603,7 @@ describe Dossier, type: :model do
it "unfollows stale instructeurs when groupe instructeur change" do it "unfollows stale instructeurs when groupe instructeur change" do
instructeur.follow(dossier) instructeur.follow(dossier)
instructeur2.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).not_to include(instructeur)
expect(dossier.reload.followers_instructeurs).to include(instructeur2) 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 context 'when there is a modification on groupe instructeur' do
let(:groupe_instructeur) { create(:groupe_instructeur, instructeurs: [instructeur], procedure: dossier.procedure) } 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 }) } it { is_expected.to match({ demande: true, annotations_privees: false, avis: false, messagerie: false }) }
end end