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])
|
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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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?
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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: {
|
||||||
|
|
|
@ -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: []) }
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue