fix(demarche): exclude preview and deleted dossiers from stats

This commit is contained in:
Paul Chavard 2023-02-23 13:13:01 +01:00
parent d943e34b6d
commit eb3039aeca
4 changed files with 22 additions and 13 deletions

View file

@ -22,21 +22,20 @@ module ProcedureStatsConcern
def stats_dossiers_funnel
Rails.cache.fetch("#{cache_key_with_version}/stats_dossiers_funnel", expires_in: 12.hours) do
[
['Démarrés', dossiers.count],
['Déposés', dossiers.state_not_brouillon.count],
['Instruction débutée', dossiers.state_instruction_commencee.count],
['Traités', dossiers.state_termine.count]
['Démarrés', dossiers.visible_by_user_or_administration.count],
['Déposés', dossiers.visible_by_administration.count],
['Instruction débutée', dossiers.visible_by_administration.state_instruction_commencee.count],
['Traités', nb_dossiers_termines]
]
end
end
def stats_termines_states
nb_dossiers_termines = dossiers.state_termine.count
Rails.cache.fetch("#{cache_key_with_version}/stats_termines_states", expires_in: 12.hours) do
[
['Acceptés', percentage(dossiers.where(state: :accepte).count, nb_dossiers_termines)],
['Refusés', percentage(dossiers.where(state: :refuse).count, nb_dossiers_termines)],
['Classés sans suite', percentage(dossiers.where(state: :sans_suite).count, nb_dossiers_termines)]
['Acceptés', percentage(dossiers.visible_by_administration.state_accepte.count, nb_dossiers_termines)],
['Refusés', percentage(dossiers.visible_by_administration.state_refuse.count, nb_dossiers_termines)],
['Classés sans suite', percentage(dossiers.visible_by_administration.state_sans_suite.count, nb_dossiers_termines)]
]
end
end
@ -45,6 +44,7 @@ module ProcedureStatsConcern
Rails.cache.fetch("#{cache_key_with_version}/stats_termines_by_week", expires_in: 12.hours) do
now = Time.zone.now
chart_data = dossiers.includes(:traitements)
.visible_by_administration
.state_termine
.where(traitements: { processed_at: (now.beginning_of_week - 6.months)..now.end_of_week })
@ -95,6 +95,10 @@ module ProcedureStatsConcern
private
def nb_dossiers_termines
@nb_dossiers_termines ||= dossiers.visible_by_administration.state_termine.count
end
def first_processed_at
Traitement.for_traitement_time_stats(self).pick(:processed_at)
end

View file

@ -224,6 +224,9 @@ class Dossier < ApplicationRecord
scope :state_instruction_commencee, -> { where(state: INSTRUCTION_COMMENCEE) }
scope :state_termine, -> { where(state: TERMINE) }
scope :state_not_termine, -> { where.not(state: TERMINE) }
scope :state_accepte, -> { where(state: states.fetch(:accepte)) }
scope :state_refuse, -> { where(state: states.fetch(:refuse)) }
scope :state_sans_suite, -> { where(state: states.fetch(:sans_suite)) }
scope :archived, -> { where(archived: true) }
scope :not_archived, -> { where(archived: false) }

View file

@ -21,7 +21,7 @@ class Traitement < ApplicationRecord
scope :for_traitement_time_stats, -> (procedure) do
includes(:dossier)
.termine
.where(dossier: procedure.dossiers)
.where(dossier: procedure.dossiers.visible_by_administration)
.where.not('dossiers.depose_at' => nil, processed_at: nil)
.order(:processed_at)
end

View file

@ -7,15 +7,17 @@ describe ProcedureStatsConcern do
before do
create_list(:dossier, 2, :brouillon, procedure: procedure)
create(:dossier, :en_instruction, procedure: procedure)
create(:dossier, procedure: procedure, for_procedure_preview: true)
create(:dossier, :accepte, procedure: procedure, hidden_by_administration_at: Time.zone.now)
end
it "returns the funnel stats" do
expect(stats_dossiers_funnel).to match(
[
['Démarrés', procedure.dossiers.count],
['Déposés', procedure.dossiers.state_not_brouillon.count],
['Instruction débutée', procedure.dossiers.state_instruction_commencee.count],
['Traités', procedure.dossiers.state_termine.count]
['Démarrés', procedure.dossiers.visible_by_user_or_administration.count],
['Déposés', procedure.dossiers.visible_by_administration.count],
['Instruction débutée', procedure.dossiers.visible_by_administration.state_instruction_commencee.count],
['Traités', procedure.dossiers.visible_by_administration.state_termine.count]
]
)
end