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

View file

@ -224,6 +224,9 @@ class Dossier < ApplicationRecord
scope :state_instruction_commencee, -> { where(state: INSTRUCTION_COMMENCEE) } scope :state_instruction_commencee, -> { where(state: INSTRUCTION_COMMENCEE) }
scope :state_termine, -> { where(state: TERMINE) } scope :state_termine, -> { where(state: TERMINE) }
scope :state_not_termine, -> { where.not(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 :archived, -> { where(archived: true) }
scope :not_archived, -> { where(archived: false) } scope :not_archived, -> { where(archived: false) }

View file

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

View file

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