Merge pull request #11104 from demarches-simplifiees/feat/10781

Liste des démarches instructeurs: passer au nouveau look and feel tableau
This commit is contained in:
Kara Diaby 2024-12-16 15:44:33 +00:00 committed by GitHub
commit a6f39b3ad1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 116 additions and 176 deletions

View file

@ -7,6 +7,10 @@
background-image: none;
}
> li {
border-top: 1px solid var(--border-default-grey);
}
.procedure-logo {
@include ie-compatible-background-image();
@ -22,11 +26,10 @@
li {
min-height: 36px;
width: 90px;
min-width: 6em;
color: var(--text-default-grey);
position: relative;
border-left: 1px solid $border-grey;
&:first-child {
border-left: none;
}
@ -35,24 +38,10 @@
background-color: rgba(0, 0, 0, 0.05);
}
.stats-number,
.stats-legend {
text-align: center;
.notifications {
top: 3px;
right: 18px;
}
.stats-number {
font-size: 14px;
font-weight: bold;
}
.stats-legend {
font-size: 12px;
}
}
.notifications {
top: 3px;
right: 18px;
}
}
}

View file

@ -36,10 +36,8 @@ module Instructeurs
@dossiers_count_per_procedure = dossiers.by_statut('tous').group('groupe_instructeurs.procedure_id').reorder(nil).count
@dossiers_a_suivre_count_per_procedure = dossiers.by_statut('a-suivre').group('groupe_instructeurs.procedure_id').reorder(nil).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_expirant_count_per_procedure = dossiers.by_statut('expirant').group('groupe_instructeurs.procedure_id').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)
@followed_dossiers_count_per_procedure = current_instructeur
@ -57,9 +55,7 @@ module Instructeurs
t('.followed') => @followed_dossiers_count_per_procedure.sum { |_, v| v },
t('.processed') => @dossiers_termines_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('.archived') => @dossiers_archived_count_per_procedure.sum { |_, v| v },
t('.dossiers_supprimes') => @dossiers_supprimes_count_per_procedure.sum { |_, v| v }
t('.dossiers_close_to_expiration') => @dossiers_expirant_count_per_procedure.sum { |_, v| v }
}
@procedure_ids_en_cours_with_notifications = current_instructeur.procedure_ids_with_notifications(:en_cours)

View file

@ -8,9 +8,13 @@ module ProcedureHelper
end
def procedure_badge(procedure)
return nil unless procedure.brouillon?
tag.span(t('helpers.procedure.testing_procedure'), class: 'fr-badge fr-badge--sm')
if procedure.close?
tag.span('Close', class: 'fr-badge')
elsif procedure.depubliee?
tag.span('Dépubliée', class: 'fr-badge')
elsif procedure.brouillon?
tag.span(t('helpers.procedure.testing_procedure'), class: 'fr-badge fr-badge--sm')
end
end
def procedure_publish_label(procedure, key)

View file

