2024-09-05 22:54:38 +02:00
# frozen_string_literal: true
2024-07-16 20:22:59 +02:00
class Check < ApplicationRecord
2024-07-20 16:52:12 +02:00
include RichTextTargetBlank
2024-09-05 22:54:38 +02:00
belongs_to :principle
has_and_belongs_to_many :links
has_and_belongs_to_many :standards
accepts_nested_attributes_for :links , allow_destroy : true
enum :conformity_level , % i [ A AA AAA ]
enum :priority , % i [ highest high normal low ]
has_rich_text :conformity_notice_de
has_rich_text :conformity_notice_en
has_rich_text :quick_criterion_de
has_rich_text :quick_criterion_en
has_rich_text :quick_fail_de
has_rich_text :quick_fail_en
has_rich_text :quick_fix_de
has_rich_text :quick_fix_en
has_rich_text :criterion_de
has_rich_text :criterion_en
has_rich_text :criterion_details_de
has_rich_text :criterion_details_en
has_rich_text :example_de
has_rich_text :example_en
has_rich_text :exemption_details_de
has_rich_text :exemption_details_en
has_rich_text :standard_text_de
has_rich_text :standard_text_en
has_rich_text :test_instructions
has_rich_text :powerpoint_text_de
has_rich_text :powerpoint_text_en
has_rich_text :comment
translates_attributes :name ,
:conformity_notice ,
:quick_criterion ,
:quick_fail ,
:quick_fix ,
:criterion ,
:criterion_details ,
:example ,
:exemption_details ,
:standard_text ,
:powerpoint_text
2024-09-12 01:18:04 +02:00
validates :number , uniqueness : true , presence : true
before_validation { self . number = self . class . maximum ( :id ) . to_i + 1 unless self . number . present? }
2024-09-11 22:04:55 +02:00
2024-09-12 00:50:38 +02:00
scope ( :search , lambda { | term |
2024-09-05 22:54:38 +02:00
# TODO: Search only fields for current locale.
2024-09-12 00:50:38 +02:00
joined = joins ( " INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = checks.id AND record_type = 'Check' " )
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
} )
2024-07-19 02:29:18 +02:00
2024-09-11 22:04:55 +02:00
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 " ]
end
def self . ransackable_associations ( auth_object = nil )
[ " links " , " principle " , " rich_text_comment " , " rich_text_conformity_notice_de " , " rich_text_conformity_notice_en " , " rich_text_criterion_de " , " rich_text_criterion_details_de " , " rich_text_criterion_details_en " , " rich_text_criterion_en " , " rich_text_example_de " , " rich_text_example_en " , " rich_text_exemption_details_de " , " rich_text_exemption_details_en " , " rich_text_powerpoint_text_de " , " rich_text_powerpoint_text_en " , " rich_text_quick_criterion_de " , " rich_text_quick_criterion_en " , " rich_text_quick_fail_de " , " rich_text_quick_fail_en " , " rich_text_quick_fix_de " , " rich_text_quick_fix_en " , " rich_text_standard_text_de " , " rich_text_standard_text_en " , " rich_text_test_instructions " , " standards " ]
end
2024-09-05 22:54:38 +02:00
def display_target_disabilities
2024-09-11 22:04:55 +02:00
% i [ visual auditory physical cognitive ] . select { | d | send ( :" #{ d } ? " ) } . map { | d | I18n . t ( " disability. #{ d } " ) } . join ( " , " )
2024-09-05 22:54:38 +02:00
end
2024-07-21 00:33:38 +02:00
2024-09-05 22:54:38 +02:00
def display_applicabilities
2024-10-26 00:14:26 +02:00
% i [ applicable_to_analogue applicable_to_app applicable_to_document applicable_to_non_web applicable_to_web ] . select { | a | send ( :" #{ a } ? " ) } . map { | a | I18n . t ( " applicability. #{ a } " ) } . join ( " , " )
2024-09-05 22:54:38 +02:00
end
2024-07-16 20:22:59 +02:00
end