# 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 puts "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 puts "==== = CSV ROW" v = VALUES[self.class.name.underscore.to_sym].map do |function| send(function) end puts v v 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