Check index filters
This commit is contained in:
parent
338447763f
commit
bf52112e5c
6 changed files with 58 additions and 25 deletions
1
Gemfile
1
Gemfile
|
|
@ -59,7 +59,6 @@ gem "pandoc-ruby"
|
||||||
gem "prawn-markup"
|
gem "prawn-markup"
|
||||||
gem "prawn-rails"
|
gem "prawn-rails"
|
||||||
gem "sablon"
|
gem "sablon"
|
||||||
gem "ransack"
|
|
||||||
gem "slim"
|
gem "slim"
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
|
|
|
||||||
|
|
@ -258,10 +258,6 @@ GEM
|
||||||
zeitwerk (~> 2.6)
|
zeitwerk (~> 2.6)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
rake (13.2.1)
|
rake (13.2.1)
|
||||||
ransack (4.2.1)
|
|
||||||
activerecord (>= 6.1.5)
|
|
||||||
activesupport (>= 6.1.5)
|
|
||||||
i18n
|
|
||||||
rbs (3.5.2)
|
rbs (3.5.2)
|
||||||
logger
|
logger
|
||||||
rdoc (6.7.0)
|
rdoc (6.7.0)
|
||||||
|
|
@ -400,7 +396,6 @@ DEPENDENCIES
|
||||||
prawn-rails
|
prawn-rails
|
||||||
puma (>= 5.0)
|
puma (>= 5.0)
|
||||||
rails (~> 7.2)
|
rails (~> 7.2)
|
||||||
ransack
|
|
||||||
rubocop
|
rubocop
|
||||||
rubocop-capybara
|
rubocop-capybara
|
||||||
rubocop-rails
|
rubocop-rails
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,7 @@ class ChecksController < ApplicationController
|
||||||
|
|
||||||
# GET /checks or /checks.json
|
# GET /checks or /checks.json
|
||||||
def index
|
def index
|
||||||
@pagy, @checks = if filter_params[:s]
|
@pagy, @checks = pagy(Check.filter_by(filter_params).order(:conformity_level))
|
||||||
pagy(Check.search(filter_params[:s]).order(:conformity_level))
|
|
||||||
else
|
|
||||||
pagy(Check.all.order(:conformity_level))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# GET /checks/1 or /checks/1.json
|
# GET /checks/1 or /checks/1.json
|
||||||
|
|
@ -71,7 +67,7 @@ class ChecksController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter_params
|
def filter_params
|
||||||
@filter_params ||= params.permit(filter: %i[s level])[:filter] || {}
|
@filter_params ||= params.permit(filter: [ :s, priority: [], conformity_level: [], standard_ids: [], principle_id: [] ])[:filter] || {}
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ module LinkChecker
|
||||||
|
|
||||||
def http(input)
|
def http(input)
|
||||||
response = Net::HTTP.get_response(URI.parse(input), { 'User-Agent': UA })
|
response = Net::HTTP.get_response(URI.parse(input), { 'User-Agent': UA })
|
||||||
# debugger
|
|
||||||
case response
|
case response
|
||||||
when Net::HTTPSuccess
|
when Net::HTTPSuccess
|
||||||
response.uri
|
response.uri
|
||||||
|
|
|
||||||
|
|
@ -52,12 +52,35 @@ class Check < ApplicationRecord
|
||||||
:standard_text,
|
:standard_text,
|
||||||
:powerpoint_text
|
:powerpoint_text
|
||||||
|
|
||||||
after_create { update(number: id) }
|
after_create { update(number: id) unless number }
|
||||||
|
|
||||||
scope(:search, lambda do |term|
|
scope(:search, lambda { |term|
|
||||||
# TODO: Search only fields for current locale.
|
# TODO: Search only fields for current locale.
|
||||||
joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = checks.id AND record_type = 'Check'").where("checks.name_de LIKE :term OR checks.name_de LIKE :term OR action_text_rich_texts.body LIKE :term", term: "%#{term}%").distinct
|
joined = joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = checks.id AND record_type = 'Check'")
|
||||||
end)
|
if term.to_i > 0
|
||||||
|
joined.where("checks.name_de LIKE :term OR checks.name_de LIKE :term OR checks.number = :number OR action_text_rich_texts.body LIKE :term", term: "%#{term}%", number: term.to_i).distinct
|
||||||
|
else
|
||||||
|
joined.where("checks.name_de LIKE :term OR checks.name_de LIKE :term OR action_text_rich_texts.body LIKE :term", term: "%#{term}%").distinct
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
scope(:filter_by, lambda { |filter|
|
||||||
|
relation = where(nil)
|
||||||
|
filter.slice(:s, :principle_id, :priorities, :standard_ids, :conformity_level).each do |key, value|
|
||||||
|
next unless value.present?
|
||||||
|
|
||||||
|
case key
|
||||||
|
when "s"
|
||||||
|
relation = relation.search(value)
|
||||||
|
when "standard_ids"
|
||||||
|
relation = relation.joins(:standards).where(standards: { id: value })
|
||||||
|
else
|
||||||
|
relation = relation.where(key => value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
relation
|
||||||
|
})
|
||||||
|
|
||||||
def self.ransackable_attributes(auth_object = nil)
|
def self.ransackable_attributes(auth_object = nil)
|
||||||
[ "applicable_to_app", "applicable_to_web", "auditory", "cognitive", "conformity_level", "created_at", "external_number", "external_url", "id", "level", "manual_test", "name", "name_de", "name_en", "number", "physical", "position", "principle_id", "priority", "test_url", "updated_at", "visual" ]
|
[ "applicable_to_app", "applicable_to_web", "auditory", "cognitive", "conformity_level", "created_at", "external_number", "external_url", "id", "level", "manual_test", "name", "name_de", "name_en", "number", "physical", "position", "principle_id", "priority", "test_url", "updated_at", "visual" ]
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,35 @@ h1
|
||||||
= f.check_box :principle_id_in, checked: @q[:principle_id_in].include?(principle.id), label: principle.name_de, id: "principle_id_in_#{principle.id}"
|
= f.check_box :principle_id_in, checked: @q[:principle_id_in].include?(principle.id), label: principle.name_de, id: "principle_id_in_#{principle.id}"
|
||||||
= f.submit
|
= f.submit
|
||||||
|
|
||||||
= bootstrap_form_with(url: checks_path(page: params[:page]), method: :get, scope: :filter) do |form|
|
.card.mb-3
|
||||||
|
.card-header.d-flex data-bs-toggle="collapse" href="#filter-form" role="button" aria-expanded="#{filter_params.present?}" aria-controler="filter-form"
|
||||||
|
' Filter
|
||||||
|
.card-body.collapse id="filter-form" class="#{"show" if filter_params.present?}"
|
||||||
|
= bootstrap_form_with(url: checks_path, method: :get, scope: :filter) do |form|
|
||||||
= form.hidden_field :page, value: params[:page] if params[:page]
|
= form.hidden_field :page, value: params[:page] if params[:page]
|
||||||
.row
|
.row
|
||||||
.col-md-3
|
.col-lg-5
|
||||||
= form.text_field(:s, placeholder: "suchen...", hide_label: true, value: filter_params[:s])
|
= form.text_field(:s, placeholder: "suchen...", hide_label: true, value: filter_params[:s])
|
||||||
|
.col-lg-2
|
||||||
|
- Principle.all.sort_by(&:name_de).each do |principle|
|
||||||
|
.form-check.form-check-inline
|
||||||
|
= form.check_box :principle_id, { label: principle.t_name, multiple: true, checked: (filter_params[:principle_id] || []).include?(principle.id.to_s) }, principle.id, nil
|
||||||
|
.col-lg-2
|
||||||
|
- Standard.all.sort_by(&:name_de).each do |standard|
|
||||||
|
.form-check.form-check-inline
|
||||||
|
= form.check_box :standard_ids, { label: standard.t_name, multiple: true, checked: (filter_params[:standard_ids] || []).include?(standard.id.to_s) }, standard.id, nil
|
||||||
|
.col-lg-1
|
||||||
|
- Check.conformity_levels.each do |conformity_level, value|
|
||||||
|
.form-check.form-check-inline
|
||||||
|
= form.check_box :conformity_level, { label: conformity_level, multiple: true, checked: (filter_params[:conformity_level] || []).include?(value.to_s) }, value, nil
|
||||||
|
.col-lg-2
|
||||||
|
- Check.priorities.each do |priority, value|
|
||||||
|
.form-check.form-check-inline
|
||||||
|
= form.check_box :priority, { label: t("priority.#{priority}"), multiple: true, checked: (filter_params[:priority] || []).include?(value.to_s) }, value, nil
|
||||||
|
.row
|
||||||
.col
|
.col
|
||||||
= form.submit name: "", value: "Suchen"
|
= form.submit name: "", value: "Filtern"
|
||||||
= link_to "Filter löschen", checks_path, class: "btn btn-outline-secondary ms-3" if filter_params[:s]
|
= link_to "Filter löschen", checks_path, class: "btn btn-outline-secondary ms-3", data: { turbo_prefetch: false } if filter_params.keys.any?
|
||||||
table.table.table-striped
|
table.table.table-striped
|
||||||
thead
|
thead
|
||||||
tr
|
tr
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue