diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index f9d760a3a..b4b4f4851 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -121,23 +121,21 @@ private end def filtered_case_logs - user_case_logs = current_user.case_logs + query = CaseLog.for_organisation(current_user.organisation) if session[:case_logs_filters].present? filters = JSON.parse(session[:case_logs_filters]) + filters.each do |category, values| + next if values.reject(&:empty?).blank? - %w[status year].each do |category| - if filters[category] - filtered_by_category = filters[category].select(&:present?).map { |filter| user_case_logs.public_send("filter_by_#{category}", filter) }.flatten - user_case_logs = CaseLog.where(id: filtered_by_category.map(&:id)) - end + query = query.public_send("filter_by_#{category}", values) end end - user_case_logs + query.all.includes(:owning_organisation, :managing_organisation) end def set_session_filters new_filters = session[:case_logs_filters].present? ? JSON.parse(session[:case_logs_filters]) : {} - %i[status year].each { |filter| new_filters[filter] = params[filter] if params[filter].present? } + %i[status years].each { |filter| new_filters[filter] = params[filter] if params[filter].present? } session[:case_logs_filters] = new_filters.to_json end end diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 376ae410a..99ea8fdb5 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -35,7 +35,13 @@ class CaseLog < ApplicationRecord scope :for_organisation, ->(org) { where(owning_organisation: org).or(where(managing_organisation: org)) } scope :filter_by_status, ->(status) { where status: status } - scope :filter_by_year, ->(year) { where(startdate: Time.zone.local(year, 4, 1)...Time.zone.local(year.to_i + 1, 4, 1)) } + scope :filter_by_years, lambda { |years| + first_year = years.shift + query = filter_by_year(first_year) + years.each { |year| query = query.or(filter_by_year(year)) } + query.all + } + scope :filter_by_year, ->(year) { where(startdate: Time.utc(year.to_i, 4, 1)...Time.utc(year.to_i + 1, 4, 1)) } AUTOGENERATED_FIELDS = %w[id status created_at updated_at discarded_at].freeze OPTIONAL_FIELDS = %w[postcode_known la_known first_time_property_let_as_social_housing tenant_code propcode].freeze diff --git a/app/views/case_logs/_log_filters.erb b/app/views/case_logs/_log_filters.erb index fb1cb32fa..09432faa7 100644 --- a/app/views/case_logs/_log_filters.erb +++ b/app/views/case_logs/_log_filters.erb @@ -2,9 +2,9 @@