35 lines
1,021 B
Ruby
35 lines
1,021 B
Ruby
# frozen_string_literal: true
|
|
|
|
class Element < ApplicationRecord
|
|
attr_accessor :checklist_id
|
|
|
|
has_rich_text :description_html
|
|
|
|
belongs_to :report, touch: true
|
|
has_many :success_criteria, dependent: :destroy
|
|
|
|
validates :path, :title, presence: true
|
|
|
|
# Calculate actual conformity level:
|
|
# - if a success_criterion has result :failed -> the confirmity_level
|
|
# of that success_criterion is not reached.
|
|
# - the resulting level is the highest readched level
|
|
# abeying rule above.
|
|
def level
|
|
return nil
|
|
return nil unless success_criteria.all(&:result)
|
|
|
|
min_failed = success_criteria.select(&:failed?).map(&:level).min
|
|
possible_levels = success_criteria.select(&:passed?).map(&:level).uniq
|
|
|
|
return nil if possible_levels.empty?
|
|
|
|
Rails.logger.debug possible_levels.inspect
|
|
Rails.logger.debug min_failed
|
|
possible_levels[possible_levels.find_index(min_failed) - 1]
|
|
end
|
|
|
|
def max_level
|
|
@max_level ||= success_criteria.reject(&:not_applicable?).max(&:level)
|
|
end
|
|
end
|