feat(instructeur#dossiers_count_summary): add counter for expirants. ignore brouillon

This commit is contained in:
Martin 2021-12-01 14:39:03 +01:00
parent ce87878ff0
commit 2dfbc70d41
3 changed files with 47 additions and 4 deletions

View file

@ -53,7 +53,7 @@ module Instructeurs
@a_suivre_count, @suivis_count, @traites_count, @tous_count, @archives_count = current_instructeur
.dossiers_count_summary(groupe_instructeur_ids)
.fetch_values('a_suivre', 'suivis', 'traites', 'tous', 'archives')
.fetch_values('a_suivre', 'suivis', 'traites', 'tous', 'archives', 'expirant')
dossiers_visibles = Dossier
.where(groupe_instructeur_id: groupe_instructeur_ids)
@ -72,6 +72,7 @@ module Instructeurs
@termines_dossiers = dossiers_visibles.termine
@all_state_dossiers = dossiers_visibles.all_state
@archived_dossiers = dossiers_visibles.archived
@expirant_dossiers = dossiers_visibles.close_to_expiration
@dossiers = case statut
when 'a-suivre'
@ -89,6 +90,9 @@ module Instructeurs
when 'archives'
dossiers_count = @archives_count
@archived_dossiers
when 'expirant'
dossiers_count = @archives_count
@expirant_dossiers
end
notifications = current_instructeur.notifications_for_groupe_instructeurs(groupe_instructeur_ids)

View file

@ -237,8 +237,22 @@ class Instructeur < ApplicationRecord
COUNT(DISTINCT dossiers.id) FILTER (where not archived AND dossiers.state in ('en_construction', 'en_instruction') AND follows.instructeur_id = :instructeur_id) AS suivis,
COUNT(DISTINCT dossiers.id) FILTER (where not archived AND dossiers.state in ('accepte', 'refuse', 'sans_suite')) AS traites,
COUNT(DISTINCT dossiers.id) FILTER (where not archived) AS tous,
COUNT(DISTINCT dossiers.id) FILTER (where archived) AS archives
COUNT(DISTINCT dossiers.id) FILTER (where archived) AS archives,
COUNT(DISTINCT dossiers.id) FILTER (where
procedures.procedure_expires_when_termine_enabled
AND (
dossiers.state in ('accepte', 'refuse', 'sans_suite')
AND dossiers.processed_at + dossiers.conservation_extension + (procedures.duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now
) OR (
dossiers.state in ('en_construction')
AND dossiers.en_construction_at + dossiers.conservation_extension + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now
)
) AS expirant
FROM "dossiers"
INNER JOIN "procedure_revisions"
ON "procedure_revisions"."id" = "dossiers"."revision_id"
INNER JOIN "procedures"
ON "procedures"."id" = "procedure_revisions"."procedure_id"
LEFT OUTER JOIN follows
ON follows.dossier_id = dossiers.id
AND follows.unfollowed_at IS NULL
@ -250,7 +264,9 @@ class Instructeur < ApplicationRecord
sanitized_query = ActiveRecord::Base.sanitize_sql([
query,
instructeur_id: id,
groupe_instructeur_ids: groupe_instructeur_ids
groupe_instructeur_ids: groupe_instructeur_ids,
now: Time.zone.now,
expires_in: Dossier::INTERVAL_BEFORE_EXPIRATION
])
Dossier.connection.select_all(sanitized_query).first