Browse Source

CLDC-4029: Add filters for roles and responsibilities

CLDC-4029-add-additional-user-filters
SuperrrrrFrank 1 month ago
parent
commit
c92f35f0c4
  1. 18
      app/helpers/filters_helper.rb
  2. 23
      app/models/user.rb
  3. 8
      app/services/filter_manager.rb
  4. 30
      app/views/users/_user_filters.html.erb

18
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

23
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) }

8
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?

30
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"] %>

Loading…
Cancel
Save