Merge pull request #10627 from demarches-simplifiees/simplify-tabs-supprimes-ldu

[UX] Simplifier l'interface avec un onglet unique pour les dossiers supprimés
This commit is contained in:
Lisa Durand 2024-08-20 14:50:42 +00:00 committed by GitHub
commit 49e9d4a683
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
40 changed files with 205 additions and 204 deletions

View file

@ -7,7 +7,7 @@ class Dossiers::BatchOperationComponent < ApplicationComponent
end end
def render? def render?
['a-suivre', 'traites', 'suivis', 'archives', 'supprimes_recemment', 'expirant'].include?(@statut) ['a-suivre', 'traites', 'suivis', 'archives', 'supprimes', 'expirant'].include?(@statut)
end end
def operations_for_dossier(dossier) def operations_for_dossier(dossier)
@ -81,7 +81,7 @@ class Dossiers::BatchOperationComponent < ApplicationComponent
} }
] ]
} }
when 'supprimes_recemment' then when 'supprimes' then
{ {
options: options:
[ [

View file

@ -0,0 +1,11 @@
class Dossiers::DeletedDossiersComponent < ApplicationComponent
include DossierHelper
def initialize(deleted_dossiers:)
@deleted_dossiers = deleted_dossiers
end
def role
controller.try(:nav_bar_profile)
end
end

View file

@ -0,0 +1,7 @@
en:
deleted_explanation: "The folders have been deleted. You can no longer recover them for the following reasons:"
deleted_explanation_first_instructor: The user intentionally deleted their folder.
deleted_explanation_second_instructor: The maximum retention period has expired. In accordance with GDPR regulations, the application cannot continue to host them.
deleted_explanation_first_user: You have deleted your folder.
deleted_explanation_second_user: The maximum retention period has expired. In accordance with GDPR regulations, the application cannot continue to host them.
no_deleted_folders: You have no permanently deleted folders.

View file

@ -0,0 +1,7 @@
fr:
deleted_explanation: "Les dossiers ont été supprimés. Vous ne pouvez plus les récupérer pour les raisons suivantes :"
deleted_explanation_first_instructeur: Lutilisateur a intentionnellement supprimé son dossier.
deleted_explanation_second_instructeur: Le délai de conservation maximal a expiré. Conformément au règlement RGPD, l'application ne peut continuer à les héberger.
deleted_explanation_first_user: Vous avez supprimé votre dossier.
deleted_explanation_second_user: Le délai de conservation maximal a expiré. Conformément au règlement RGPD, l'application ne peut continuer à les héberger.
no_deleted_dossiers: Vous n'avez pas de dossiers supprimés définitivement.

View file

@ -0,0 +1,47 @@
.fr-container
%h1.fr-h2
Historique des dossiers supprimés
.fr-container
- if @deleted_dossiers.present?
= render Dsfr::CalloutComponent.new(title: nil) do |c|
- c.with_body do
%p
= t('.deleted_explanation')
%ul
%li
= t(".deleted_explanation_first_#{role}")
%li
= t(".deleted_explanation_second_#{role}")
.fr-table.fr-table--layout-fixed.fr-mt-3w
%table
%thead
%tr
%th.number-col N° dossier
%th Libellé de la démarche
%th Raison de suppression
%th Date de suppression
%tbody
- @deleted_dossiers.each do |deleted_dossier|
%tr
%td.number-col
= deleted_dossier.dossier_id
%td.number-col
= deleted_dossier.procedure.libelle.truncate_words(10)
%td
= deletion_reason_badge(deleted_dossier.reason)
-# .fr-badge
-# = t("activerecord.attributes.deleted_dossier.reason.#{deleted_dossier.reason}")
%td.deleted-cell
= l(deleted_dossier.deleted_at, format: '%d/%m/%y')
= paginate @deleted_dossiers, views_prefix: 'shared'
- else
%p
= t('.no_deleted_dossiers')

View file

@ -36,7 +36,7 @@ module Instructeurs
@dossiers_archived_count_per_procedure = dossiers.by_statut('archives').group('groupe_instructeurs.procedure_id').count @dossiers_archived_count_per_procedure = dossiers.by_statut('archives').group('groupe_instructeurs.procedure_id').count
@dossiers_termines_count_per_procedure = dossiers.by_statut('traites').group('groupe_instructeurs.procedure_id').reorder(nil).count @dossiers_termines_count_per_procedure = dossiers.by_statut('traites').group('groupe_instructeurs.procedure_id').reorder(nil).count
@dossiers_expirant_count_per_procedure = dossiers.by_statut('expirant').group('groupe_instructeurs.procedure_id').count @dossiers_expirant_count_per_procedure = dossiers.by_statut('expirant').group('groupe_instructeurs.procedure_id').count
@dossiers_supprimes_recemment_count_per_procedure = dossiers.by_statut('supprimes_recemment').group('groupe_instructeurs.procedure_id').reorder(nil).count @dossiers_supprimes_count_per_procedure = dossiers.by_statut('supprimes').group('groupe_instructeurs.procedure_id').reorder(nil).count
groupe_ids = current_instructeur.groupe_instructeurs.pluck(:id) groupe_ids = current_instructeur.groupe_instructeurs.pluck(:id)
@followed_dossiers_count_per_procedure = current_instructeur @followed_dossiers_count_per_procedure = current_instructeur
@ -56,7 +56,7 @@ module Instructeurs
t('.all') => @dossiers_count_per_procedure.sum { |_, v| v }, t('.all') => @dossiers_count_per_procedure.sum { |_, v| v },
t('.dossiers_close_to_expiration') => @dossiers_expirant_count_per_procedure.sum { |_, v| v }, t('.dossiers_close_to_expiration') => @dossiers_expirant_count_per_procedure.sum { |_, v| v },
t('.archived') => @dossiers_archived_count_per_procedure.sum { |_, v| v }, t('.archived') => @dossiers_archived_count_per_procedure.sum { |_, v| v },
t('.dossiers_supprimes_recemment') => @dossiers_supprimes_recemment_count_per_procedure.sum { |_, v| v } t('.dossiers_supprimes') => @dossiers_supprimes_count_per_procedure.sum { |_, v| v }
} }
@procedure_ids_en_cours_with_notifications = current_instructeur.procedure_ids_with_notifications(:en_cours) @procedure_ids_en_cours_with_notifications = current_instructeur.procedure_ids_with_notifications(:en_cours)
@ -120,9 +120,9 @@ module Instructeurs
.order(:dossier_id) .order(:dossier_id)
.page params[:page] .page params[:page]
@a_suivre_count, @suivis_count, @traites_count, @tous_count, @archives_count, @supprimes_recemment_count, @expirant_count = current_instructeur @a_suivre_count, @suivis_count, @traites_count, @tous_count, @archives_count, @supprimes_count, @expirant_count = current_instructeur
.dossiers_count_summary(groupe_instructeur_ids) .dossiers_count_summary(groupe_instructeur_ids)
.fetch_values('a_suivre', 'suivis', 'traites', 'tous', 'archives', 'supprimes_recemment', 'expirant') .fetch_values('a_suivre', 'suivis', 'traites', 'tous', 'archives', 'supprimes', 'expirant')
@can_download_dossiers = (@tous_count + @archives_count) > 0 && !instructeur_as_manager? @can_download_dossiers = (@tous_count + @archives_count) > 0 && !instructeur_as_manager?
notifications = current_instructeur.notifications_for_groupe_instructeurs(groupe_instructeur_ids) notifications = current_instructeur.notifications_for_groupe_instructeurs(groupe_instructeur_ids)

View file

@ -6,7 +6,7 @@ module Users
layout 'procedure_context', only: [:identite, :update_identite, :siret, :update_siret] layout 'procedure_context', only: [:identite, :update_identite, :siret, :update_siret]
ACTIONS_ALLOWED_TO_ANY_USER = [:index, :new, :transferer_all] ACTIONS_ALLOWED_TO_ANY_USER = [:index, :new, :transferer_all, :deleted_dossiers]
ACTIONS_ALLOWED_TO_OWNER_OR_INVITE = [:show, :destroy, :demande, :messagerie, :brouillon, :submit_brouillon, :submit_en_construction, :modifier, :modifier_legacy, :update, :create_commentaire, :papertrail, :restore, :champ] ACTIONS_ALLOWED_TO_OWNER_OR_INVITE = [:show, :destroy, :demande, :messagerie, :brouillon, :submit_brouillon, :submit_en_construction, :modifier, :modifier_legacy, :update, :create_commentaire, :papertrail, :restore, :champ]
before_action :ensure_ownership!, except: ACTIONS_ALLOWED_TO_ANY_USER + ACTIONS_ALLOWED_TO_OWNER_OR_INVITE before_action :ensure_ownership!, except: ACTIONS_ALLOWED_TO_ANY_USER + ACTIONS_ALLOWED_TO_OWNER_OR_INVITE
@ -26,15 +26,12 @@ module Users
def index def index
ordered_dossiers = Dossier.includes(:procedure).order_by_updated_at ordered_dossiers = Dossier.includes(:procedure).order_by_updated_at
deleted_dossiers = current_user.deleted_dossiers.includes(:procedure).order_by_updated_at
user_revisions = ProcedureRevision.where(dossiers: current_user.dossiers.visible_by_user) user_revisions = ProcedureRevision.where(dossiers: current_user.dossiers.visible_by_user)
invite_revisions = ProcedureRevision.where(dossiers: current_user.dossiers_invites.visible_by_user) invite_revisions = ProcedureRevision.where(dossiers: current_user.dossiers_invites.visible_by_user)
deleted_dossier_procedures = Procedure.where(id: deleted_dossiers.pluck(:procedure_id))
all_dossier_procedures = Procedure.where(revisions: user_revisions.or(invite_revisions)) all_dossier_procedures = Procedure.where(revisions: user_revisions.or(invite_revisions))
@procedures_for_select = all_dossier_procedures @procedures_for_select = all_dossier_procedures
.or(deleted_dossier_procedures)
.distinct(:procedure_id) .distinct(:procedure_id)
.order(:libelle) .order(:libelle)
.pluck(:libelle, :id) .pluck(:libelle, :id)
@ -42,14 +39,12 @@ module Users
@procedure_id = params[:procedure_id] @procedure_id = params[:procedure_id]
if @procedure_id.present? if @procedure_id.present?
ordered_dossiers = ordered_dossiers.where(procedures: { id: @procedure_id }) ordered_dossiers = ordered_dossiers.where(procedures: { id: @procedure_id })
deleted_dossiers = deleted_dossiers.where(procedures: { id: @procedure_id })
end end
@search_terms = params[:q] @search_terms = params[:q]
if @search_terms.present? if @search_terms.present?
dossiers_filter_by_search = DossierSearchService.matching_dossiers_for_user(@search_terms, current_user).page dossiers_filter_by_search = DossierSearchService.matching_dossiers_for_user(@search_terms, current_user).page
ordered_dossiers = ordered_dossiers.merge(dossiers_filter_by_search) ordered_dossiers = ordered_dossiers.merge(dossiers_filter_by_search)
deleted_dossiers = nil
end end
@dossiers_visibles = ordered_dossiers.visible_by_user.preload(:etablissement, :individual, :invites) @dossiers_visibles = ordered_dossiers.visible_by_user.preload(:etablissement, :individual, :invites)
@ -57,12 +52,11 @@ module Users
@user_dossiers = current_user.dossiers.state_not_termine.merge(@dossiers_visibles) @user_dossiers = current_user.dossiers.state_not_termine.merge(@dossiers_visibles)
@dossiers_traites = current_user.dossiers.state_termine.merge(@dossiers_visibles) @dossiers_traites = current_user.dossiers.state_termine.merge(@dossiers_visibles)
@dossiers_invites = current_user.dossiers_invites.merge(@dossiers_visibles) @dossiers_invites = current_user.dossiers_invites.merge(@dossiers_visibles)
@dossiers_supprimes_recemment = (current_user.dossiers.hidden_by_user.or(current_user.dossiers.hidden_by_expired)).merge(ordered_dossiers) @dossiers_supprimes = (current_user.dossiers.hidden_by_user.or(current_user.dossiers.hidden_by_expired)).merge(ordered_dossiers)
@dossier_transferes = @dossiers_visibles.where(dossier_transfer_id: DossierTransfer.for_email(current_user.email)) @dossier_transferes = @dossiers_visibles.where(dossier_transfer_id: DossierTransfer.for_email(current_user.email))
@dossiers_close_to_expiration = current_user.dossiers.close_to_expiration.merge(@dossiers_visibles) @dossiers_close_to_expiration = current_user.dossiers.close_to_expiration.merge(@dossiers_visibles)
@dossiers_supprimes_definitivement = deleted_dossiers
@statut = statut(@user_dossiers, @dossiers_traites, @dossiers_invites, @dossiers_supprimes_recemment, @dossiers_supprimes_definitivement, @dossier_transferes, @dossiers_close_to_expiration, params[:statut]) @statut = statut(@user_dossiers, @dossiers_traites, @dossiers_invites, @dossiers_supprimes, @dossier_transferes, @dossiers_close_to_expiration, params[:statut])
@dossiers = case @statut @dossiers = case @statut
when 'en-cours' when 'en-cours'
@ -71,10 +65,8 @@ module Users
@dossiers_traites @dossiers_traites
when 'dossiers-invites' when 'dossiers-invites'
@dossiers_invites @dossiers_invites
when 'dossiers-supprimes-recemment' when 'dossiers-supprimes'
@dossiers_supprimes_recemment @dossiers_supprimes
when 'dossiers-supprimes-definitivement'
@dossiers_supprimes_definitivement
when 'dossiers-transferes' when 'dossiers-transferes'
@dossier_transferes @dossier_transferes
when 'dossiers-expirant' when 'dossiers-expirant'
@ -431,18 +423,21 @@ module Users
redirect_to dossier_path(@dossier) redirect_to dossier_path(@dossier)
end end
def deleted_dossiers
@deleted_dossiers = current_user.deleted_dossiers.includes(:procedure).order_by_updated_at.page(page)
end
private private
# if the status tab is filled, then this tab # if the status tab is filled, then this tab
# else first filled tab # else first filled tab
# else en-cours # else en-cours
def statut(mes_dossiers, dossiers_traites, dossiers_invites, dossiers_supprimes_recemment, dossiers_supprimes_definitivement, dossier_transferes, dossiers_close_to_expiration, params_statut) def statut(mes_dossiers, dossiers_traites, dossiers_invites, dossiers_supprimes, dossier_transferes, dossiers_close_to_expiration, params_statut)
tabs = { tabs = {
'en-cours' => mes_dossiers, 'en-cours' => mes_dossiers,
'traites' => dossiers_traites, 'traites' => dossiers_traites,
'dossiers-invites' => dossiers_invites, 'dossiers-invites' => dossiers_invites,
'dossiers-supprimes-recemment' => dossiers_supprimes_recemment, 'dossiers-supprimes' => dossiers_supprimes,
'dossiers-supprimes-definitivement' => dossiers_supprimes_definitivement,
'dossiers-transferes' => dossier_transferes, 'dossiers-transferes' => dossier_transferes,
'dossiers-expirant' => dossiers_close_to_expiration 'dossiers-expirant' => dossiers_close_to_expiration
} }

View file

@ -105,7 +105,7 @@ module DossierHelper
status_class = 'unknown' status_class = 'unknown'
end end
tag.span(status_text, class: "label #{status_class} ") tag.span(status_text, class: "fr-badge #{status_class} ")
end end
def pending_correction_badge(for_profile, html_class: nil) def pending_correction_badge(for_profile, html_class: nil)

View file

@ -9,8 +9,8 @@ module TabsHelper
'pluralize.processed' 'pluralize.processed'
when 'tous' when 'tous'
'views.instructeurs.dossiers.tab_steps.total' # i18n-tasks-use t('views.instructeurs.dossiers.tab_steps.total') 'views.instructeurs.dossiers.tab_steps.total' # i18n-tasks-use t('views.instructeurs.dossiers.tab_steps.total')
when 'supprimes_recemment' when 'supprimes'
'pluralize.dossiers_supprimes_recemment' 'pluralize.dossiers_supprimes'
when 'expirant' when 'expirant'
'pluralize.dossiers_close_to_expiration' 'pluralize.dossiers_close_to_expiration'
when 'archives' when 'archives'

View file

@ -416,7 +416,7 @@ class Dossier < ApplicationRecord
visible_by_administration.termine visible_by_administration.termine
when 'tous' when 'tous'
visible_by_administration.all_state visible_by_administration.all_state
when 'supprimes_recemment' when 'supprimes'
hidden_by_administration.state_termine.or(hidden_by_expired) hidden_by_administration.state_termine.or(hidden_by_expired)
when 'archives' when 'archives'
visible_by_administration.archived visible_by_administration.archived

View file

@ -22,7 +22,7 @@ class Export < ApplicationRecord
suivis: 'suivis', suivis: 'suivis',
traites: 'traites', traites: 'traites',
tous: 'tous', tous: 'tous',
supprimes_recemment: 'supprimes_recemment', supprimes: 'supprimes',
archives: 'archives', archives: 'archives',
expirant: 'expirant' expirant: 'expirant'
} }