@ -7,40 +7,28 @@
.fr-container
%ul.procedure-list.fr-pl-0
- @avis_by_procedure.each do |p, procedure_avis|
%li.flex.align-start.fr-my-3w.fr-p-2w{ id: dom_id(p) }
.flex
= link_to instructeur_procedure_path(p), class: 'procedure-logo-link' do
.procedure-logo{ style: "background-image: url(#{p.logo_url})" }
%li.list-style-type-none.fr-mb-3w{ id: dom_id(p) }
.procedure-details
.clipboard-container
.fr-mb-2w.fr-mt-2w
= badge = procedure_badge(p)
%h3{ class: class_names('font-weight-normal fr-link' => true, 'fr-ml-1v' => badge.present?) }
= link_to "#{p.libelle} - n°#{p.id}", instructeur_procedure_path(p)
.procedure-details
%p.fr-mb-2w
= procedure_badge(p)
= link_to(p.libelle, procedure_expert_avis_index_path(p), class: "fr-link fr-ml-1w")
%ul.procedure-stats.flex
%li.avis-a-donner
%object
= link_to(procedure_expert_avis_index_path(p, statut: Instructeurs::AvisController::A_DONNER_STATUS)) do
- without_answer_count = procedure_avis.select { _1.answer.nil? }.reject{ _1.dossier.termine?}.size
- if without_answer_count > 0
%span.notifications{ 'aria-label': "notifications" }
.stats-number
= without_answer_count
.stats-legend
avis à donner
%li.avis-donne
%object
= link_to(procedure_expert_avis_index_path(p, statut: Instructeurs::AvisController::DONNES_STATUS)) do
- with_answer_count = procedure_avis.select { |a| a.answer.present? }.size
.stats-number= with_answer_count
.stats-legend
= pluralize(with_answer_count, "avis donné")
- if p.close?
.ml-auto
%span.label
= t('helpers.procedure.close')
- elsif p.depubliee?
.ml-auto
%span.label
= t('helpers.procedure.unpublished')
%ul.procedure-stats.flex.wrap.flex-gap-1
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to(procedure_expert_avis_index_path(p, statut: Instructeurs::AvisController::A_DONNER_STATUS)) do
- without_answer_count = procedure_avis.select { _1.answer.nil? }.reject{ _1.dossier.termine?}.size
- if without_answer_count > 0
%span.notifications{ 'aria-label': "notifications" }
.center.fr-text--bold.fr-text--sm
= without_answer_count
.center.fr-text--xs
avis à donner
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to(procedure_expert_avis_index_path(p, statut: Instructeurs::AvisController::DONNES_STATUS)) do
- with_answer_count = procedure_avis.select { |a| a.answer.present? }.size
.center.fr-text--bold.fr-text--sm= with_answer_count
.center.fr-text--xs
= pluralize(with_answer_count, "avis donné")

View file

