From 1d99e21a27b10d2d1ab1cb3a8e157439ecd0c4e2 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 4 Apr 2022 15:29:38 +0200 Subject: [PATCH 1/2] tech(bug): identify --- .../instructeurs/procedures_controller_spec.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/spec/controllers/instructeurs/procedures_controller_spec.rb b/spec/controllers/instructeurs/procedures_controller_spec.rb index 04d0f85c2..e73ae4b1a 100644 --- a/spec/controllers/instructeurs/procedures_controller_spec.rb +++ b/spec/controllers/instructeurs/procedures_controller_spec.rb @@ -155,6 +155,23 @@ describe Instructeurs::ProceduresController, type: :controller do it { expect(assigns(:all_dossiers_counts)['archivés']).to eq(1 + 0) } it { expect(assigns(:all_dossiers_counts)['expirant']).to eq(2 + 0) } end + + context 'with not draft state on discarded procedure' do + let(:discarded_procedure) { create(:procedure, :discarded, :expirable) } + let(:state) { Dossier.states.fetch(:en_construction) } + before do + create(:dossier, procedure: discarded_procedure, state: Dossier.states.fetch(:en_construction)) + instructeur.groupe_instructeurs << discarded_procedure.defaut_groupe_instructeur + subject + end + + it { expect(assigns(:dossiers_count_per_procedure)[procedure.id]).to eq(1) } + it { expect(assigns(:dossiers_a_suivre_count_per_procedure)[procedure.id]).to eq(1) } + + it { expect(assigns(:dossiers_count_per_procedure)[discarded_procedure.id]).to be_nil } + + it { expect(assigns(:all_dossiers_counts)['à suivre']).to eq(1) } + end end context "with a routed procedure" do From ad4e5a8bc6c41bd99163afe8bfb40eb162e56cf7 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 4 Apr 2022 15:49:16 +0200 Subject: [PATCH 2/2] fix(instructeurs/procedures#index): counter not in sync --- app/controllers/instructeurs/procedures_controller.rb | 4 +++- app/models/dossier.rb | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/instructeurs/procedures_controller.rb b/app/controllers/instructeurs/procedures_controller.rb index 6105efc5a..a2e30afe3 100644 --- a/app/controllers/instructeurs/procedures_controller.rb +++ b/app/controllers/instructeurs/procedures_controller.rb @@ -12,7 +12,9 @@ module Instructeurs .includes(:defaut_groupe_instructeur) .order(closed_at: :desc, unpublished_at: :desc, published_at: :desc, created_at: :desc) - dossiers = current_instructeur.dossiers.joins(:groupe_instructeur) + dossiers = current_instructeur.dossiers + .joins(groupe_instructeur: :procedure) + .where(procedures: { hidden_at: nil }) dossiers_visibles = dossiers.visible_by_administration @dossiers_count_per_procedure = dossiers_visibles.all_state.group('groupe_instructeurs.procedure_id').reorder(nil).count @dossiers_a_suivre_count_per_procedure = dossiers_visibles.without_followers.en_cours.group('groupe_instructeurs.procedure_id').reorder(nil).count diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 8bf48e9b8..700e6070a 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -301,18 +301,18 @@ class Dossier < ApplicationRecord scope :interval_brouillon_close_to_expiration, -> do state_brouillon .visible_by_user - .where("dossiers.created_at + dossiers.conservation_extension + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) + .where("dossiers.created_at + dossiers.conservation_extension + (procedures.duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) end scope :interval_en_construction_close_to_expiration, -> do state_en_construction .visible_by_user_or_administration - .where("dossiers.en_construction_at + dossiers.conservation_extension + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) + .where("dossiers.en_construction_at + dossiers.conservation_extension + (procedures.duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) end scope :interval_termine_close_to_expiration, -> do state_termine .visible_by_user_or_administration .where(procedures: { procedure_expires_when_termine_enabled: true }) - .where("dossiers.processed_at + dossiers.conservation_extension + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) + .where("dossiers.processed_at + dossiers.conservation_extension + (procedures.duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) end scope :brouillon_close_to_expiration, -> do