demarches-normaliennes/app/models/concerns/dossier_sections_concern.rb

42 lines
1.4 KiB
Ruby

module DossierSectionsConcern
extend ActiveSupport::Concern
included do
def sections_for(type_de_champ)
@sections = Hash.new do |hash, parent|
case parent
when :public
hash[parent] = revision.types_de_champ_public.filter(&:header_section?)
when :private
hash[parent] = revision.types_de_champ_private.filter(&:header_section?)
else
hash[parent] = revision.children_of(parent).filter(&:header_section?)
end
end
@sections[revision.parent_of(type_de_champ) || (type_de_champ.public? ? :public : :private)]
end
def auto_numbering_section_headers_for?(type_de_champ)
return false if revision.child?(type_de_champ)
sections_for(type_de_champ)&.none? { _1.libelle =~ /^\d/ }
end
def index_for_section_header(type_de_champ)
types_de_champ = type_de_champ.private? ? revision.types_de_champ_private : revision.types_de_champ_public
index = 1
types_de_champ.each do |tdc|
if tdc.repetition?
index_in_repetition = revision.children_of(tdc).find_index { _1.stable_id == type_de_champ.stable_id }
return "#{index}.#{index_in_repetition + 1}" if index_in_repetition
else
return index if tdc.stable_id == type_de_champ.stable_id
next unless project_champ(tdc, nil).visible?
index += 1 if tdc.header_section?
end
end
index
end
end
end