diff --git a/app/components/dossiers/user_filter_component/user_filter_component.html.haml b/app/components/dossiers/user_filter_component/user_filter_component.html.haml index 48c5b8e45..a1be394b4 100644 --- a/app/components/dossiers/user_filter_component/user_filter_component.html.haml +++ b/app/components/dossiers/user_filter_component/user_filter_component.html.haml @@ -11,6 +11,11 @@ = b.check_box(checked: filter.states_filtered?(b.value)) = b.label(class: 'fr-label') { t b.text, scope: 'activerecord.attributes.procedure.aasm_state' } + .fr-col-12.fr-col-md-3 + .fr-input-group + = f.label 'from_created_at_date', 'Dossier créé depuis le', class: 'fr-label' + = f.date_field 'from_created_at_date', value: @filter.from_created_at_date, class: 'fr-input' + .fr-mb-2w = f.submit 'Appliquer les filtres', class: 'fr-btn fr-btn--sm' = link_to 'Réinitialiser les filtres', dossiers_path(statut: @statut), class: 'fr-btn fr-btn--sm fr-btn--tertiary-no-outline' diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index 071a72819..72a4b0567 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -51,14 +51,17 @@ module Users @first_brouillon_recently_updated = current_user.dossiers.visible_by_user.brouillons_recently_updated.first @filter = DossiersFilter.new(current_user, params) - if params[:states] - @dossiers_result = filter_procedures(@filter, current_user.dossiers.visible_by_user) + if @filter.filter_params.present? + @dossiers_result = filter_procedures(@filter, @dossiers) @dossiers = @dossiers_result.page(page) end end def filter_procedures(filter, dossiers) - dossiers.where(state: filter.states) if filter.states.present? + dossiers_result = dossiers + dossiers_result = dossiers_result.where(state: filter.states) if filter.states.present? + dossiers_result = dossiers_result.where('created_at >= ?', filter.from_created_at_date) if filter.from_created_at_date.present? + dossiers_result end def show diff --git a/app/models/dossiers_filter.rb b/app/models/dossiers_filter.rb index 1885cadb8..32b30f114 100644 --- a/app/models/dossiers_filter.rb +++ b/app/models/dossiers_filter.rb @@ -5,7 +5,11 @@ class DossiersFilter def initialize(user, params) @user = user - @params = params.permit(:page, :from_publication_date, states: []) + @params = params.permit(:page, :from_created_at_date, states: []) + end + + def filter_params + params[:from_created_at_date].presence || params[:states].presence end def states @@ -15,4 +19,12 @@ class DossiersFilter def states_filtered?(state) states&.include?(state) end + + def from_created_at_date + return if params[:from_created_at_date].blank? + + Date.parse(params[:from_created_at_date]) + rescue Date::Error + nil + end end diff --git a/spec/system/users/list_dossiers_spec.rb b/spec/system/users/list_dossiers_spec.rb index d0b27c5c9..52a702e0a 100644 --- a/spec/system/users/list_dossiers_spec.rb +++ b/spec/system/users/list_dossiers_spec.rb @@ -57,7 +57,7 @@ describe 'user access to the list of their dossiers', js: true do end context 'when user uses filter' do - scenario 'user filter by brouillon state on tab "en-cours"' do + scenario 'user filters by brouillon state on tab "en-cours"' do expect(page).to have_text('4 en cours') expect(page).to have_text('2 traités') expect(page).to have_text('4 sur 4 dossiers') @@ -67,7 +67,7 @@ describe 'user access to the list of their dossiers', js: true do expect(page).to have_checked_field('Brouillon') end - scenario 'user filter by brouillon state on tab "traité"' do + scenario 'user filters by brouillon state on tab "traité"' do visit dossiers_path(statut: 'traites') expect(page).to have_text('4 en cours') expect(page).to have_text('2 traités') @@ -80,6 +80,29 @@ describe 'user access to the list of their dossiers', js: true do expect(page).to have_text('2 sur 2 dossiers') expect(page).to have_unchecked_field('Refuse') end + + scenario 'user filters by created_at' do + dossier_en_construction.update!(created_at: Date.yesterday) + + expect(page).to have_text('4 sur 4 dossiers') + fill_in 'from_created_at_date', with: Date.today + click_on('Appliquer les filtres') + expect(page).to have_text('3 sur 3 dossiers') + end + + scenario 'user filters by states and created at' do + dossier_en_construction.update!(created_at: Date.yesterday) + + expect(page).to have_text('4 sur 4 dossiers') + fill_in 'from_created_at_date', with: Date.today + click_on('Appliquer les filtres') + expect(page).to have_text('3 sur 3 dossiers') + + find("label", text: "En Construction").click + find("label", text: "En Instruction").click + click_on('Appliquer les filtres') + expect(page).to have_text('2 sur 2 dossiers') + end end context 'when user clicks on a projet in list' do