Merge pull request #4831 from betagouv/4784-dossiers-reroutés-mis-en-avant
4784: dossiers reroutés dans la colonne "A suivre" des instructeurs du nouveau groupe
This commit is contained in:
commit
8743ecef50
6 changed files with 72 additions and 0 deletions
|
@ -90,4 +90,12 @@ class DossierMailer < ApplicationMailer
|
|||
|
||||
mail(to: user.email, subject: @subject)
|
||||
end
|
||||
|
||||
def notify_groupe_instructeur_changed(instructeur, dossier)
|
||||
@subject = "Un dossier a changé de groupe instructeur"
|
||||
@dossier_id = dossier.id
|
||||
@demarche = dossier.procedure.libelle
|
||||
|
||||
mail(from: NO_REPLY_EMAIL, to: instructeur.email, subject: @subject)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -213,6 +213,7 @@ class Dossier < ApplicationRecord
|
|||
before_save :build_default_champs, if: Proc.new { groupe_instructeur_id_was.nil? }
|
||||
before_save :update_search_terms
|
||||
|
||||
after_save :unfollow_stale_instructeurs
|
||||
after_save :send_dossier_received
|
||||
after_save :send_web_hook
|
||||
after_create :send_draft_notification_email
|
||||
|
@ -645,6 +646,18 @@ class Dossier < ApplicationRecord
|
|||
end
|
||||
end
|
||||
|
||||
def unfollow_stale_instructeurs
|
||||
if saved_change_to_groupe_instructeur_id? && saved_change_to_groupe_instructeur_id[0].present?
|
||||
followers_instructeurs.each do |instructeur|
|
||||
if instructeur.groupe_instructeurs.exclude?(groupe_instructeur)
|
||||
instructeur.unfollow(self)
|
||||
DossierMailer.notify_groupe_instructeur_changed(instructeur, self).deliver_later
|
||||
end
|
||||
end
|
||||
log_dossier_operation(user, :changer_groupe_instructeur, self)
|
||||
end
|
||||
end
|
||||
|
||||
def self.send_brouillon_expiration_notices
|
||||
brouillons = Dossier
|
||||
.brouillon_close_to_expiration
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class DossierOperationLog < ApplicationRecord
|
||||
enum operation: {
|
||||
changer_groupe_instructeur: 'changer_groupe_instructeur',
|
||||
passer_en_instruction: 'passer_en_instruction',
|
||||
repasser_en_construction: 'repasser_en_construction',
|
||||
repasser_en_instruction: 'repasser_en_instruction',
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
- content_for(:title, "#{@subject}")
|
||||
|
||||
%p
|
||||
= "Vous suiviez jusqu'à maintenant le dossier n°#{@dossier_id} de la démarche #{@demarche}."
|
||||
L'usager a modifié le groupe de routage. Son dossier appartient maintenant à un groupe instructeur dont vous ne faites pas partie.
|
||||
%p
|
||||
Suite à cette modification, vous ne suivez plus ce dossier.
|
||||
|
||||
= render partial: "layouts/mailers/signature"
|
|
@ -154,4 +154,16 @@ RSpec.describe DossierMailer, type: :mailer do
|
|||
it { expect(subject.body).to include("PDF") }
|
||||
it { expect(subject.body).to include("Vous avez <b>un mois</b> pour traiter le dossier.") }
|
||||
end
|
||||
|
||||
describe '.notify_groupe_instructeur_changed_to_instructeur' do
|
||||
let(:dossier) { create(:dossier) }
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
|
||||
subject { described_class.notify_groupe_instructeur_changed(instructeur, dossier) }
|
||||
|
||||
it { expect(subject.subject).to eq("Un dossier a changé de groupe instructeur") }
|
||||
it { expect(subject.body).to include("n°#{dossier.id}") }
|
||||
it { expect(subject.body).to include(dossier.procedure.libelle) }
|
||||
it { expect(subject.body).to include("Suite à cette modification, vous ne suivez plus ce dossier.") }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -398,6 +398,35 @@ describe Dossier do
|
|||
it { is_expected.to match([dossier3, dossier4, dossier2]) }
|
||||
end
|
||||
|
||||
describe "#unfollow_stale_instructeurs" do
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
let(:new_groupe_instructeur) { create(:groupe_instructeur) }
|
||||
let(:instructeur2) { create(:instructeur, groupe_instructeurs: [procedure.defaut_groupe_instructeur, new_groupe_instructeur]) }
|
||||
let(:dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_construction)) }
|
||||
let(:last_operation) { DossierOperationLog.last }
|
||||
|
||||
before do
|
||||
allow(DossierMailer).to receive(:notify_groupe_instructeur_changed).and_return(double(deliver_later: nil))
|
||||
end
|
||||
|
||||
it "unfollows stale instructeurs when groupe instructeur change" do
|
||||
instructeur.follow(dossier)
|
||||
instructeur2.follow(dossier)
|
||||
dossier.reload.update(groupe_instructeur: new_groupe_instructeur)
|
||||
|
||||
expect(dossier.reload.followers_instructeurs).not_to include(instructeur)
|
||||
expect(dossier.reload.followers_instructeurs).to include(instructeur2)
|
||||
|
||||
expect(DossierMailer).to have_received(:notify_groupe_instructeur_changed).with(instructeur, dossier)
|
||||
expect(DossierMailer).not_to have_received(:notify_groupe_instructeur_changed).with(instructeur2, dossier)
|
||||
|
||||
expect(last_operation.operation).to eq("changer_groupe_instructeur")
|
||||
expect(last_operation.dossier).to eq(dossier)
|
||||
expect(last_operation.automatic_operation?).to be_falsey
|
||||
end
|
||||
end
|
||||
|
||||
describe "#send_dossier_received" do
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_construction)) }
|
||||
|
|
Loading…
Reference in a new issue