diff --git a/app/helpers/filters_helper.rb b/app/helpers/filters_helper.rb index 57a3cabc3..3f82ab5d0 100644 --- a/app/helpers/filters_helper.rb +++ b/app/helpers/filters_helper.rb @@ -52,6 +52,22 @@ module FiltersHelper }.freeze end + def user_role_type_filters(include_support = false) + roles = { + "1" => "Data provider", + "2" => "Coordinator", + } + roles["99"] = "Support" if include_support + roles.freeze + end + + def user_additional_responsibilities_filters + { + "data_protection_officer" => "Data protection officer", + "key_contact" => "Key contact", + }.freeze + end + def scheme_status_filters { "incomplete" => "Incomplete", @@ -306,7 +322,7 @@ private def filters_count(filters) filters.each.sum do |category, category_filters| - if %w[years status needstypes bulk_upload_id].include?(category) + if %w[years status needstypes bulk_upload_id role additional_responsibilities].include?(category) category_filters.count(&:present?) elsif %w[user owning_organisation managing_organisation user_text_search owning_organisation_text_search managing_organisation_text_search uploading_organisation].include?(category) 1 diff --git a/app/models/user.rb b/app/models/user.rb index b504db9bc..1db93ee71 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -81,6 +81,29 @@ class User < ApplicationRecord filtered_records } + scope :filter_by_role, ->(role, _user = nil) { where(role:) } + scope :filter_by_additional_responsibilities, lambda { |additional_responsibilities, _user| + filtered_records = all + scopes = [] + + additional_responsibilities.each do |responsibility| + case responsibility + when "key_contact" + scopes << send("is_key_contact") + when "data_protection_officer" + scopes << send("is_data_protection_officer") + end + end + + if scopes.any? + filtered_records = filtered_records.merge(scopes.reduce(&:or)) + end + + filtered_records + } + + scope :is_key_contact, -> { where(is_key_contact: true) } + scope :is_data_protection_officer, -> { where(is_dpo: true) } scope :not_signed_in, -> { where(last_sign_in_at: nil, active: true) } scope :deactivated, -> { where(active: false) } scope :activated, -> { where(active: true) } diff --git a/app/services/filter_manager.rb b/app/services/filter_manager.rb index 7757ad39e..a611238bf 100644 --- a/app/services/filter_manager.rb +++ b/app/services/filter_manager.rb @@ -130,6 +130,14 @@ class FilterManager new_filters["status"] = params["status"] end + if filter_type.include?("users") && params["role"].present? + new_filters["role"] = params["role"] + end + + if filter_type.include?("users") && params["additional_responsibilities"].present? + new_filters["additional_responsibilities"] = params["additional_responsibilities"] + end + if filter_type.include?("schemes") current_user.scheme_filters(specific_org:).each do |filter| new_filters[filter] = params[filter] if params[filter].present? diff --git a/app/views/users/_user_filters.html.erb b/app/views/users/_user_filters.html.erb index aa9185c8d..03e686bf4 100644 --- a/app/views/users/_user_filters.html.erb +++ b/app/views/users/_user_filters.html.erb @@ -17,12 +17,30 @@ <%= render partial: "filters/checkbox_filter", locals: { - f:, - options: user_status_filters, - label: "Status", - category: "status", - size: "s", - } %> + f:, + options: user_status_filters, + label: "Status", + category: "status", + size: "s", + } %> + + <%= render partial: "filters/checkbox_filter", + locals: { + f:, + options: user_role_type_filters(current_user.support?), + label: "Role type", + category: "role", + size: "s", + } %> + + <%= render partial: "filters/checkbox_filter", + locals: { + f:, + options: user_additional_responsibilities_filters, + label: "Additional responsibilities", + category: "additional_responsibilities", + size: "s", + } %> <% if request.params["search"].present? %> <%= f.hidden_field :search, value: request.params["search"] %>