diff --git a/app/jobs/generate_contracts_zip_job.rb b/app/jobs/generate_contracts_zip_job.rb index f1b4137..65bc376 100644 --- a/app/jobs/generate_contracts_zip_job.rb +++ b/app/jobs/generate_contracts_zip_job.rb @@ -21,7 +21,7 @@ class GenerateContractsZipJob < ApplicationJob zipfile.add(attachment, File.join("#{dir}/", attachment)) end - if Object.const_get(@release_type).include?(CsvExportable) + if @release_type.constantize.include?(CsvExportable) csv_file = generate_csv releases zipfile.get_output_stream("#{@folder_name}.csv") { |f| f.puts(csv_file) } end @@ -49,7 +49,7 @@ class GenerateContractsZipJob < ApplicationJob private def generate_csv(releases) - release_class = Object.const_get @release_type + release_class = @release_type.constantize headers = release_class.csv_headers CSV.generate(headers: true) do |csv| diff --git a/app/models/acquired_media_release.rb b/app/models/acquired_media_release.rb index 46e3881..8b7a7b0 100644 --- a/app/models/acquired_media_release.rb +++ b/app/models/acquired_media_release.rb @@ -11,6 +11,12 @@ class AcquiredMediaRelease < ApplicationRecord include PersonName include CsvExportable + class << self + def custom_csv_exportable_headers + %i[name file_infos_count] + end + end + has_many :file_infos, as: :releasable, dependent: :destroy accepts_nested_attributes_for :file_infos @@ -58,4 +64,8 @@ class AcquiredMediaRelease < ApplicationRecord def uses_edl? true end + + def file_infos_count + file_infos.any? ? file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media') + end end diff --git a/app/models/appearance_release.rb b/app/models/appearance_release.rb index 18f6a61..c9bb4c0 100644 --- a/app/models/appearance_release.rb +++ b/app/models/appearance_release.rb @@ -17,6 +17,12 @@ class AppearanceRelease < ApplicationRecord include SecondGuardianName include CsvExportable + class << self + def custom_csv_exportable_headers + %i[name contact_info] + end + end + has_one_attached :person_photo composed_of :person_address, diff --git a/app/models/concerns/csv_exportable.rb b/app/models/concerns/csv_exportable.rb index 207096f..4619e86 100644 --- a/app/models/concerns/csv_exportable.rb +++ b/app/models/concerns/csv_exportable.rb @@ -6,64 +6,29 @@ module CsvExportable 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 custom_csv_exportable_headers + [] + end + def csv_headers - plural_class_name = self.name.underscore.pluralize - headers = HEADERS[self.name.underscore.to_sym] + headers = custom_csv_exportable_headers + COMMON_HEADERS headers.map do |header| - I18n.t("#{plural_class_name}.index.table_headers.#{header}") + I18n.t("#{model_name.plural}.index.table_headers.#{header}") end end end def to_csv_row - VALUES[self.class.name.underscore.to_sym].map do |function| + (self.class.custom_csv_exportable_headers + COMMON_VALUES).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? diff --git a/app/models/location_release.rb b/app/models/location_release.rb index 389d0c7..1e49d73 100644 --- a/app/models/location_release.rb +++ b/app/models/location_release.rb @@ -12,6 +12,12 @@ class LocationRelease < ApplicationRecord include PersonName include CsvExportable + class << self + def custom_csv_exportable_headers + %i[name address] + end + end + composed_of :address, mapping: [ %w(address_street1 street1), diff --git a/app/models/material_release.rb b/app/models/material_release.rb index 9c9044d..dc5380e 100644 --- a/app/models/material_release.rb +++ b/app/models/material_release.rb @@ -11,8 +11,14 @@ class MaterialRelease < ApplicationRecord include Taggable include PersonName include CsvExportable - - composed_of :person_address, + + class << self + def custom_csv_exportable_headers + %i[name] + end + end + + composed_of :person_address, class_name: "Address", mapping: [ %w(person_address_street1 street1), @@ -31,15 +37,15 @@ class MaterialRelease < ApplicationRecord validates :signature, attached: true end - searchable_on %i[ - name + searchable_on %i[ + name person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country ] def contact_person @contact_person ||= Contact.new(person_name, person_address, person_email, person_phone) end - + def minor? false end diff --git a/app/models/medical_release.rb b/app/models/medical_release.rb index f160903..e037ef5 100644 --- a/app/models/medical_release.rb +++ b/app/models/medical_release.rb @@ -13,6 +13,12 @@ class MedicalRelease < ApplicationRecord include SecondGuardianName include CsvExportable + class << self + def custom_csv_exportable_headers + %i[approved? name contact_info] + end + end + NUMBER_OF_CUSTOM_FIELDS = 15 composed_of :person_address, diff --git a/app/models/misc_release.rb b/app/models/misc_release.rb index 2142510..2679542 100644 --- a/app/models/misc_release.rb +++ b/app/models/misc_release.rb @@ -11,6 +11,12 @@ class MiscRelease < ApplicationRecord include GuardianPhotoable include CsvExportable + class << self + def custom_csv_exportable_headers + %i[name contact_info] + end + end + NUMBER_OF_CUSTOM_FIELDS = 15 composed_of :person_address, diff --git a/app/models/music_release.rb b/app/models/music_release.rb index a422436..b324b9f 100644 --- a/app/models/music_release.rb +++ b/app/models/music_release.rb @@ -8,7 +8,13 @@ class MusicRelease < ApplicationRecord include Taggable include PersonName include CsvExportable - + + class << self + def custom_csv_exportable_headers + %i[name file_infos_count composers_count publishers_count] + end + end + has_many :file_infos, as: :releasable, dependent: :destroy has_many :composers, dependent: :destroy has_many :publishers, dependent: :destroy @@ -73,6 +79,18 @@ class MusicRelease < ApplicationRecord false end + def file_infos_count + file_infos.size + end + + def composers_count + composers.size + end + + def publishers_count + publishers.size + end + private def publisher_percentages_add_up_to_100 diff --git a/app/models/talent_release.rb b/app/models/talent_release.rb index 1c2be4c..f507ba7 100644 --- a/app/models/talent_release.rb +++ b/app/models/talent_release.rb @@ -16,6 +16,12 @@ class TalentRelease < ApplicationRecord include SecondGuardianName include CsvExportable + class << self + def custom_csv_exportable_headers + %i[name phone email] + end + end + composed_of :person_address, class_name: "Address", mapping: [ @@ -87,6 +93,14 @@ class TalentRelease < ApplicationRecord person_name end + def phone + person_phone + end + + def email + person_email + end + def filename_suffix "#{person_last_name} #{person_first_name}" end diff --git a/config/locales/en.yml b/config/locales/en.yml index 6dfb129..290ef7e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -803,6 +803,7 @@ en: empty: Medical releases will appear here table_headers: approved: Approved + approved?: Approved contact_info: Contact info name: Person name notes: Notes diff --git a/config/locales/es.yml b/config/locales/es.yml index 7857263..8c6711c 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -334,6 +334,7 @@ es: index: table_headers: approved: Approved (ES) + approved?: Approved (ES) contact_info: Contact info (ES) name: Person name (ES) notes: Notes (ES) diff --git a/spec/jobs/generate_contracts_zip_job_spec.rb b/spec/jobs/generate_contracts_zip_job_spec.rb index 69ef18c..3d3ee5f 100644 --- a/spec/jobs/generate_contracts_zip_job_spec.rb +++ b/spec/jobs/generate_contracts_zip_job_spec.rb @@ -65,9 +65,6 @@ describe GenerateContractsZipJob do end end end - - - end context "When there are errors" do