View file

@ -232,7 +232,7 @@ class Instructeur < ApplicationRecord
COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NULL AND dossiers.hidden_by_expired_at IS NULL AND not archived AND dossiers.state in ('accepte', 'refuse', 'sans_suite')) AS traites, COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NULL AND dossiers.hidden_by_expired_at IS NULL AND not archived AND dossiers.state in ('accepte', 'refuse', 'sans_suite')) AS traites,
COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NULL AND dossiers.hidden_by_expired_at IS NULL AND not archived) AS tous, COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NULL AND dossiers.hidden_by_expired_at IS NULL AND not archived) AS tous,
COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NULL AND dossiers.hidden_by_expired_at IS NULL AND archived) AS archives, COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NULL AND dossiers.hidden_by_expired_at IS NULL AND archived) AS archives,
COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NOT NULL AND not archived OR dossiers.hidden_by_expired_at IS NOT NULL) AS supprimes_recemment, COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NOT NULL AND not archived OR dossiers.hidden_by_expired_at IS NOT NULL) AS supprimes,
COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NULL AND dossiers.hidden_by_expired_at IS NULL AND procedures.procedure_expires_when_termine_enabled COUNT(DISTINCT dossiers.id) FILTER (where dossiers.hidden_by_administration_at IS NULL AND dossiers.hidden_by_expired_at IS NULL AND procedures.procedure_expires_when_termine_enabled
AND ( AND (
dossiers.state in ('accepte', 'refuse', 'sans_suite') dossiers.state in ('accepte', 'refuse', 'sans_suite')

View file

@ -24,9 +24,13 @@
| |
= link_to t('instructeurs.dossiers.header.banner.administrators_list'), administrateurs_instructeur_procedure_path(procedure), class: 'header-link' = link_to t('instructeurs.dossiers.header.banner.administrators_list'), administrateurs_instructeur_procedure_path(procedure), class: 'header-link'
| |
= link_to t('views.instructeurs.dossiers.show_deleted_dossiers'), deleted_dossiers_instructeur_procedure_path(@procedure), class: "header-link"
|
= link_to t('instructeurs.dossiers.header.banner.exports_list'), exports_instructeur_procedure_path(procedure), class: 'header-link' = link_to t('instructeurs.dossiers.header.banner.exports_list'), exports_instructeur_procedure_path(procedure), class: 'header-link'
- if @has_export_notification - if @has_export_notification
%span.notifications{ 'aria-label': t('instructeurs.dossiers.header.banner.exports_notification_label') } %span.notifications{ 'aria-label': t('instructeurs.dossiers.header.banner.exports_notification_label') }
#last-export-alert #last-export-alert
= render partial: "last_export_alert", locals: { export: @last_export, statut: @statut } = render partial: "last_export_alert", locals: { export: @last_export, statut: @statut }

View file

@ -50,12 +50,12 @@
%li %li
%object %object
= link_to(instructeur_procedure_path(p, statut: 'supprimes_recemment')) do = link_to(instructeur_procedure_path(p, statut: 'supprimes')) do
- dossier_count = dossiers_supprimes_recemment_count_per_procedure[p.id] || 0 - dossier_count = dossiers_supprimes_count_per_procedure[p.id] || 0
.stats-number .stats-number
= number_with_html_delimiter(dossier_count) = number_with_html_delimiter(dossier_count)
.stats-legend .stats-legend
= t('pluralize.dossiers_supprimes_recemment', count: dossier_count) = t('pluralize.dossiers_supprimes', count: dossier_count)
- if p.procedure_expires_when_termine_enabled - if p.procedure_expires_when_termine_enabled
%li %li

View file

@ -22,10 +22,10 @@
active: statut == 'tous', active: statut == 'tous',
badge: number_with_html_delimiter(tous_count)) badge: number_with_html_delimiter(tous_count))
= tab_item(t(tab_i18n_key_from_status('supprimes_recemment'), count: supprimes_recemment_count), = tab_item(t(tab_i18n_key_from_status('supprimes'), count: supprimes_count),
instructeur_procedure_path(procedure, statut: 'supprimes_recemment'), instructeur_procedure_path(procedure, statut: 'supprimes'),
active: statut == 'supprimes_recemment', active: statut == 'supprimes',
badge: number_with_html_delimiter(supprimes_recemment_count)) badge: number_with_html_delimiter(supprimes_count))
- if procedure.procedure_expires_when_termine_enabled - if procedure.procedure_expires_when_termine_enabled
= tab_item(t(tab_i18n_key_from_status('expirant'), count: expirant_count), = tab_item(t(tab_i18n_key_from_status('expirant'), count: expirant_count),

View file

@ -1,55 +1,11 @@
- content_for(:title, "#{@procedure.libelle}") - content_for(:title, "#{@procedure.libelle}")
#procedure-show = render partial: 'administrateurs/breadcrumbs',
.sub-header locals: { steps: [[@procedure.libelle.truncate_words(10), instructeur_procedure_path(@procedure)],
.fr-container.flex ['Historique des dossiers supprimés']] }
.procedure-logo{ style: "background-image: url(#{@procedure.logo_url})",
role: 'img', 'aria-label': "logo de la démarche #{@procedure.libelle}" }
= render partial: 'header', locals: { procedure: @procedure, statut: @statut }
.procedure-actions
- if @can_download_dossiers
= render Dossiers::ExportDropdownComponent.new(procedure: @procedure, export_templates: current_instructeur.export_templates_for(@procedure), export_url: method(:download_export_instructeur_procedure_path))
.fr-container.flex= render partial: "tabs", locals: { procedure: @procedure,
statut: @statut,
a_suivre_count: @a_suivre_count,
suivis_count: @suivis_count,
traites_count: @traites_count,
tous_count: @tous_count,
supprimes_recemment_count: @supprimes_recemment_count,
archives_count: @archives_count,
expirant_count: @expirant_count,
has_en_cours_notifications: @has_en_cours_notifications,
has_termine_notifications: @has_termine_notifications }
.fr-container .fr-container
%h1.titre-dossiers Dossiers supprimés .fr-mb-3w
%details = link_to "Retour à la démarche", instructeur_procedure_path(@procedure), class: "fr-link fr-icon-arrow-left-line fr-link--icon-left"
%summary Les dossiers ont été supprimés. Vous ne pouvez plus les récupérer depuis Démarches Simplifiées.
Ceci s'explique pour les raisons suivantes : = render Dossiers::DeletedDossiersComponent.new(deleted_dossiers: @deleted_dossiers)
%ul
%li Lutilisateur a intentionnellement supprimé son dossier.
%li Le délai de conservation maximal de #{@procedure.duree_conservation_dossiers_dans_ds} mois a expiré. Conformément au règlement RGPD, DS ne peut continuer à les héberger.
- if @deleted_dossiers.any?
= paginate @deleted_dossiers, views_prefix: 'shared'
%table.table.dossiers-table.hoverable
%thead
%tr
%th.number-col N° dossier
%th Raison de suppression
%th Date de suppression
%tbody
- @deleted_dossiers.each do |deleted_dossier|
%tr
%td.number-col
= deleted_dossier.dossier_id
%td
= deletion_reason_badge(deleted_dossier.reason)
%td.deleted-cell
= l(deleted_dossier.deleted_at, format: '%d/%m/%y')
= paginate @deleted_dossiers, views_prefix: 'shared'
- else
Aucun dossier supprimé

View file

@ -41,7 +41,7 @@
dossiers_archived_count_per_procedure: @dossiers_archived_count_per_procedure, dossiers_archived_count_per_procedure: @dossiers_archived_count_per_procedure,
dossiers_termines_count_per_procedure: @dossiers_termines_count_per_procedure, dossiers_termines_count_per_procedure: @dossiers_termines_count_per_procedure,
dossiers_expirant_count_per_procedure: @dossiers_expirant_count_per_procedure, dossiers_expirant_count_per_procedure: @dossiers_expirant_count_per_procedure,
dossiers_supprimes_recemment_count_per_procedure: @dossiers_supprimes_recemment_count_per_procedure, dossiers_supprimes_count_per_procedure: @dossiers_supprimes_count_per_procedure,
followed_dossiers_count_per_procedure: @followed_dossiers_count_per_procedure, followed_dossiers_count_per_procedure: @followed_dossiers_count_per_procedure,
procedure_ids_en_cours_with_notifications: @procedure_ids_en_cours_with_notifications, procedure_ids_en_cours_with_notifications: @procedure_ids_en_cours_with_notifications,
procedure_ids_termines_with_notifications: @procedure_ids_termines_with_notifications } procedure_ids_termines_with_notifications: @procedure_ids_termines_with_notifications }

View file

@ -19,7 +19,7 @@
suivis_count: @counts[:suivis], suivis_count: @counts[:suivis],
traites_count: @counts[:traites], traites_count: @counts[:traites],
tous_count: @counts[:tous], tous_count: @counts[:tous],
supprimes_recemment_count: @counts[:supprimes_recemment], supprimes_count: @counts[:supprimes],
archives_count: @counts[:archives], archives_count: @counts[:archives],
expirant_count: @counts[:expirant], expirant_count: @counts[:expirant],
has_en_cours_notifications: @has_en_cours_notifications, has_en_cours_notifications: @has_en_cours_notifications,
@ -41,9 +41,9 @@
= t('views.instructeurs.dossiers.tab_explainations.tous_with_routing') = t('views.instructeurs.dossiers.tab_explainations.tous_with_routing')
- else - else
= t('views.instructeurs.dossiers.tab_explainations.tous') = t('views.instructeurs.dossiers.tab_explainations.tous')
- if @statut == 'supprimes_recemment' - if @statut == 'supprimes'
%p %p
= t('views.instructeurs.dossiers.tab_explainations.supprimes_recemment').html_safe = t('views.instructeurs.dossiers.tab_explainations.supprimes').html_safe
- if @statut == 'archives' - if @statut == 'archives'
%p %p
= t('views.instructeurs.dossiers.tab_explainations.archives') = t('views.instructeurs.dossiers.tab_explainations.archives')
@ -65,11 +65,6 @@
= render Dossiers::NotifiedToggleComponent.new(procedure: @procedure, procedure_presentation: @procedure_presentation) if @statut != 'a-suivre' = render Dossiers::NotifiedToggleComponent.new(procedure: @procedure, procedure_presentation: @procedure_presentation) if @statut != 'a-suivre'
.fr-ml-auto .fr-ml-auto
- if @statut == 'archives'
= link_to deleted_dossiers_instructeur_procedure_path(@procedure), class: "fr-link fr-icon-delete-line fr-link--icon-left fr-mr-2w" do
= t('views.instructeurs.dossiers.show_deleted_dossiers')
- if @dossiers_count > 0 - if @dossiers_count > 0
%span.dossiers-export %span.dossiers-export
= render Dossiers::ExportDropdownComponent.new(procedure: @procedure, export_templates: current_instructeur.export_templates_for(@procedure), statut: @statut, count: @dossiers_count, class_btn: 'fr-btn--tertiary', export_url: method(:download_export_instructeur_procedure_path)) = render Dossiers::ExportDropdownComponent.new(procedure: @procedure, export_templates: current_instructeur.export_templates_for(@procedure), statut: @statut, count: @dossiers_count, class_btn: 'fr-btn--tertiary', export_url: method(:download_export_instructeur_procedure_path))
@ -167,7 +162,7 @@
archived: p.archived, archived: p.archived,
dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id), dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id),
close_to_expiration: @statut == 'expirant', close_to_expiration: @statut == 'expirant',
hidden_by_administration: @statut == 'supprimes_recemment', hidden_by_administration: @statut == 'supprimes',
hidden_by_expired: p.hidden_by_reason == 'expired', hidden_by_expired: p.hidden_by_reason == 'expired',
sva_svr: @procedure.sva_svr_enabled?, sva_svr: @procedure.sva_svr_enabled?,
has_blocking_pending_correction: @procedure.feature_enabled?(:blocking_pending_correction) && p.pending_correction?, has_blocking_pending_correction: @procedure.feature_enabled?(:blocking_pending_correction) && p.pending_correction?,

