Files
old-holivud2/app/models/concerns/csv_exportable.rb
2020-07-09 20:59:29 +02:00

92 lines
2.7 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
HEADERS = {
acquired_media_release: %i[name file_infos_count] + COMMON_HEADERS,
appearance_release: %i[name contact_info] + COMMON_HEADERS,
location_release: %i[name address] + COMMON_HEADERS,
material_release: %i[name] + COMMON_HEADERS,
medical_release: %i[approved name contact_info] + COMMON_HEADERS,
misc_release: %i[name contact_info] + COMMON_HEADERS,
music_release: %i[name file_infos_count composers_count publishers_count] + COMMON_HEADERS,
talent_release: %i[name phone email] + COMMON_HEADERS
}.freeze
VALUES = {
acquired_media_release: %w[name file_count] + COMMON_VALUES,
appearance_release: %w[name contact_info] + COMMON_VALUES,
location_release: %w[name address] + COMMON_VALUES,
material_release: %w[name] + COMMON_VALUES,
medical_release: %w[approved? name contact_info] + COMMON_VALUES,
misc_release: %w[name contact_info] + COMMON_VALUES,
music_release: %w[name music_file_count music_composers_count music_publishers_count] + COMMON_VALUES,
talent_release: %w[name person_phone person_email] + COMMON_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 music_file_count
file_infos.size
end
def music_composers_count
composers.size
end
def music_publishers_count
publishers.size
end
def contact_info
contact_info = ''
contact_info += "#{person_address}; " if person_address.present?
contact_info += "P: #{person_phone}; " if person_phone.present?
contact_info += "E: #{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