@ -1,84 +1,68 @@
%li.flex.align-start.fr-mb-5w
.flex
.procedure-logo{ style: "background-image: url(#{p.logo_url})" }
.procedure-details
.flex.clipboard-container
.fr-mb-2w
= procedure_badge(p)
%h3.font-weight-normal.fr-link.fr-ml-1w
= link_to("#{p.libelle} - n°#{p.id}", instructeur_procedure_path(p))
= render Dsfr::CopyButtonComponent.new(title: t('instructeurs.procedures.index.copy_link_button'), text: commencer_url(p.path))
%li.list-style-type-none.fr-mb-3w
%ul.procedure-stats.flex
%li
%object
= link_to(instructeur_procedure_path(p, statut: 'a-suivre')) do
- a_suivre_count = dossiers_a_suivre_count_per_procedure[p.id] || 0
.stats-number
= number_with_html_delimiter(a_suivre_count)
.stats-legend
= t('instructeurs.dossiers.labels.to_follow')
%li
%object
= link_to(instructeur_procedure_path(p, statut: 'suivis')) do
- if procedure_ids_en_cours_with_notifications.include?(p.id)
%span.notifications{ 'aria-label': "notifications" }
- followed_count = followed_dossiers_count_per_procedure[p.id] || 0
.stats-number
= number_with_html_delimiter(followed_count)
.stats-legend
= t('pluralize.followed', count: followed_count)
%li
%object
= link_to(instructeur_procedure_path(p, statut: 'traites')) do
- if procedure_ids_termines_with_notifications.include?(p.id)
%span.notifications{ 'aria-label': "notifications" }
- termines_count = dossiers_termines_count_per_procedure[p.id] || 0
.stats-number
= number_with_html_delimiter(termines_count)
.stats-legend
= t('pluralize.processed', count: termines_count)
%li
%object
= link_to(instructeur_procedure_path(p, statut: 'tous')) do
- dossier_count = dossiers_count_per_procedure[p.id] || 0
.stats-number
= number_with_html_delimiter(dossier_count)
.stats-legend
= t('pluralize.case', count: dossier_count)
.procedure-details
.clipboard-container
.fr-mb-2w.fr-mt-2w
= badge = procedure_badge(p)
%h3{ class: class_names('font-weight-normal fr-link' => true, 'fr-ml-1v' => badge.present?) }
= link_to "#{p.libelle} - n°#{p.id}", instructeur_procedure_path(p)
%li
%object
= link_to(instructeur_procedure_path(p, statut: 'supprimes')) do
- dossier_count = dossiers_supprimes_count_per_procedure[p.id] || 0
.stats-number
= number_with_html_delimiter(dossier_count)
.stats-legend
= t('pluralize.dossiers_supprimes', count: dossier_count)
= render Dsfr::CopyButtonComponent.new(title: t('instructeurs.procedures.index.copy_link_button'), text: commencer_url(p.path))
- if p.procedure_expires_when_termine_enabled
%li
%object
= link_to(instructeur_procedure_path(p, statut: 'expirant')) do
- expirant_count = dossiers_expirant_count_per_procedure[p.id] || 0
.stats-number
= number_with_html_delimiter(expirant_count)
.stats-legend
= t('pluralize.dossiers_close_to_expiration', count: expirant_count)
%ul.procedure-stats.flex.wrap.flex-gap-1
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to instructeur_procedure_path(p, statut: 'a-suivre') do
- a_suivre_count = dossiers_a_suivre_count_per_procedure[p.id] || 0
.center.fr-text--bold.fr-text--sm
= number_with_html_delimiter(a_suivre_count)
.center.fr-text--xs
= t('instructeurs.dossiers.labels.to_follow')
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to(instructeur_procedure_path(p, statut: 'suivis')) do
- if procedure_ids_en_cours_with_notifications.include?(p.id)
%span.notifications{ 'aria-label': "notifications" }
- followed_count = followed_dossiers_count_per_procedure[p.id] || 0
.center.fr-text--bold.fr-text--sm
= number_with_html_delimiter(followed_count)
.center.fr-text--xs
= t('pluralize.followed', count: followed_count)
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to(instructeur_procedure_path(p, statut: 'traites')) do
- if procedure_ids_termines_with_notifications.include?(p.id)
%span.notifications{ 'aria-label': "notifications" }
- termines_count = dossiers_termines_count_per_procedure[p.id] || 0
.center.fr-text--bold.fr-text--sm
= number_with_html_delimiter(termines_count)
.center.fr-text--xs
= t('pluralize.processed', count: termines_count)
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to(instructeur_procedure_path(p, statut: 'tous')) do
- dossier_count = dossiers_count_per_procedure[p.id] || 0
.center.fr-text--bold.fr-text--sm
= number_with_html_delimiter(dossier_count)
.center.fr-text--xs
= t('pluralize.case', count: dossier_count)
%li
%object
= link_to(instructeur_procedure_path(p, statut: 'archives')) do
- archived_count = dossiers_archived_count_per_procedure[p.id] || 0
.stats-number
= number_with_html_delimiter(archived_count)
.stats-legend
= t('pluralize.archived', count: archived_count)
- if p.procedure_expires_when_termine_enabled
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to(instructeur_procedure_path(p, statut: 'expirant')) do
- expirant_count = dossiers_expirant_count_per_procedure[p.id] || 0
.center.fr-text--bold.fr-text--sm
= number_with_html_delimiter(expirant_count)
.center.fr-text--xs
= t('pluralize.dossiers_close_to_expiration', count: expirant_count)
- if p.close?
.ml-auto
%span.fr-badge Close
- elsif p.depubliee?
.ml-auto
%span.fr-badge Dépubliée
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to(instructeur_procedure_path(p, statut: 'archives')) do
.center.fr-text--bold.fr-text--sm
%span.fr-icon-folder-2-line
.center.fr-text--xs
= t('instructeurs.dossiers.labels.to_archive')
%li.fr-btn.fr-btn--tertiary.flex.justify-center.fr-enlarge-link.fr-mb-1w
= link_to(instructeur_procedure_path(p, statut: 'supprimes')) do
.center.fr-text--bold.fr-text--sm
%span.fr-icon-delete-line
.center.fr-text--xs
= t('instructeurs.dossiers.labels.dossiers_supprimes')

View file

@ -41,10 +41,8 @@
as: :p,
locals: { dossiers_count_per_procedure: @dossiers_count_per_procedure,
dossiers_a_suivre_count_per_procedure: @dossiers_a_suivre_count_per_procedure,
dossiers_archived_count_per_procedure: @dossiers_archived_count_per_procedure,
dossiers_termines_count_per_procedure: @dossiers_termines_count_per_procedure,
dossiers_expirant_count_per_procedure: @dossiers_expirant_count_per_procedure,
dossiers_supprimes_count_per_procedure: @dossiers_supprimes_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_termines_with_notifications: @procedure_ids_termines_with_notifications }

View file

