54 lines
2 KiB
Ruby
54 lines
2 KiB
Ruby
class ExportTemplateValidator < ActiveModel::Validator
|
|
def validate(record)
|
|
validate_default_dossier_directory(record)
|
|
validate_pdf_name(record)
|
|
validate_pjs(record)
|
|
end
|
|
|
|
private
|
|
|
|
def validate_default_dossier_directory(record)
|
|
mention = attribute_content_mention(record, :default_dossier_directory)
|
|
if mention&.fetch("id", nil) != "dossier_number"
|
|
record.errors.add :tiptap_default_dossier_directory, :dossier_number_mandatory
|
|
end
|
|
end
|
|
|
|
def validate_pdf_name(record)
|
|
if attribute_content_text(record, :pdf_name).blank? && attribute_content_mention(record, :pdf_name).blank?
|
|
record.errors.add :tiptap_pdf_name, :blank
|
|
end
|
|
end
|
|
|
|
def attribute_content_text(record, attribute)
|
|
attribute_content(record, attribute)&.find { |elem| elem["type"] == "text" }&.fetch("text", nil)
|
|
end
|
|
|
|
def attribute_content_mention(record, attribute)
|
|
attribute_content(record, attribute)&.find { |elem| elem["type"] == "mention" }&.fetch("attrs", nil)
|
|
end
|
|
|
|
def attribute_content(record, attribute)
|
|
content = record.content[attribute.to_s]&.fetch("content", nil)
|
|
if content.is_a?(Array)
|
|
content.first&.fetch("content", nil)
|
|
end
|
|
end
|
|
|
|
def validate_pjs(record)
|
|
record.content["pjs"]&.each do |pj|
|
|
pj_sym = pj.symbolize_keys
|
|
libelle = record.groupe_instructeur.procedure.exportables_pieces_jointes.find { _1.stable_id.to_s == pj_sym[:stable_id] }&.libelle&.to_sym
|
|
validate_content(record, pj_sym[:path], libelle)
|
|
end
|
|
end
|
|
|
|
def validate_content(record, attribute_content, attribute)
|
|
if attribute_content.nil? || attribute_content["content"].nil? ||
|
|
attribute_content["content"].first.nil? ||
|
|
attribute_content["content"].first["content"].nil? ||
|
|
(attribute_content["content"].first["content"].find { |elem| elem["text"].blank? } && attribute_content["content"].first["content"].find { |elem| elem["type"] == "mention" }["attrs"].blank?)
|
|
record.errors.add attribute, I18n.t(:blank, scope: 'errors.messages')
|
|
end
|
|
end
|
|
end
|