View file

@ -5,4 +5,8 @@
= link_to t('back', scope: [:layouts, :header]), url_for(:back), title: t('back_title', scope: [:layouts, :header]), class: 'fr-nav__link', "aria-controls" => "modal-header__menu" = link_to t('back', scope: [:layouts, :header]), url_for(:back), title: t('back_title', scope: [:layouts, :header]), class: 'fr-nav__link', "aria-controls" => "modal-header__menu"
%li.fr-nav__item %li.fr-nav__item
= link_to t('files', scope: [:layouts, :header]), dossiers_path, class: 'fr-nav__link', aria: { current: controller_name == 'dossiers' ? 'true' : nil, controls: "modal-header__menu" } = link_to t('files', scope: [:layouts, :header]), dossiers_path, class: 'fr-nav__link', aria: { current: (controller_name == 'dossiers' && action_name != 'deleted_dossiers') ? 'true' : nil, controls: "modal-header__menu" }
- if current_user.deleted_dossiers.present?
%li.fr-nav__item
= link_to 'Historique des dossiers supprimés', deleted_dossiers_path(), class: 'fr-nav__link', aria: { current: action_name == 'deleted_dossiers' ? 'true' : nil, controls: "modal-header__menu" }

View file

@ -1,30 +0,0 @@
- if deleted_dossiers.present?
%h2.fr-h6.fr-mb-2w
= page_entries_info deleted_dossiers
- deleted_dossiers.each do |dossier|
.card
.flex.justify-between
%div
%h3.card-title
= dossier.procedure.libelle
%p.fr-icon--sm.fr-icon-delete-line.fr-mb-0
= t('views.users.dossiers.dossiers_list.deleted', date: l(dossier.updated_at.to_date))
= "-"
= t("activerecord.attributes.deleted_dossier.reason.#{dossier.reason}")
.text-right
%p.fr-mb-0
= t('views.users.dossiers.dossiers_list.n_dossier')
= dossier.dossier_id
= status_badge(dossier.state, 'fr-mb-1w')
= paginate deleted_dossiers, views_prefix: 'shared'
- else
.blank-tab
%h2.empty-text= t('views.users.dossiers.dossiers_list.no_result_title')
%p.empty-text-details
= t('views.users.dossiers.dossiers_list.no_result_text_html', app_base: Current.application_base_url)

