Files
old-holivud2/app/models/music_release.rb
2020-07-20 13:28:40 +00:00

109 lines
2.7 KiB
Ruby

class MusicRelease < ApplicationRecord
include Confirmable
include Contractable
include Exploitable
include Notable
include Releasable
include Searchable
include Taggable
include PersonName
include CsvExportable
include Approvable
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
accepts_nested_attributes_for :file_infos
accepts_nested_attributes_for :composers, reject_if: :all_blank
accepts_nested_attributes_for :publishers, reject_if: :all_blank
composed_of :person_address,
class_name: "Address",
mapping: [
%w(person_address_street1 street1),
%w(person_address_street2 street2),
%w(person_address_city city),
%w(person_address_state state),
%w(person_address_zip zip),
%w(person_address_country country)
]
validates :name, presence: true
validates :person_email, email: true, allow_blank: true
validates :composers, :length => { :minimum => 1, :message => "at least 1 required" }
validates :publishers, :length => { :minimum => 1, :message => "at least 1 required" }
validate :publisher_percentages_add_up_to_100
validate :composer_percentages_add_up_to_100
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 uses_edl?
true
end
def composer_info
composers.map do |composer|
[
composer.name,
composer.affiliation,
composer.percentage,
("$cae:#{composer.cae_number}" if composer.cae_number.present?),
].compact.join(", ")
end.join("|")
end
def publisher_info
publishers.map do |publisher|
[
publisher.name,
publisher.affiliation,
publisher.percentage,
].join(", ")
end.join("|")
end
def native?
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
if publishers.size > 0 && publishers.sum(&:percentage).to_f != 100.0
errors.add(:base, "Publisher percentages must add up to 100%")
end
end
def composer_percentages_add_up_to_100
if composers.size > 0 && composers.sum(&:percentage).to_f != 100.0
errors.add(:base, "Composer percentages must add up to 100%")
end
end
end