diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index 417a70e63..ef7f079a9 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -94,7 +94,7 @@ class LettingsLogsController < LogsController def email_csv all_orgs = params["organisation_select"] == "all" - EmailCsvJob.perform_later(current_user, search_term, @session_filters, all_orgs, nil, codes_only_export?) + EmailCsvJob.perform_later(current_user, search_term, session_filters, all_orgs, nil, codes_only_export?) redirect_to csv_confirmation_lettings_logs_path end diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb index fc691444f..c1361ac2d 100644 --- a/app/controllers/organisations_controller.rb +++ b/app/controllers/organisations_controller.rb @@ -5,7 +5,7 @@ class OrganisationsController < ApplicationController before_action :authenticate_user! before_action :find_resource, except: %i[index new create] before_action :authenticate_scope!, except: [:index] - before_action -> { session_filters(specific_org: true) }, if: -> { current_user.support? || current_user.organisation.has_managing_agents? }, only: %i[lettings_logs sales_logs email_lettings_csv download_lettings_csv email_sales_csv download_sales_csv] + before_action :session_filters, if: -> { current_user.support? || current_user.organisation.has_managing_agents? }, only: %i[lettings_logs sales_logs email_lettings_csv download_lettings_csv email_sales_csv download_sales_csv] before_action :set_session_filters, if: -> { current_user.support? || current_user.organisation.has_managing_agents? }, only: %i[lettings_logs sales_logs email_lettings_csv download_lettings_csv email_sales_csv download_sales_csv] def index @@ -90,7 +90,7 @@ class OrganisationsController < ApplicationController def lettings_logs organisation_logs = LettingsLog.visible.where(owning_organisation_id: @organisation.id) - unpaginated_filtered_logs = filtered_logs(organisation_logs, search_term, @session_filters) + unpaginated_filtered_logs = filter_manager.filtered_logs(organisation_logs, search_term, session_filters) respond_to do |format| format.html do @@ -99,6 +99,7 @@ class OrganisationsController < ApplicationController @searched = search_term.presence @total_count = organisation_logs.size @log_type = :lettings + @filter_type = "lettings_logs" render "logs", layout: "application" end end @@ -106,20 +107,20 @@ class OrganisationsController < ApplicationController def download_lettings_csv organisation_logs = LettingsLog.visible.where(owning_organisation_id: @organisation.id) - unpaginated_filtered_logs = filtered_logs(organisation_logs, search_term, @session_filters) + unpaginated_filtered_logs = filter_manager.filtered_logs(organisation_logs, search_term, session_filters) codes_only = params.require(:codes_only) == "true" render "logs/download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: lettings_logs_email_csv_organisation_path, codes_only: } end def email_lettings_csv - EmailCsvJob.perform_later(current_user, search_term, @session_filters, false, @organisation, codes_only_export?) + EmailCsvJob.perform_later(current_user, search_term, session_filters, false, @organisation, codes_only_export?) redirect_to lettings_logs_csv_confirmation_organisation_path end def sales_logs organisation_logs = SalesLog.where(owning_organisation_id: @organisation.id) - unpaginated_filtered_logs = filtered_logs(organisation_logs, search_term, @session_filters) + unpaginated_filtered_logs = filter_manager.filtered_logs(organisation_logs, search_term, session_filters) respond_to do |format| format.html do @@ -128,6 +129,7 @@ class OrganisationsController < ApplicationController @searched = search_term.presence @total_count = organisation_logs.size @log_type = :sales + @filter_type = "sales_logs" render "logs", layout: "application" end @@ -139,14 +141,14 @@ class OrganisationsController < ApplicationController def download_sales_csv organisation_logs = SalesLog.visible.where(owning_organisation_id: @organisation.id) - unpaginated_filtered_logs = filtered_logs(organisation_logs, search_term, @session_filters) + unpaginated_filtered_logs = filter_manager.filtered_logs(organisation_logs, search_term, session_filters) codes_only = params.require(:codes_only) == "true" render "logs/download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: sales_logs_email_csv_organisation_path, codes_only: } end def email_sales_csv - EmailCsvJob.perform_later(current_user, search_term, @session_filters, false, @organisation, codes_only_export?, "sales") + EmailCsvJob.perform_later(current_user, search_term, session_filters, false, @organisation, codes_only_export?, "sales") redirect_to sales_logs_csv_confirmation_organisation_path end @@ -156,6 +158,18 @@ class OrganisationsController < ApplicationController private + def set_session_filters + filter_manager.serialize_filters_to_session("#{params[:action]}", specific_org: true) + end + + def session_filters + filter_manager.session_filters("#{params[:action]}", specific_org: true) + end + + def filter_manager + FilterManager.new(current_user:, session:, params:) + end + def org_params params.require(:organisation).permit(:name, :address_line1, :address_line2, :postcode, :phone, :holds_own_stock, :provider_type, :housing_registration_no) end diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 2c27b40ce..d52dea9bb 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -65,7 +65,7 @@ class SalesLogsController < LogsController def email_csv all_orgs = params["organisation_select"] == "all" - EmailCsvJob.perform_later(current_user, search_term, @session_filters, all_orgs, nil, codes_only_export?, "sales") + EmailCsvJob.perform_later(current_user, search_term, session_filters, all_orgs, nil, codes_only_export?, "sales") redirect_to csv_confirmation_sales_logs_path end diff --git a/spec/controllers/lettings_logs_controller_spec.rb b/spec/controllers/lettings_logs_controller_spec.rb index 0874649e7..642d4bd89 100644 --- a/spec/controllers/lettings_logs_controller_spec.rb +++ b/spec/controllers/lettings_logs_controller_spec.rb @@ -10,7 +10,7 @@ RSpec.describe LettingsLogsController do let(:bulk_upload) { create(:bulk_upload, :sales) } it "does not redirect to resume path" do - session[:logs_filters] = { bulk_upload_id: [bulk_upload.id.to_s] }.to_json + session[:lettings_logs_filters] = { bulk_upload_id: [bulk_upload.id.to_s] }.to_json get :index diff --git a/spec/controllers/sales_logs_controller_spec.rb b/spec/controllers/sales_logs_controller_spec.rb index e8d85cb85..b7c81c79d 100644 --- a/spec/controllers/sales_logs_controller_spec.rb +++ b/spec/controllers/sales_logs_controller_spec.rb @@ -10,7 +10,7 @@ RSpec.describe SalesLogsController do describe "#index" do context "when a sales bulk upload has been resolved" do it "redirects to resume_bulk_upload_sales_result_path" do - session[:logs_filters] = { bulk_upload_id: [bulk_upload.id.to_s] }.to_json + session[:sales_logs_filters] = { bulk_upload_id: [bulk_upload.id.to_s] }.to_json get :index @@ -22,7 +22,7 @@ RSpec.describe SalesLogsController do let(:bulk_upload) { create(:bulk_upload, :lettings) } it "does not redirect to resume" do - session[:logs_filters] = { bulk_upload_id: [bulk_upload.id.to_s] }.to_json + session[:sales_logs_filters] = { bulk_upload_id: [bulk_upload.id.to_s] }.to_json get :index diff --git a/spec/helpers/filters_helper_spec.rb b/spec/helpers/filters_helper_spec.rb index 53d06e3e8..dfc6b51fb 100644 --- a/spec/helpers/filters_helper_spec.rb +++ b/spec/helpers/filters_helper_spec.rb @@ -4,80 +4,80 @@ RSpec.describe FiltersHelper do describe "#filter_selected?" do context "when no filters are selected" do it "returns false for all filters" do - expect(filter_selected?("status", "completed")).to be_falsey - expect(filter_selected?("status", "in_progress")).to be_falsey + expect(filter_selected?("status", "completed", "lettings_logs")).to be_falsey + expect(filter_selected?("status", "in_progress", "lettings_logs")).to be_falsey end end context "when the filter is the user filter but session filters is empty" do before do - session[:logs_filters] = {}.to_json + session[:lettings_logs_filters] = {}.to_json end context "when looking at the all value" do it "returns true if no filters have been set yet" do - expect(filter_selected?("user", :all)).to be true - expect(filter_selected?("user", :yours)).to be false + expect(filter_selected?("user", :all, "lettings_logs")).to be true + expect(filter_selected?("user", :yours, "lettings_logs")).to be false end end end context "when one filter is selected" do before do - session[:logs_filters] = { "status": "in_progress" }.to_json + session[:lettings_logs_filters] = { "status": "in_progress" }.to_json end it "returns false for non selected filters" do - expect(filter_selected?("status", "completed")).to be false + expect(filter_selected?("status", "completed", "lettings_logs")).to be false end it "returns true for selected filter" do - expect(filter_selected?("status", "in_progress")).to be true + expect(filter_selected?("status", "in_progress", "lettings_logs")).to be true end end context "when support user is using the organisation filter" do before do - session[:logs_filters] = { "organisation": "1" }.to_json + session[:lettings_logs_filters] = { "organisation": "1" }.to_json end it "returns true for the parent organisation_select filter" do - expect(filter_selected?("organisation_select", :specific_org)).to be true - expect(filter_selected?("organisation_select", :all)).to be false + expect(filter_selected?("organisation_select", :specific_org, "lettings_logs")).to be true + expect(filter_selected?("organisation_select", :all, "lettings_logs")).to be false end end context "when support user has not set the organisation_select filter" do before do - session[:logs_filters] = {}.to_json + session[:lettings_logs_filters] = {}.to_json end it "defaults to all organisations" do - expect(filter_selected?("organisation_select", :all)).to be true - expect(filter_selected?("organisation_select", :specific_org)).to be false + expect(filter_selected?("organisation_select", :all, "lettings_logs")).to be true + expect(filter_selected?("organisation_select", :specific_org, "lettings_logs")).to be false end end context "when the specific organisation filter is not set" do before do - session[:logs_filters] = { "status" => [""], "years" => [""], "user" => "all" }.to_json + session[:lettings_logs_filters] = { "status" => [""], "years" => [""], "user" => "all" }.to_json end it "marks the all options as checked" do - expect(filter_selected?("organisation_select", :all)).to be true - expect(filter_selected?("organisation_select", :specific_org)).to be false + expect(filter_selected?("organisation_select", :all, "lettings_logs")).to be true + expect(filter_selected?("organisation_select", :specific_org, "lettings_logs")).to be false end end end describe "#selected_option" do before do - session[:logs_filters] = {}.to_json + session[:lettings_logs_filters] = {}.to_json end context "when nothing has been selected" do it "returns an empty string" do - expect(selected_option("organisation")).to eq("") + expect(selected_option("organisation", "lettings_logs")).to eq("") end end end