View file

@ -7,7 +7,7 @@
.flex.justify-between .flex.justify-between
%div %div
%h3.card-title %h3.card-title
- if ["dossiers-transferes", "dossiers-supprimes-recemment"].exclude?(@statut) - if ["dossiers-transferes", "dossiers-supprimes"].exclude?(@statut)
= link_to(url_for_dossier(dossier), class: 'cell-link') do = link_to(url_for_dossier(dossier), class: 'cell-link') do
= dossier.procedure.libelle = dossier.procedure.libelle
- else - else
@ -96,11 +96,11 @@
= link_to t('views.users.dossiers.transfers.revoke'), transfer_path(dossier.transfer), class: 'fr-link', method: :delete = link_to t('views.users.dossiers.transfers.revoke'), transfer_path(dossier.transfer), class: 'fr-link', method: :delete
- if ["dossiers-transferes", "dossiers-supprimes-recemment"].exclude?(@statut) - if ["dossiers-transferes", "dossiers-supprimes"].exclude?(@statut)
.flex.justify-end .flex.justify-end
= render partial: 'dossier_actions', locals: { dossier: dossier } = render partial: 'dossier_actions', locals: { dossier: dossier }
- if @statut == "dossiers-supprimes-recemment" - if @statut == "dossiers-supprimes"
.flex.justify-end .flex.justify-end
- if dossier.hidden_by_reason != 'expired' - if dossier.hidden_by_reason != 'expired'
= link_to restore_dossier_path(dossier.id), method: :patch, class: "fr-btn fr-btn--sm" do = link_to restore_dossier_path(dossier.id), method: :patch, class: "fr-btn fr-btn--sm" do

