Do not send notifications or create operation logs on brouillon demarches
This commit is contained in:
parent
966503fd4e
commit
5b5ae5a7a5
6 changed files with 58 additions and 28 deletions
|
@ -166,24 +166,35 @@ class Dossier < ApplicationRecord
|
|||
user: [])
|
||||
}
|
||||
|
||||
scope :with_notifiable_procedure, -> do
|
||||
joins(:procedure)
|
||||
.where.not(procedures: { aasm_state: :brouillon })
|
||||
end
|
||||
|
||||
scope :brouillon_close_to_expiration, -> do
|
||||
brouillon
|
||||
state_brouillon
|
||||
.joins(:procedure)
|
||||
.where("dossiers.created_at + (duree_conservation_dossiers_dans_ds * interval '1 month') - INTERVAL '1 month' <= now()")
|
||||
end
|
||||
scope :en_construction_close_to_expiration, -> do
|
||||
en_construction
|
||||
state_en_construction
|
||||
.joins(:procedure)
|
||||
.where("dossiers.en_construction_at + dossiers.en_construction_conservation_extension + (duree_conservation_dossiers_dans_ds * interval '1 month') - INTERVAL '1 month' <= now()")
|
||||
end
|
||||
scope :en_instruction_close_to_expiration, -> do
|
||||
en_instruction
|
||||
state_en_instruction
|
||||
.joins(:procedure)
|
||||
.where("dossiers.en_instruction_at + (duree_conservation_dossiers_dans_ds * interval '1 month') - INTERVAL '1 month' <= now()")
|
||||
end
|
||||
|
||||
scope :brouillon_expired, -> { brouillon.where("brouillon_close_to_expiration_notice_sent_at < (now() - INTERVAL '1 month 5 days')") }
|
||||
scope :en_construction_expired, -> { en_construction.where("en_construction_close_to_expiration_notice_sent_at < (now() - INTERVAL '1 month 5 days')") }
|
||||
scope :brouillon_expired, -> do
|
||||
state_brouillon
|
||||
.where("brouillon_close_to_expiration_notice_sent_at < (now() - INTERVAL '1 month 5 days')")
|
||||
end
|
||||
scope :en_construction_expired, -> do
|
||||
state_en_construction
|
||||
.where("en_construction_close_to_expiration_notice_sent_at < (now() - INTERVAL '1 month 5 days')")
|
||||
end
|
||||
|
||||
scope :without_brouillon_expiration_notice_sent, -> { where(brouillon_close_to_expiration_notice_sent_at: nil) }
|
||||
scope :without_en_construction_expiration_notice_sent, -> { where(en_construction_close_to_expiration_notice_sent_at: nil) }
|
||||
|
@ -387,6 +398,14 @@ class Dossier < ApplicationRecord
|
|||
end
|
||||
end
|
||||
|
||||
def log_operations?
|
||||
!procedure.brouillon?
|
||||
end
|
||||
|
||||
def keep_track_on_deletion?
|
||||
!procedure.brouillon?
|
||||
end
|
||||
|
||||
def expose_legacy_carto_api?
|
||||
procedure.expose_legacy_carto_api?
|
||||
end
|
||||
|
@ -424,12 +443,14 @@ class Dossier < ApplicationRecord
|
|||
end
|
||||
|
||||
def expired_keep_track!
|
||||
DeletedDossier.create_from_dossier(self, :expired)
|
||||
log_automatic_dossier_operation(:supprimer, self)
|
||||
if keep_track_on_deletion?
|
||||
DeletedDossier.create_from_dossier(self, :expired)
|
||||
log_automatic_dossier_operation(:supprimer, self)
|
||||
end
|
||||
end
|
||||
|
||||
def delete_and_keep_track!(author, reason)
|
||||
if en_construction?
|
||||
if keep_track_on_deletion? && en_construction?
|
||||
deleted_dossier = DeletedDossier.create_from_dossier(self, reason)
|
||||
|
||||
administration_emails = followers_instructeurs.present? ? followers_instructeurs.map(&:email) : procedure.administrateurs.map(&:email)
|
||||
|
@ -649,21 +670,25 @@ class Dossier < ApplicationRecord
|
|||
private
|
||||
|
||||
def log_dossier_operation(author, operation, subject = nil)
|
||||
DossierOperationLog.create_and_serialize(
|
||||
dossier: self,
|
||||
operation: DossierOperationLog.operations.fetch(operation),
|
||||
author: author,
|
||||
subject: subject
|
||||
)
|
||||
if log_operations?
|
||||
DossierOperationLog.create_and_serialize(
|
||||
dossier: self,
|
||||
operation: DossierOperationLog.operations.fetch(operation),
|
||||
author: author,
|
||||
subject: subject
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def log_automatic_dossier_operation(operation, subject = nil)
|
||||
DossierOperationLog.create_and_serialize(
|
||||
dossier: self,
|
||||
operation: DossierOperationLog.operations.fetch(operation),
|
||||
automatic_operation: true,
|
||||
subject: subject
|
||||
)
|
||||
if log_operations?
|
||||
DossierOperationLog.create_and_serialize(
|
||||
dossier: self,
|
||||
operation: DossierOperationLog.operations.fetch(operation),
|
||||
automatic_operation: true,
|
||||
subject: subject
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def update_state_dates
|
||||
|
|
|
@ -15,6 +15,7 @@ class ExpiredDossiersDeletionService
|
|||
.without_brouillon_expiration_notice_sent
|
||||
|
||||
dossiers_close_to_expiration
|
||||
.with_notifiable_procedure
|
||||
.includes(:user, :procedure)
|
||||
.group_by(&:user)
|
||||
.each do |(user, dossiers)|
|
||||
|
@ -33,6 +34,7 @@ class ExpiredDossiersDeletionService
|
|||
.without_en_construction_expiration_notice_sent
|
||||
|
||||
dossiers_close_to_expiration
|
||||
.with_notifiable_procedure
|
||||
.includes(:user)
|
||||
.group_by(&:user)
|
||||
.each do |(user, dossiers)|
|
||||
|
@ -56,6 +58,7 @@ class ExpiredDossiersDeletionService
|
|||
dossiers_to_remove = Dossier.brouillon_expired
|
||||
|
||||
dossiers_to_remove
|
||||
.with_notifiable_procedure
|
||||
.includes(:user, :procedure)
|
||||
.group_by(&:user)
|
||||
.each do |(user, dossiers)|
|
||||
|
@ -73,6 +76,7 @@ class ExpiredDossiersDeletionService
|
|||
dossiers_to_remove.each(&:expired_keep_track!)
|
||||
|
||||
dossiers_to_remove
|
||||
.with_notifiable_procedure
|
||||
.includes(:user)
|
||||
.group_by(&:user)
|
||||
.each do |(user, dossiers)|
|
||||
|
@ -96,6 +100,7 @@ class ExpiredDossiersDeletionService
|
|||
|
||||
def self.group_by_fonctionnaire_email(dossiers)
|
||||
dossiers
|
||||
.with_notifiable_procedure
|
||||
.includes(:followers_instructeurs, procedure: [:administrateurs])
|
||||
.each_with_object(Hash.new { |h, k| h[k] = Set.new }) do |dossier, h|
|
||||
(dossier.followers_instructeurs + dossier.procedure.administrateurs).each { |destinataire| h[destinataire.email] << dossier }
|
||||
|
|
|
@ -5,7 +5,7 @@ RSpec.describe AutoReceiveDossiersForProcedureJob, type: :job do
|
|||
let(:date) { Time.utc(2017, 9, 1, 10, 5, 0) }
|
||||
let(:instruction_date) { date + 120 }
|
||||
|
||||
let(:procedure) { create(:procedure, :with_instructeur) }
|
||||
let(:procedure) { create(:procedure, :published, :with_instructeur) }
|
||||
let(:nouveau_dossier1) { create(:dossier, :en_construction, procedure: procedure) }
|
||||
let(:nouveau_dossier2) { create(:dossier, :en_construction, procedure: procedure) }
|
||||
let(:dossier_recu) { create(:dossier, :en_instruction, procedure: procedure) }
|
||||
|
|
|
@ -6,7 +6,7 @@ RSpec.describe DeclarativeProceduresJob, type: :job do
|
|||
let(:instruction_date) { date + 120 }
|
||||
|
||||
let(:state) { nil }
|
||||
let(:procedure) { create(:procedure, :with_instructeur, declarative_with_state: state) }
|
||||
let(:procedure) { create(:procedure, :published, :with_instructeur, declarative_with_state: state) }
|
||||
let(:nouveau_dossier1) { create(:dossier, :en_construction, procedure: procedure) }
|
||||
let(:nouveau_dossier2) { create(:dossier, :en_construction, procedure: procedure) }
|
||||
let(:dossier_recu) { create(:dossier, :en_instruction, procedure: procedure) }
|
||||
|
|
|
@ -46,7 +46,7 @@ describe Dossier do
|
|||
end
|
||||
|
||||
describe 'brouillon_close_to_expiration' do
|
||||
let(:procedure) { create(:procedure, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let(:procedure) { create(:procedure, :published, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let!(:young_dossier) { create(:dossier, :en_construction, procedure: procedure) }
|
||||
let!(:expiring_dossier) { create(:dossier, created_at: 170.days.ago, procedure: procedure) }
|
||||
let!(:just_expired_dossier) { create(:dossier, created_at: (6.months + 1.hour + 10.seconds).ago, procedure: procedure) }
|
||||
|
@ -63,7 +63,7 @@ describe Dossier do
|
|||
end
|
||||
|
||||
describe 'en_construction_close_to_expiration' do
|
||||
let(:procedure) { create(:procedure, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let(:procedure) { create(:procedure, :published, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let!(:young_dossier) { create(:dossier, procedure: procedure) }
|
||||
let!(:expiring_dossier) { create(:dossier, :en_construction, en_construction_at: 170.days.ago, procedure: procedure) }
|
||||
let!(:just_expired_dossier) { create(:dossier, :en_construction, en_construction_at: (6.months + 1.hour + 10.seconds).ago, procedure: procedure) }
|
||||
|
@ -89,7 +89,7 @@ describe Dossier do
|
|||
end
|
||||
|
||||
describe 'en_instruction_close_to_expiration' do
|
||||
let(:procedure) { create(:procedure, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let(:procedure) { create(:procedure, :published, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let!(:young_dossier) { create(:dossier, procedure: procedure) }
|
||||
let!(:expiring_dossier) { create(:dossier, :en_instruction, en_instruction_at: 170.days.ago, procedure: procedure) }
|
||||
let!(:just_expired_dossier) { create(:dossier, :en_instruction, en_instruction_at: (6.months + 1.hour + 10.seconds).ago, procedure: procedure) }
|
||||
|
@ -450,7 +450,7 @@ describe Dossier do
|
|||
end
|
||||
|
||||
describe "#unfollow_stale_instructeurs" do
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:procedure) { create(:procedure, :published) }
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
let(:new_groupe_instructeur) { create(:groupe_instructeur, procedure: procedure) }
|
||||
let(:instructeur2) { create(:instructeur, groupe_instructeurs: [procedure.defaut_groupe_instructeur, new_groupe_instructeur]) }
|
||||
|
|
|
@ -4,7 +4,7 @@ describe ExpiredDossiersDeletionService do
|
|||
describe '#process_expired_dossiers_brouillon' do
|
||||
let(:draft_expiration) { 1.month + 5.days }
|
||||
let!(:today) { Time.zone.now.at_midnight }
|
||||
let!(:procedure) { create(:procedure, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let!(:procedure) { create(:procedure, :published, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let!(:date_close_to_expiration) { Date.today - procedure.duree_conservation_dossiers_dans_ds.months + 1.month }
|
||||
let!(:date_expired) { Date.today - procedure.duree_conservation_dossiers_dans_ds.months - 6.days }
|
||||
let!(:date_not_expired) { Date.today - procedure.duree_conservation_dossiers_dans_ds.months + 2.months }
|
||||
|
@ -192,7 +192,7 @@ describe ExpiredDossiersDeletionService do
|
|||
end
|
||||
|
||||
context 'when an instructeur is also administrateur' do
|
||||
let!(:procedure) { create(:procedure) }
|
||||
let!(:procedure) { create(:procedure, :published) }
|
||||
let!(:administrateur) { procedure.administrateurs.first }
|
||||
let!(:dossier) { create(:dossier, :en_construction, procedure: procedure, en_construction_at: (conservation_par_defaut - 1.month + 1.day).ago) }
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue