74 lines
1.9 KiB
Ruby
74 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module CsvExportable
|
|
extend ActiveSupport::Concern
|
|
|
|
COMMON_HEADERS = %i[notes tags signed_at].freeze
|
|
COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze
|
|
|
|
ACQUIRED_MEDIA_HEADERS = %i[name file_infos_count].freeze + COMMON_HEADERS
|
|
ACQUIRED_MEDIA_VALUES = %w[name file_count].freeze + COMMON_VALUES
|
|
|
|
APPEARANCE_HEADERS = %i[name contact_info].freeze + COMMON_HEADERS
|
|
APPEARANCE_VALUES = %w[name contact_info].freeze + COMMON_VALUES
|
|
|
|
HEADERS = {
|
|
acquired_media_release: ACQUIRED_MEDIA_HEADERS,
|
|
appearance_release: APPEARANCE_HEADERS
|
|
}.freeze
|
|
|
|
VALUES = {
|
|
acquired_media_release: ACQUIRED_MEDIA_VALUES,
|
|
appearance_release: APPEARANCE_VALUES
|
|
}.freeze
|
|
|
|
included do
|
|
class << self
|
|
def csv_headers
|
|
plural_class_name = self.name.underscore.pluralize
|
|
headers = HEADERS[self.name.underscore.to_sym]
|
|
|
|
headers.map do |header|
|
|
I18n.t("#{plural_class_name}.index.table_headers.#{header}")
|
|
end
|
|
end
|
|
end
|
|
|
|
def to_csv_row
|
|
VALUES[self.class.name.underscore.to_sym].map do |function|
|
|
send(function)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def file_count
|
|
self.file_infos.any? ? self.file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
|
end
|
|
|
|
def contact_info
|
|
contact_info = ''
|
|
contact_info += "#{person_address}; " if person_address.present?
|
|
contact_info += "#{person_phone}; " if person_phone.present?
|
|
contact_info += "#{person_email}" if person_email.present?
|
|
contact_info.delete_suffix '; '
|
|
end
|
|
|
|
def clean_notes
|
|
notes = ''
|
|
self.notes.order_by_recent.each do |note|
|
|
notes += "#{note.content}(#{note.email}), "
|
|
end
|
|
notes.delete_suffix ', '
|
|
end
|
|
|
|
def clean_tags
|
|
tags = ''
|
|
self.tags.each do |tag|
|
|
tags += "#{tag.name}, "
|
|
end
|
|
tags.delete_suffix ', '
|
|
end
|
|
end
|
|
end
|