demarches-normaliennes/app/models/export_item.rb
2024-08-22 09:26:48 +02:00

72 lines
2 KiB
Ruby

# frozen_string_literal: true
class ExportItem
include TagsSubstitutionConcern
DOSSIER_STATE = Dossier.states.fetch(:en_construction)
FORMAT_DATE = "%Y-%m-%d".freeze
attr_reader :template, :enabled, :stable_id
def initialize(template:, enabled: true, stable_id: nil)
@template, @enabled, @stable_id = template, enabled, stable_id
end
def self.default(prefix:, enabled: true, stable_id: nil)
new(template: prefix_dossier_id(prefix), enabled:, stable_id:)
end
def self.default_pj(tdc)
default(prefix: tdc.libelle_as_filename, enabled: false, stable_id: tdc.stable_id)
end
def enabled? = enabled
def template_json = template.to_json
def template_string = TiptapService.new.to_texts_and_tags(template)
def path(dossier, attachment: nil, row_index: nil, index: nil)
used_tags = TiptapService.used_tags_and_libelle_for(template)
substitutions = tags_substitutions(used_tags, dossier, escape: false, memoize: true)
substitutions['original-filename'] = attachment.filename.base if attachment
TiptapService.new.to_texts_and_tags(template, substitutions) + suffix(attachment, row_index, index)
end
def ==(other)
self.class == other.class &&
template == other.template &&
enabled == other.enabled &&
stable_id == other.stable_id
end
private
def self.prefix_dossier_id(prefix)
{
type: "doc",
content: [
{
type: "paragraph",
content: [
{ text: "#{prefix}-", type: "text" },
{ type: "mention", attrs: DOSSIER_ID_TAG.slice(:id, :label) }
]
}
]
}
end
def suffix(attachment, row_index, index)
suffix = ""
suffix += "-#{add_one_and_pad(row_index)}" if row_index.present?
suffix += "-#{add_one_and_pad(index)}" if index.present?
suffix += attachment.filename.extension_with_delimiter if attachment
suffix
end
def add_one_and_pad(number)
(number + 1).to_s.rjust(2, '0') if number.present?
end
end