View file

@ -0,0 +1,6 @@
- content_for(:title, "Historique des dossiers supprimés")
= render partial: 'administrateurs/breadcrumbs',
locals: { steps: [['Historique des dossiers supprimés']] }
= render Dossiers::DeletedDossiersComponent.new(deleted_dossiers: @deleted_dossiers)

View file

@ -50,17 +50,11 @@
active: @statut == 'dossiers-expirant', active: @statut == 'dossiers-expirant',
badge: number_with_html_delimiter(@dossiers_close_to_expiration.count)) badge: number_with_html_delimiter(@dossiers_close_to_expiration.count))
- if @dossiers_supprimes_recemment.present? - if @dossiers_supprimes.present?
= tab_item(t('pluralize.dossiers_supprimes_recemment', count: @dossiers_supprimes_recemment.count), = tab_item(t('pluralize.dossiers_supprimes', count: @dossiers_supprimes.count),
dossiers_path(statut: 'dossiers-supprimes-recemment', procedure_id: params[:procedure_id]), dossiers_path(statut: 'dossiers-supprimes', procedure_id: params[:procedure_id]),
active: @statut == 'dossiers-supprimes-recemment', active: @statut == 'dossiers-supprimes',
badge: number_with_html_delimiter(@dossiers_supprimes_recemment.count)) badge: number_with_html_delimiter(@dossiers_supprimes.count))
- if @dossiers_supprimes_definitivement.present?
= tab_item(t('pluralize.dossiers_supprimes_definitivement', count: @dossiers_supprimes_definitivement.count),
dossiers_path(statut: 'dossiers-supprimes-definitivement', procedure_id: params[:procedure_id]),
active: @statut == 'dossiers-supprimes-definitivement',
badge: number_with_html_delimiter(@dossiers_supprimes_definitivement.count))
- if @dossier_transferes.present? - if @dossier_transferes.present?
= tab_item(t('pluralize.dossiers_transferes', count: @dossier_transferes.count), = tab_item(t('pluralize.dossiers_transferes', count: @dossier_transferes.count),
@ -88,9 +82,4 @@
- else - else
= render Dossiers::UserFilterComponent.new(statut: @statut, filter: @filter, procedure_id: @procedure_id ) = render Dossiers::UserFilterComponent.new(statut: @statut, filter: @filter, procedure_id: @procedure_id )
- if @statut == "dossiers-supprimes-definitivement"
-# /!\ in this context, @dossiers is a collection of DeletedDossier not Dossier
= render partial: "deleted_dossiers_list", locals: { deleted_dossiers: @dossiers }
- else
= render partial: "dossiers_list", locals: { dossiers: @dossiers, filter: @filter, statut: @statut, search: false } = render partial: "dossiers_list", locals: { dossiers: @dossiers, filter: @filter, statut: @statut, search: false }

View file

@ -150,7 +150,6 @@ en:
subtitle_two: "Additional notes" subtitle_two: "Additional notes"
content_html: "<p class=\"fr-mb-2w\">The documentation pages are managed by a third-party tool. They are not fully accessible.</p> content_html: "<p class=\"fr-mb-2w\">The documentation pages are managed by a third-party tool. They are not fully accessible.</p>
<p class=\"fr-mb-2w\">FAQ management was delegated to a third-party tool. It was reintegrated into the platform in May 2024 and has not yet been audited.</p>" <p class=\"fr-mb-2w\">FAQ management was delegated to a third-party tool. It was reintegrated into the platform in May 2024 and has not yet been audited.</p>"
preparation: preparation:
title: "Preparation of this accessibility declaration" title: "Preparation of this accessibility declaration"
intro: "This declaration was drawn up on 27 April 2022. It was updated on 14 June 2024." intro: "This declaration was drawn up on 27 April 2022. It was updated on 14 June 2024."
@ -395,7 +394,7 @@ en:
traites_html: "The files in this tab are finished: they have been accepted, refused or closed without follow-up. You can <a href=%{archives_path}>download</a> the zip archives of finished files and their attachments." traites_html: "The files in this tab are finished: they have been accepted, refused or closed without follow-up. You can <a href=%{archives_path}>download</a> the zip archives of finished files and their attachments."
tous: All the files that have been submitted on this approach, included files to be follow and files followed by you or other instructors. tous: All the files that have been submitted on this approach, included files to be follow and files followed by you or other instructors.
tous_with_routing: All the files that have been submitted on this approach, and assigned to your instructors groups. tous_with_routing: All the files that have been submitted on this approach, and assigned to your instructors groups.
supprimes_recemment: All files not <strong>archive</strong>, <strong>completed</strong> and <strong>deleted by the instructors</strong> on this approach. supprimes: All files not <strong>archive</strong>, <strong>completed</strong> and <strong>deleted by the instructors</strong> on this approach.
archives: "The files in this tab are archived: you can no longer reply to them, and requesters can no longer modify them." archives: "The files in this tab are archived: you can no longer reply to them, and requesters can no longer modify them."
expirant: Records will not expire prior to the data retention period. expirant: Records will not expire prior to the data retention period.
archived_dossier: "This file will be kept for an additional month" archived_dossier: "This file will be kept for an additional month"
@ -514,7 +513,8 @@ en:
created_at: Created at %{date} created_at: Created at %{date}
updated_at: updated at %{date} updated_at: updated at %{date}
shared_with: File shared by %{owner} with shared_with: File shared by %{owner} with
deleted: Deleted at %{date} deleted_by_user: Deleted on %{date} by user
deleted_by_automatic: Deleted on %{date} automatically due to expiration date
procedure_closed: procedure_closed:
brouillon: brouillon:
internal_procedure_html: This procedure is closed. You cannot submit this file. We invite you to submit a new one on the %{link} which replaces it. internal_procedure_html: This procedure is closed. You cannot submit this file. We invite you to submit a new one on the %{link} which replaces it.
@ -789,12 +789,9 @@ en:
dossiers_invites: dossiers_invites:
one: guest file one: guest file
other: guest files other: guest files
dossiers_supprimes_recemment: dossiers_supprimes:
one: recently deleted file one: recently deleted file
other: recently deleted files other: recently deleted files
dossiers_supprimes_definitivement:
one: permanently deleted file
other: permanently deleted files
dossiers_transferes: dossiers_transferes:
one: transfer request one: transfer request
other: transfer requests other: transfer requests

View file

@ -395,7 +395,7 @@ fr:
traites_html: "Les dossiers dans cet onglet sont terminés : ils ont été acceptés, refusés ou classés sans suite. Vous pouvez <a href=%{archives_path}>télécharger</a> les archives au format zip des dossiers terminés et leurs pièces jointes." traites_html: "Les dossiers dans cet onglet sont terminés : ils ont été acceptés, refusés ou classés sans suite. Vous pouvez <a href=%{archives_path}>télécharger</a> les archives au format zip des dossiers terminés et leurs pièces jointes."
tous: Tous les dossiers déposés sur cette démarche, qu'ils soient à suivre, suivis par vous ou suivis par d'autres instructeurs. tous: Tous les dossiers déposés sur cette démarche, qu'ils soient à suivre, suivis par vous ou suivis par d'autres instructeurs.
tous_with_routing: Tous les dossiers déposés sur cette démarche et attribués aux groupes d'instructeurs dont vous faites partie. tous_with_routing: Tous les dossiers déposés sur cette démarche et attribués aux groupes d'instructeurs dont vous faites partie.
supprimes_recemment: Tous les dossiers <strong>non archivés</strong>, <strong>terminés</strong> et <strong>supprimés par les instructeurs</strong> sur cette démarche supprimes: Tous les dossiers <strong>non archivés</strong>, <strong>terminés</strong> et <strong>supprimés par les instructeurs</strong> sur cette démarche
archives: "Les dossiers de cet onglet sont archivés : vous ne pouvez plus y répondre, et les demandeurs ne peuvent plus les modifier." archives: "Les dossiers de cet onglet sont archivés : vous ne pouvez plus y répondre, et les demandeurs ne peuvent plus les modifier."
expirant: Les dossiers nexpireront pas avant la période de conservation des données. expirant: Les dossiers nexpireront pas avant la période de conservation des données.
archived_dossier: "Le dossier sera conservé 1 mois supplémentaire" archived_dossier: "Le dossier sera conservé 1 mois supplémentaire"
@ -413,7 +413,7 @@ fr:
batch_operation: batch_operation:
enabled: "Ajouter le dossier %{dossier_id} à la sélection pour un traitement de masse" enabled: "Ajouter le dossier %{dossier_id} à la sélection pour un traitement de masse"
disabled: "Impossible d'ajouter le dossier %{dossier_id} à la selection car il est déjà dans un traitement de masse" disabled: "Impossible d'ajouter le dossier %{dossier_id} à la selection car il est déjà dans un traitement de masse"
show_deleted_dossiers: Afficher les dossiers supprimés show_deleted_dossiers: Historique des dossiers supprimés
personalize: Personnaliser personalize: Personnaliser
passer_en_instruction: Passer en instruction passer_en_instruction: Passer en instruction
repasser_en_construction: Repasser en construction repasser_en_construction: Repasser en construction
@ -533,7 +533,6 @@ fr:
created_at: Créé le %{date} created_at: Créé le %{date}
updated_at: modifié le %{date} updated_at: modifié le %{date}
shared_with: Dossier partagé par %{owner} avec shared_with: Dossier partagé par %{owner} avec
deleted: Supprimé le %{date}
deleted_by_user: Supprimé le %{date} par l'usager deleted_by_user: Supprimé le %{date} par l'usager
deleted_by_automatic: Supprimé le %{date} automatiquement du à la date d'expiration deleted_by_automatic: Supprimé le %{date} automatiquement du à la date d'expiration
dossier_action: dossier_action:
@ -802,10 +801,10 @@ fr:
dossiers_invites: dossiers_invites:
one: dossier invité one: dossier invité
other: dossiers invités other: dossiers invités
dossiers_supprimes_recemment: dossiers_supprimes:
one: supprimé récemment one: supprimé
other: supprimés récemment other: supprimés
dossiers_supprimes_definitivement: dossiers_historique:
one: supprimé définitivement one: supprimé définitivement
other: supprimés définitivement other: supprimés définitivement
dossiers_transferes: dossiers_transferes:

View file

@ -11,10 +11,10 @@ fr:
en_construction: Ce dossier est en attente de prise en charge. Vous pouvez toutefois étendre cette durée dun mois en cliquant sur le bouton suivant. en_construction: Ce dossier est en attente de prise en charge. Vous pouvez toutefois étendre cette durée dun mois en cliquant sur le bouton suivant.
termine: Le traitement de ce dossier est terminé, mais il va bientôt être supprimé. Si vous souhaitez en conserver une trace, vous pouvez le télécharger au format PDF. termine: Le traitement de ce dossier est terminé, mais il va bientôt être supprimé. Si vous souhaitez en conserver une trace, vous pouvez le télécharger au format PDF.
button_delay_expiration: "Conserver un mois de plus" button_delay_expiration: "Conserver un mois de plus"
notification_management: gestion des notifications notification_management: Gestion des notifications
administrators_list: voir les administrateurs administrators_list: Voir les administrateurs
exports_list: voir les exports exports_list: Voir les exports
exports_notification_label: Un nouvel export est prêt à être téléchargé exports_notification_label: Un nouvel export est prêt à être téléchargé
statistics: statistiques statistics: Statistiques
instructeurs: instructeurs instructeurs: instructeurs
contact_users: contacter les usagers (brouillon) contact_users: Contacter les usagers (brouillon)

View file

@ -11,7 +11,7 @@ en:
all: files all: files
archived: archived archived: archived
dossiers_close_to_expiration: expiring dossiers_close_to_expiration: expiring
dossiers_supprimes_recemment: recently deleted dossiers_supprimes: recently deleted
copy_link_button: Copy the procedure link to clipboard copy_link_button: Copy the procedure link to clipboard
email_usagers: email_usagers:
contact_users: Contact users (draft) contact_users: Contact users (draft)

View file

@ -11,7 +11,7 @@ fr:
all: dossiers all: dossiers
archived: archivés archived: archivés
dossiers_close_to_expiration: expirant dossiers_close_to_expiration: expirant
dossiers_supprimes_recemment: supprimés dossiers_supprimes: supprimés
copy_link_button: Copier le lien de la démarche dans le presse-papiers copy_link_button: Copier le lien de la démarche dans le presse-papiers
email_usagers: email_usagers:
contact_users: Contacter les usagers (brouillon) contact_users: Contacter les usagers (brouillon)

View file

@ -389,6 +389,7 @@ Rails.application.routes.draw do
resource :feedback, only: [:create] resource :feedback, only: [:create]
get 'demarches' => 'demarches#index' get 'demarches' => 'demarches#index'
get 'deleted_dossiers' => 'dossiers#deleted_dossiers'
get 'profil' => 'profil#show' get 'profil' => 'profil#show'
patch 'update_email' => 'profil#update_email' patch 'update_email' => 'profil#update_email'

View file

@ -0,0 +1,10 @@
class RenameSupprimesRecemmentFromProcedurePresentation < ActiveRecord::Migration[7.0]
def up
ProcedurePresentation.update_all(%Q(filters = filters || '{"supprimes": []}'))
change_column_default :procedure_presentations, :filters, { "tous" => [], "suivis" => [], "traites" => [], "a-suivre" => [], "archives" => [], "supprimes" => [], "expirant": [] }
end
def down
change_column_default :procedure_presentations, :filters, { "tous" => [], "suivis" => [], "traites" => [], "a-suivre" => [], "archives" => [], "supprimes_recemment" => [], "expirant": [] }
end
end

View file

@ -862,7 +862,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_07_29_160650) do
t.integer "assign_to_id" t.integer "assign_to_id"
t.datetime "created_at", precision: nil t.datetime "created_at", precision: nil
t.jsonb "displayed_fields", default: [{"label"=>"Demandeur", "table"=>"user", "column"=>"email"}], null: false t.jsonb "displayed_fields", default: [{"label"=>"Demandeur", "table"=>"user", "column"=>"email"}], null: false
t.jsonb "filters", default: {"tous"=>[], "suivis"=>[], "traites"=>[], "a-suivre"=>[], "archives"=>[], "expirant"=>[], "supprimes_recemment"=>[]}, null: false t.jsonb "filters", default: {"tous"=>[], "suivis"=>[], "traites"=>[], "a-suivre"=>[], "archives"=>[], "expirant"=>[], "supprimes"=>[]}, null: false
t.jsonb "sort", default: {"order"=>"desc", "table"=>"notifications", "column"=>"notifications"}, null: false t.jsonb "sort", default: {"order"=>"desc", "table"=>"notifications", "column"=>"notifications"}, null: false
t.datetime "updated_at", precision: nil t.datetime "updated_at", precision: nil
t.index ["assign_to_id"], name: "index_procedure_presentations_on_assign_to_id", unique: true t.index ["assign_to_id"], name: "index_procedure_presentations_on_assign_to_id", unique: true

View file

@ -3,7 +3,7 @@ category: "instructeur"
subcategory: "instruction" subcategory: "instruction"
slug: "a-quoi-correspondent-les-differentes-categories-de-dossiers" slug: "a-quoi-correspondent-les-differentes-categories-de-dossiers"
locale: "fr" locale: "fr"
keywords: "catégories dossiers, à suivre, suivi, traités, supprimé récemment, archivés" keywords: "catégories dossiers, à suivre, suivi, traités, supprimés, archivés"
title: "À quoi correspondent les différentes catégories de dossiers ?" title: "À quoi correspondent les différentes catégories de dossiers ?"
--- ---
@ -14,7 +14,7 @@ Pour chaque démarche, les dossiers sont répartis dans plusieurs onglets :
- **À suivre** : regroupe lensemble des dossiers qui ne sont suivis par aucun instructeur. - **À suivre** : regroupe lensemble des dossiers qui ne sont suivis par aucun instructeur.
- **Suivis** : naffiche que les dossiers que *vous* suivez. Elle ne prend donc pas en compte les dossiers suivis par les autres instructeurs de la démarche. - **Suivis** : naffiche que les dossiers que *vous* suivez. Elle ne prend donc pas en compte les dossiers suivis par les autres instructeurs de la démarche.
- **Traités** : regroupe les dossiers dont le statut est *accepté*, *refusé* ou *classé sans suite* et qui nont pas été archivés. - **Traités** : regroupe les dossiers dont le statut est *accepté*, *refusé* ou *classé sans suite* et qui nont pas été archivés.
- **Supprimé récemment** : regroupe lensemble des dossiers non archivés, terminés et supprimés par les instructeurs de la démarche. - **Supprimés** : regroupe lensemble des dossiers non archivés, terminés et supprimés par les instructeurs de la démarche.
- **Expirant** : les dossiers *en construction* ou *traités*, (archivés ou non), dont le délai dexpiration approche (moins dun mois). À lissue de ce délai, le dossier sera supprimé de la plateforme. - **Expirant** : les dossiers *en construction* ou *traités*, (archivés ou non), dont le délai dexpiration approche (moins dun mois). À lissue de ce délai, le dossier sera supprimé de la plateforme.
- **Archivés** : regroupe lensemble des dossiers archivés. Les instructeurs ne peuvent plus y répondre, et les demandeurs ne peuvent plus les modifier. La messagerie est désactivée. Ces dossiers seront supprimés lorsque leur délai de conservation sur %{application_name} sera expiré. - **Archivés** : regroupe lensemble des dossiers archivés. Les instructeurs ne peuvent plus y répondre, et les demandeurs ne peuvent plus les modifier. La messagerie est désactivée. Ces dossiers seront supprimés lorsque leur délai de conservation sur %{application_name} sera expiré.

View file

@ -48,9 +48,9 @@ describe Dossier, type: :model do
end end
end end
context 'supprimes_recemment' do context 'supprimes' do
it do it do
expect(procedure.dossiers.by_statut('supprimes_recemment')).to match_array([dossier_accepte_deleted, dossier_accepte_archive_deleted]) expect(procedure.dossiers.by_statut('supprimes')).to match_array([dossier_accepte_deleted, dossier_accepte_archive_deleted])
end end
end end

View file

@ -177,17 +177,17 @@ RSpec.describe Export, type: :model do
end end
end end
context 'with procedure_presentation and statut supprimes_recemment' do context 'with procedure_presentation and statut supprimes' do
let(:statut) { 'supprimes_recemment' } let(:statut) { 'supprimes' }
let(:procedure_presentation) do let(:procedure_presentation) do
create(:procedure_presentation, create(:procedure_presentation,
procedure: procedure, procedure: procedure,
assign_to: procedure.groupe_instructeurs.first.assign_tos.first) assign_to: procedure.groupe_instructeurs.first.assign_tos.first)
end end
let!(:dossier_recemment_supprime) { create(:dossier, :accepte, procedure: procedure, hidden_by_administration_at: 2.days.ago) } let!(:dossier_supprime) { create(:dossier, :accepte, procedure: procedure, hidden_by_administration_at: 2.days.ago) }
it 'includes supprimes_recemment' do it 'includes supprimes' do
expect(export.send(:dossiers_for_export)).to include(dossier_recemment_supprime) expect(export.send(:dossiers_for_export)).to include(dossier_supprime)
end end
end end
end end

View file

@ -719,13 +719,15 @@ describe Instructeur, type: :model do
context 'with an archives dossier' do context 'with an archives dossier' do
let!(:archives_dossier) { create(:dossier, :en_instruction, procedure: procedure, archived: true) } let!(:archives_dossier) { create(:dossier, :en_instruction, procedure: procedure, archived: true) }
it { expect(subject['a_suivre']).to eq(0) } it do
it { expect(subject['suivis']).to eq(0) } expect(subject['a_suivre']).to eq(0)
it { expect(subject['traites']).to eq(0) } expect(subject['suivis']).to eq(0)
it { expect(subject['tous']).to eq(0) } expect(subject['traites']).to eq(0)
it { expect(subject['archives']).to eq(1) } expect(subject['tous']).to eq(0)
it { expect(subject['supprimes_recemment']).to eq(0) } expect(subject['archives']).to eq(1)
it { expect(subject['expirant']).to eq(0) } expect(subject['supprimes']).to eq(0)
expect(subject['expirant']).to eq(0)
end
context 'and terminer dossiers on each of the others groups' do context 'and terminer dossiers on each of the others groups' do
let!(:archives_dossier_on_gi_2) { create(:dossier, :en_instruction, groupe_instructeur: gi_2, archived: true) } let!(:archives_dossier_on_gi_2) { create(:dossier, :en_instruction, groupe_instructeur: gi_2, archived: true) }
@ -742,13 +744,15 @@ describe Instructeur, type: :model do
let!(:expiring_dossier_en_construction) { create(:dossier, :en_construction, en_construction_at: 175.days.ago, procedure: procedure) } let!(:expiring_dossier_en_construction) { create(:dossier, :en_construction, en_construction_at: 175.days.ago, procedure: procedure) }
before { subject } before { subject }
it { expect(subject['a_suivre']).to eq(1) } it do
it { expect(subject['suivis']).to eq(0) } expect(subject['a_suivre']).to eq(1)
it { expect(subject['traites']).to eq(1) } expect(subject['suivis']).to eq(0)
it { expect(subject['tous']).to eq(2) } expect(subject['traites']).to eq(1)
it { expect(subject['archives']).to eq(0) } expect(subject['tous']).to eq(2)
it { expect(subject['supprimes_recemment']).to eq(2) } expect(subject['archives']).to eq(0)
it { expect(subject['expirant']).to eq(2) } expect(subject['supprimes']).to eq(2)
expect(subject['expirant']).to eq(2)
end
end end
end end
end end

View file

@ -135,7 +135,7 @@ describe 'Instructing a dossier:', js: true do
expect(page).to have_text('Nous générons cet export.') expect(page).to have_text('Nous générons cet export.')
click_on "voir les exports" click_on "Voir les exports"
expect(page).to have_text("Export .csv dun dossier « à suivre » demandé il y a moins d'une minute") expect(page).to have_text("Export .csv dun dossier « à suivre » demandé il y a moins d'une minute")
expect(page).to have_text("En préparation") expect(page).to have_text("En préparation")

View file

@ -219,7 +219,7 @@ describe 'user access to the list of their dossiers', js: true do
describe 'restore' do describe 'restore' do
it 'should have links to restore dossiers' do it 'should have links to restore dossiers' do
click_on "3 supprimés récemment" click_on "3 supprimés"
expect(page).to have_link('Restaurer', href: restore_dossier_path(dossier_en_construction_supprime)) expect(page).to have_link('Restaurer', href: restore_dossier_path(dossier_en_construction_supprime))
expect(page).to have_button('Restaurer et étendre la conservation') expect(page).to have_button('Restaurer et étendre la conservation')
expect(page).to have_link('Télécharger mon dossier', href: dossier_path("#{dossier_traite_expire.id}.pdf")) expect(page).to have_link('Télécharger mon dossier', href: dossier_path("#{dossier_traite_expire.id}.pdf"))
@ -227,29 +227,29 @@ describe 'user access to the list of their dossiers', js: true do
context 'when user clicks on restore button', js: true do context 'when user clicks on restore button', js: true do
scenario 'the dossier is restored' do scenario 'the dossier is restored' do
click_on "3 supprimés récemment" click_on "3 supprimés"
expect(page).to have_content(dossier_en_construction_supprime.procedure.libelle) expect(page).to have_content(dossier_en_construction_supprime.procedure.libelle)
click_on 'Restaurer' click_on 'Restaurer'
expect(page).to have_content('Votre dossier a bien été restauré') expect(page).to have_content('Votre dossier a bien été restauré')
expect(page).to have_content('2 supprimés récemment') expect(page).to have_content('2 supprimés')
end end
end end
context 'when user clicks on restore and extend button', js: true do context 'when user clicks on restore and extend button', js: true do
scenario 'the dossier is restored and extended' do scenario 'the dossier is restored and extended' do
click_on "3 supprimés récemment" click_on "3 supprimés"
expect(page).to have_content(dossier_en_construction_expire.procedure.libelle) expect(page).to have_content(dossier_en_construction_expire.procedure.libelle)
click_on 'Restaurer et étendre la conservation' click_on 'Restaurer et étendre la conservation'
expect(page).to have_content('Votre dossier sera conservé 3 mois supplémentaire') expect(page).to have_content('Votre dossier sera conservé 3 mois supplémentaire')
expect(page).to have_content('2 supprimés récemment') expect(page).to have_content('2 supprimés')
end end
end end
context 'when user download PDF of expired' do context 'when user download PDF of expired' do
scenario "generate PDF" do scenario "generate PDF" do
click_on "3 supprimés récemment" click_on "3 supprimés"
click_on 'Télécharger mon dossier', match: :first click_on 'Télécharger mon dossier', match: :first
# Test fails when an error happens during PDF generation # Test fails when an error happens during PDF generation
end end

View file

@ -8,7 +8,7 @@ describe 'instructeurs/procedures/_list', type: :view do
dossiers_a_suivre_count_per_procedure: 2, dossiers_a_suivre_count_per_procedure: 2,
dossiers_archived_count_per_procedure: 1, dossiers_archived_count_per_procedure: 1,
dossiers_termines_count_per_procedure: 1, dossiers_termines_count_per_procedure: 1,
dossiers_supprimes_recemment_count_per_procedure: 0, dossiers_supprimes_count_per_procedure: 0,
dossiers_expirant_count_per_procedure: 0, dossiers_expirant_count_per_procedure: 0,
followed_dossiers_count_per_procedure: 0, followed_dossiers_count_per_procedure: 0,
procedure_ids_en_cours_with_notifications: [], procedure_ids_en_cours_with_notifications: [],

View file

@ -11,7 +11,7 @@ describe 'instructeurs/procedures/_tabs', type: :view do
suivis_count: 0, suivis_count: 0,
traites_count: 0, traites_count: 0,
tous_count: 0, tous_count: 0,
supprimes_recemment_count: 0, supprimes_count: 0,
archives_count: 0, archives_count: 0,
expirant_count: 0, expirant_count: 0,
has_en_cours_notifications: false, has_en_cours_notifications: false,

View file

@ -16,8 +16,7 @@ describe 'users/dossiers/index', type: :view do
allow(controller).to receive(:current_user) { user } allow(controller).to receive(:current_user) { user }
assign(:user_dossiers, user_dossiers) assign(:user_dossiers, user_dossiers)
assign(:dossiers_invites, Kaminari.paginate_array(dossiers_invites).page(1)) assign(:dossiers_invites, Kaminari.paginate_array(dossiers_invites).page(1))
assign(:dossiers_supprimes_recemment, Kaminari.paginate_array(user_dossiers).page(1)) assign(:dossiers_supprimes, Kaminari.paginate_array(user_dossiers).page(1))
assign(:dossiers_supprimes_definitivement, Kaminari.paginate_array(user_dossiers).page(1))
assign(:dossiers_traites, Kaminari.paginate_array(user_dossiers).page(1)) assign(:dossiers_traites, Kaminari.paginate_array(user_dossiers).page(1))
assign(:dossier_transferes, Kaminari.paginate_array([]).page(1)) assign(:dossier_transferes, Kaminari.paginate_array([]).page(1))
assign(:dossiers_close_to_expiration, Kaminari.paginate_array([]).page(1)) assign(:dossiers_close_to_expiration, Kaminari.paginate_array([]).page(1))
@ -97,7 +96,7 @@ describe 'users/dossiers/index', type: :view do
it 'affiche la barre donglets' do it 'affiche la barre donglets' do
expect(rendered).to have_selector('nav.fr-tabs') expect(rendered).to have_selector('nav.fr-tabs')
expect(rendered).to have_selector('nav.fr-tabs li', count: 5) expect(rendered).to have_selector('nav.fr-tabs li', count: 4)
expect(rendered).to have_selector('nav.fr-tabs li.active', count: 1) expect(rendered).to have_selector('nav.fr-tabs li.active', count: 1)
end end
end end