@ -59,8 +59,6 @@ en:
helpers:
procedure:
testing_procedure: testing procedure
close: Closed
unpublished: Unpublished
commentaire:
send_message_to_instructeur: "Send a message to the instructor"
reply_in_mailbox: "Reply in mailbox"
@ -772,12 +770,8 @@ en:
new:
one: new
other: new
followed:
one: followed
other: followed
archived:
one: archived
other: archived
followed: followed by me
archived: to archive
en_cours:
one: in progress
other: in progress
@ -791,8 +785,8 @@ en:
one: guest file
other: guest files
dossiers_supprimes:
one: recently deleted file
other: recently deleted files
one: deleted
other: deleted
dossiers_transferes:
one: transfer request
other: transfer requests
@ -878,6 +872,8 @@ en:
restore: "The folder has been restored"
labels:
to_follow: to follow
to_archive: to archive
dossiers_supprimes: trash
france_connect:
particulier:
choose_email:

View file

@ -50,8 +50,6 @@ fr:
helpers:
procedure:
testing_procedure: démarche en test
close: Close
unpublished: Dépubliée
commentaire:
send_message_to_instructeur: "Envoyer un message à linstructeur"
reply_in_mailbox: "Répondre dans la messagerie"
@ -781,11 +779,9 @@ fr:
one: nouveau
other: nouveaux
followed:
one: suivi
other: suivis
archived:
one: archivé
other: archivés
one: suivi par moi
other: suivis par moi
archived: à archiver
en_cours:
one: en cours
other: en cours
@ -799,7 +795,7 @@ fr:
one: dossier invité
other: dossiers invités
dossiers_supprimes:
one: supprimé
one: supprimé
other: supprimés
dossiers_historique:
one: supprimé définitivement
@ -879,6 +875,8 @@ fr:
other: "%{count} groupes existent"
labels:
to_follow: à suivre
to_archive: à archiver
dossiers_supprimes: corbeille
total: dossiers
administrateurs:
activate:

View file

@ -9,9 +9,7 @@ en:
followed: followed
processed: processed
all: files
archived: archived
dossiers_close_to_expiration: expiring
dossiers_supprimes: recently deleted
copy_link_button: Copy the procedure link to clipboard
show:
file_tracking: File tracking

View file

@ -9,9 +9,7 @@ fr:
followed: suivis
processed: traités
all: dossiers
archived: archivés
dossiers_close_to_expiration: expirant
dossiers_supprimes: supprimés
copy_link_button: Copier le lien de la démarche dans le presse-papiers
show:
file_tracking: Suivi des dossiers

View file

