From 72ec0272deb51bd4b9491b1df90dbbb11e8711e6 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 20 May 2022 10:41:55 +0100 Subject: [PATCH] Extract filter methods into a helper --- app/controllers/case_logs_controller.rb | 28 +++---------------------- app/controllers/helpers/filter.rb | 23 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 25 deletions(-) create mode 100644 app/controllers/helpers/filter.rb diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index a80705962..2393e599a 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -1,5 +1,6 @@ class CaseLogsController < ApplicationController include Pagy::Backend + include Helpers::Filter skip_before_action :verify_authenticity_token, if: :json_api_request? before_action :authenticate, if: :json_api_request? @@ -9,12 +10,12 @@ class CaseLogsController < ApplicationController def index set_session_filters - @pagy, @case_logs = pagy(filtered_case_logs) + @pagy, @case_logs = pagy(filtered_case_logs(current_user.case_logs)) respond_to do |format| format.html format.csv do - send_data filtered_case_logs.to_csv, filename: "logs-#{Time.zone.now}.csv" + send_data filtered_case_logs(current_user.case_logs).to_csv, filename: "logs-#{Time.zone.now}.csv" end end end @@ -120,27 +121,4 @@ private def find_resource @case_log = CaseLog.find_by(id: params[:id]) end - - def filtered_case_logs - query = current_user.case_logs - if session[:case_logs_filters].present? - filters = JSON.parse(session[:case_logs_filters]) - filters.each do |category, values| - next if Array(values).reject(&:empty?).blank? - next if category == "organisation" && params["organisation_select"] == "all" - - query = query.public_send("filter_by_#{category}", values, current_user) - end - end - query = query.order(created_at: :desc) - current_user.support? ? query.all.includes(:owning_organisation, :managing_organisation) : query - end - - def set_session_filters - new_filters = session[:case_logs_filters].present? ? JSON.parse(session[:case_logs_filters]) : {} - current_user.case_logs_filters.each { |filter| new_filters[filter] = params[filter] if params[filter].present? } - new_filters = new_filters.except("organisation") if params["organisation_select"] == "all" - - session[:case_logs_filters] = new_filters.to_json - end end diff --git a/app/controllers/helpers/filter.rb b/app/controllers/helpers/filter.rb new file mode 100644 index 000000000..0a5b61cd8 --- /dev/null +++ b/app/controllers/helpers/filter.rb @@ -0,0 +1,23 @@ +module Helpers::Filter + def filtered_case_logs(logs) + if session[:case_logs_filters].present? + filters = JSON.parse(session[:case_logs_filters]) + filters.each do |category, values| + next if Array(values).reject(&:empty?).blank? + next if category == "organisation" && params["organisation_select"] == "all" + + logs = logs.public_send("filter_by_#{category}", values, current_user) + end + end + logs = logs.order(created_at: :desc) + current_user.support? ? logs.all.includes(:owning_organisation, :managing_organisation) : logs + end + + def set_session_filters + new_filters = session[:case_logs_filters].present? ? JSON.parse(session[:case_logs_filters]) : {} + current_user.case_logs_filters.each { |filter| new_filters[filter] = params[filter] if params[filter].present? } + new_filters = new_filters.except("organisation") if params["organisation_select"] == "all" + + session[:case_logs_filters] = new_filters.to_json + end +end