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

88 lines
2.5 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
APPEARANCE_HEADERS = %i[name contact_info].freeze + COMMON_HEADERS
APPEARANCE_VALUES = %w[name contact_info].freeze + COMMON_VALUES
LOCATION_HEADERS = %i[name address].freeze + COMMON_HEADERS
LOCATION_VALUES = %w[name address].freeze + COMMON_VALUES
MATERIAL_HEADERS = %i[name].freeze + COMMON_HEADERS
MATERIAL_VALUES = %w[name].freeze + COMMON_VALUES
MEDICAL_HEADERS = %i[approved name contact_info].freeze + COMMON_HEADERS
MEDICAL_VALUES = %w[approved? name contact_info].freeze + COMMON_VALUES
HEADERS = {
acquired_media_release: %i[name file_infos_count] + COMMON_HEADERS,
appearance_release: APPEARANCE_HEADERS,
location_release: LOCATION_HEADERS,
material_release: MATERIAL_HEADERS,
medical_release: MEDICAL_HEADERS,
misc_release: %i[name contact_info] + COMMON_HEADERS
}.freeze
VALUES = {
acquired_media_release: %w[name file_count] + COMMON_VALUES,
appearance_release: APPEARANCE_VALUES,
location_release: LOCATION_VALUES,
material_release: MATERIAL_VALUES,
medical_release: MEDICAL_VALUES,
misc_release: %w[name contact_info] + 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 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