39 lines
1.2 KiB
Ruby
39 lines
1.2 KiB
Ruby
module MemberFilter
|
|
extend ActiveSupport::Concern
|
|
|
|
def filtered_members
|
|
members = Member.all.order(sort_params.merge(number: :asc))
|
|
|
|
filters = params.permit(:prefers_postal, :display_name, :email, :identification_number, status: [], category: [])
|
|
|
|
Rails.logger.info filters
|
|
|
|
status = filters.fetch(:status, []) - ['any', '']
|
|
category = filters.fetch(:category, []) - ['any', '']
|
|
|
|
members = members.where(prefers_postal: true) if filters[:prefers_postal] == 'yes'
|
|
members = members.where(prefers_postal: false) if filters[:prefers_postal] == 'no'
|
|
members = members.where(status: status) if status != []
|
|
members = members.where(category: category) if category != []
|
|
|
|
members.ransack(
|
|
display_name_i_cont: filters[:display_name],
|
|
email_i_cont: filters[:email],
|
|
identification_number_i_cont: filters[:identification_number],
|
|
).result
|
|
end
|
|
|
|
def sort_params
|
|
field, direction = params.fetch(:sort, "").split(".")
|
|
|
|
directions = %w[ asc desc ]
|
|
fields = %w[ number expires_on joined_on email status display_name ]
|
|
|
|
if directions.include?(direction) && fields.include?(field)
|
|
{ field => direction }
|
|
else
|
|
{ number: :asc }
|
|
end
|
|
end
|
|
end
|