@ -92,7 +92,6 @@ describe Instructeurs::ProceduresController, type: :controller do
it { expect(assigns(:dossiers_count_per_procedure)[procedure.id]).to eq(nil) }
it { expect(assigns(:dossiers_a_suivre_count_per_procedure)[procedure.id]).to eq(nil) }
it { expect(assigns(:dossiers_archived_count_per_procedure)[procedure.id]).to eq(nil) }
it { expect(assigns(:followed_dossiers_count_per_procedure)[procedure.id]).to eq(nil) }
it { expect(assigns(:dossiers_termines_count_per_procedure)[procedure.id]).to eq(nil) }
it { expect(assigns(:dossiers_expirant_count_per_procedure)[procedure.id]).to eq(nil) }
@ -101,7 +100,6 @@ describe Instructeurs::ProceduresController, type: :controller do
it { expect(assigns(:all_dossiers_counts)['suivis']).to eq(0) }
it { expect(assigns(:all_dossiers_counts)['traités']).to eq(0) }
it { expect(assigns(:all_dossiers_counts)['dossiers']).to eq(0) }
it { expect(assigns(:all_dossiers_counts)['archivés']).to eq(0) }
it { expect(assigns(:all_dossiers_counts)['expirant']).to eq(0) }
end
@ -149,14 +147,12 @@ describe Instructeurs::ProceduresController, type: :controller do
it { expect(assigns(:dossiers_count_per_procedure)[procedure.id]).to eq(5) }
it { expect(assigns(:dossiers_a_suivre_count_per_procedure)[procedure.id]).to eq(3) }
it { expect(assigns(:followed_dossiers_count_per_procedure)[procedure.id]).to eq(nil) }
it { expect(assigns(:dossiers_archived_count_per_procedure)[procedure.id]).to eq(1) }
it { expect(assigns(:dossiers_termines_count_per_procedure)[procedure.id]).to eq(2) }
it { expect(assigns(:dossiers_expirant_count_per_procedure)[procedure.id]).to eq(2) }
it { expect(assigns(:dossiers_count_per_procedure)[procedure2.id]).to eq(3) }
it { expect(assigns(:dossiers_a_suivre_count_per_procedure)[procedure2.id]).to eq(nil) }
it { expect(assigns(:followed_dossiers_count_per_procedure)[procedure2.id]).to eq(1) }
it { expect(assigns(:dossiers_archived_count_per_procedure)[procedure2.id]).to eq(nil) }
it { expect(assigns(:dossiers_termines_count_per_procedure)[procedure2.id]).to eq(1) }
it { expect(assigns(:dossiers_count_per_procedure)[procedure3.id]).to eq(2) }
@ -165,7 +161,6 @@ describe Instructeurs::ProceduresController, type: :controller do
it { expect(assigns(:all_dossiers_counts)['suivis']).to eq(0 + 1) }
it { expect(assigns(:all_dossiers_counts)['traités']).to eq(2 + 1 + 1 + 1) }
it { expect(assigns(:all_dossiers_counts)['dossiers']).to eq(5 + 3 + 2 + 1) }
it { expect(assigns(:all_dossiers_counts)['archivés']).to eq(1 + 0) }
it { expect(assigns(:all_dossiers_counts)['expirant']).to eq(2 + 0) }
it { expect(assigns(:procedures_en_cours)).to match_array([procedure2, procedure, procedure3]) }
@ -223,13 +218,11 @@ describe Instructeurs::ProceduresController, type: :controller do
it { expect(assigns(:followed_dossiers_count_per_procedure)[procedure.id]).to eq(6) }
it { expect(assigns(:dossiers_termines_count_per_procedure)[procedure.id]).to eq(10) }
it { expect(assigns(:dossiers_count_per_procedure)[procedure.id]).to eq(4 + 6 + 10) }
it { expect(assigns(:dossiers_archived_count_per_procedure)[procedure.id]).to eq(14) }
it { expect(assigns(:all_dossiers_counts)['à suivre']).to eq(4) }
it { expect(assigns(:all_dossiers_counts)['suivis']).to eq(6) }
it { expect(assigns(:all_dossiers_counts)['traités']).to eq(10) }
it { expect(assigns(:all_dossiers_counts)['dossiers']).to eq(4 + 6 + 10) }
it { expect(assigns(:all_dossiers_counts)['archivés']).to eq(14) }
end
context 'when an instructeur only belongs to one of them gi' do
@ -244,13 +237,11 @@ describe Instructeurs::ProceduresController, type: :controller do
it { expect(assigns(:followed_dossiers_count_per_procedure)[procedure.id]).to eq(3) }
it { expect(assigns(:dossiers_termines_count_per_procedure)[procedure.id]).to eq(5) }
it { expect(assigns(:dossiers_count_per_procedure)[procedure.id]).to eq(2 + 3 + 5) }
it { expect(assigns(:dossiers_archived_count_per_procedure)[procedure.id]).to eq(7) }
it { expect(assigns(:all_dossiers_counts)['à suivre']).to eq(2) }
it { expect(assigns(:all_dossiers_counts)['suivis']).to eq(3) }
it { expect(assigns(:all_dossiers_counts)['traités']).to eq(5) }
it { expect(assigns(:all_dossiers_counts)['dossiers']).to eq(2 + 3 + 5) }
it { expect(assigns(:all_dossiers_counts)['archivés']).to eq(7) }
end
end
end

View file

@ -337,7 +337,7 @@ describe 'Instructing a dossier:', js: true do
"#{suivi} suivi",
"#{traite} traité",
"#{tous_les_dossiers} au total",
"#{archive} archivé"
"à archiver"
]
texts.each { |text| expect(page).to have_text(text) }

View file

@ -25,7 +25,7 @@ describe 'experts/avis/index', type: :view do
end
it 'doesnt count avis a donner when dossier is termine' do
expect(subject).to have_selector("##{dom_id(procedure)} .avis-a-donner .stats-number", text: 0)
expect(subject).to have_selector("##{dom_id(procedure)}", text: 0)
end
end