Browse Source

Extract filter methods into a helper

pull/557/head
Kat 3 years ago
parent
commit
72ec0272de
  1. 28
      app/controllers/case_logs_controller.rb
  2. 23
      app/controllers/helpers/filter.rb

28
app/controllers/case_logs_controller.rb

@ -1,5 +1,6 @@
class CaseLogsController < ApplicationController class CaseLogsController < ApplicationController
include Pagy::Backend include Pagy::Backend
include Helpers::Filter
skip_before_action :verify_authenticity_token, if: :json_api_request? skip_before_action :verify_authenticity_token, if: :json_api_request?
before_action :authenticate, if: :json_api_request? before_action :authenticate, if: :json_api_request?
@ -9,12 +10,12 @@ class CaseLogsController < ApplicationController
def index def index
set_session_filters 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| respond_to do |format|
format.html format.html
format.csv do 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 end
end end
@ -120,27 +121,4 @@ private
def find_resource def find_resource
@case_log = CaseLog.find_by(id: params[:id]) @case_log = CaseLog.find_by(id: params[:id])
end 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 end

23
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
Loading…
Cancel
Save