From 38a91f3d8f570eb26044f70d2cd44452ccb41175 Mon Sep 17 00:00:00 2001 From: Kat Date: Tue, 7 May 2024 15:59:34 +0100 Subject: [PATCH] Refactor --- .../lettings_logs_filters_controller.rb | 6 +- app/helpers/filters_helper.rb | 55 +++++++++++++++++-- app/models/forms/filter_form.rb | 2 +- app/services/filter_manager.rb | 2 +- app/views/filters/_checkbox_filter.html.erb | 1 - app/views/filters/_radio_filter.html.erb | 1 - app/views/filters/_select_filter.html.erb | 1 - 7 files changed, 56 insertions(+), 12 deletions(-) diff --git a/app/controllers/lettings_logs_filters_controller.rb b/app/controllers/lettings_logs_filters_controller.rb index a18b9602c..dd9247271 100644 --- a/app/controllers/lettings_logs_filters_controller.rb +++ b/app/controllers/lettings_logs_filters_controller.rb @@ -30,12 +30,16 @@ end private def filter_form_params - filter_params = params.permit(years: [], status: [], needstypes: [], assigned_to: [], owned_by: [], managed_by: []) + filter_params = params.permit(:years, :status, :needstypes, :assigned_to, :user, :owning_organisation_select, :owning_organisation, :managing_organisation_select, :managing_organisation) filter_params[:years] = session_filters["years"] if filter_params[:years].blank? filter_params end def session_filters + params["forms_filter_form"].each do |key, value| + params[key] = value + end + params["years"] = [params["years"]] if params["years"].present? filter_manager.session_filters end diff --git a/app/helpers/filters_helper.rb b/app/helpers/filters_helper.rb index a516caf21..38a4ec935 100644 --- a/app/helpers/filters_helper.rb +++ b/app/helpers/filters_helper.rb @@ -167,12 +167,12 @@ module FiltersHelper def check_your_answers_lettings_filters_list(session_filters) [ - { label: "Collection year", value: session_filters["years"]&.to_sentence, path: filters_years_lettings_logs_path }, - { label: "Status", value: session_filters["status"]&.to_sentence, path: filters_status_lettings_logs_path }, - { label: "Needs type", value: session_filters["needstypes"]&.to_sentence, path: filters_needstype_lettings_logs_path }, - { label: "Assigned to", value: session_filters["assigned_to"]&.to_s, path: filters_assigned_to_lettings_logs_path }, - { label: "Owned by", value: session_filters["owning_organisation"]&.to_s, path: filters_owned_by_lettings_logs_path }, - { label: "Managed by", value: session_filters["managing_organisation"]&.to_s, path: filters_managed_by_lettings_logs_path }, + { label: "Collection year", value: formatted_years_filter(session_filters), path: filters_years_lettings_logs_path }, + { label: "Status", value: formatted_status_filter(session_filters), path: filters_status_lettings_logs_path }, + { label: "Needs type", value: formatted_needstype_filter(session_filters), path: filters_needstype_lettings_logs_path }, + { label: "Assigned to", value: formatted_assigned_to_filter(session_filters), path: filters_assigned_to_lettings_logs_path }, + { label: "Owned by", value: formatted_owned_by_filter(session_filters), path: filters_owned_by_lettings_logs_path }, + { label: "Managed by", value: formatted_managed_by_filter(session_filters), path: filters_managed_by_lettings_logs_path }, ] end @@ -203,4 +203,47 @@ private def year_combo(year) "#{year}/#{year - 2000 + 1}" end + + def formatted_years_filter(session_filters) + return unanswered_value if session_filters["years"].blank? + + session_filters["years"].map { |year| year_combo(year.to_i) }.to_sentence + end + + def formatted_status_filter(session_filters) + return unanswered_value if session_filters["status"].blank? + + session_filters["status"].map { |status| status_filters[status] }.to_sentence + end + + def formatted_needstype_filter(session_filters) + return unanswered_value if session_filters["needstypes"].blank? + + session_filters["needstypes"].map { |needstype| needstype_filters[needstype] }.to_sentence + end + + def formatted_assigned_to_filter(session_filters) + return unanswered_value if session_filters["assigned_to"].blank? + return "All" if session_filters["assigned_to"].include?("all") + return "You" if session_filters["assigned_to"].include?("you") + + user = User.find(session_filters["user"].first) + "#{user.name} (#{user.email})" + end + + def formatted_owned_by_filter(session_filters) + return "All" if session_filters["owning_organisation"].blank? || session_filters["owning_organisation"]&.include?("all") + + Organisation.find(session_filters["owning_organisation"].first)&.name + end + + def formatted_managed_by_filter(session_filters) + return "All" if session_filters["managing_organisation"].blank? || session_filters["managing_organisation"].include?("all") + + Organisation.find(session_filters["managing_organisation"].first)&.name + end + + def unanswered_value + "You didn’t answer this question".html_safe + end end diff --git a/app/models/forms/filter_form.rb b/app/models/forms/filter_form.rb index b9d649c04..6d624ac31 100644 --- a/app/models/forms/filter_form.rb +++ b/app/models/forms/filter_form.rb @@ -3,7 +3,7 @@ module Forms include ActiveModel::Model include ActiveModel::Validations - attr_accessor :years, :status, :needstypes, :assigned_to, :owned_by, :managed_by + attr_accessor :years, :status, :needstypes, :assigned_to, :user, :owning_organisation_select, :owning_organisation, :managing_organisation_select, :managing_organisation validates :years, presence: true end diff --git a/app/services/filter_manager.rb b/app/services/filter_manager.rb index bb0ea5f86..8d661b3fa 100644 --- a/app/services/filter_manager.rb +++ b/app/services/filter_manager.rb @@ -84,7 +84,7 @@ class FilterManager def deserialize_filters_from_session(specific_org) current_filters = session[session_name_for(filter_type)] new_filters = if current_filters.present? - JSON.parse(current_filters).transform_values { |value| value.is_a?(Array) ? value.reject(&:empty?) : value } + JSON.parse(current_filters).transform_values { |value| value.is_a?(Array) ? value.reject(&:blank?) : value } else {} end diff --git a/app/views/filters/_checkbox_filter.html.erb b/app/views/filters/_checkbox_filter.html.erb index c862875ef..d08c42a77 100644 --- a/app/views/filters/_checkbox_filter.html.erb +++ b/app/views/filters/_checkbox_filter.html.erb @@ -2,7 +2,6 @@ <% options.map do |key, option| %> <%= f.govuk_check_box category, key.to_s, label: { text: option }, - name: "#{category}[]", checked: filter_selected?(category, key, @filter_type), size: "s" %> <% end %> diff --git a/app/views/filters/_radio_filter.html.erb b/app/views/filters/_radio_filter.html.erb index 6e3671fb2..d1a567ff5 100644 --- a/app/views/filters/_radio_filter.html.erb +++ b/app/views/filters/_radio_filter.html.erb @@ -3,7 +3,6 @@ <%= f.govuk_radio_button category, key.to_s, label: { text: option[:label] }, checked: filter_selected?(category, key, @filter_type), - name: "#{category}[]", size: "s" do %> <% if option[:conditional_filter] %> <%= render partial: "filters/#{option[:conditional_filter][:type]}_filter", locals: { diff --git a/app/views/filters/_select_filter.html.erb b/app/views/filters/_select_filter.html.erb index 9e85bbf9b..e31326347 100644 --- a/app/views/filters/_select_filter.html.erb +++ b/app/views/filters/_select_filter.html.erb @@ -1,6 +1,5 @@ <%= f.govuk_select(category.to_sym, label: { text: label, hidden: secondary }, - name: "#{category}[]", "data-controller": "accessible-autocomplete conditional-filter") do %> <% collection.each do |answer| %>