Files
old-holivud2/app/models/talent_release.rb

133 lines
3.9 KiB
Ruby
Raw Normal View History

2020-05-31 22:38:19 +02:00
class TalentRelease < ApplicationRecord
include Confirmable
include Contractable
include Exploitable
include Notable
include Photoable
include Releasable
include Searchable
include Signable
include Syncable
include Taggable
include PersonName
include GuardianPhotoable
2020-06-30 05:07:43 +02:00
include SecondGuardianPhotoable
2020-05-31 22:38:19 +02:00
include GuardianName
2020-06-30 05:07:43 +02:00
include SecondGuardianName
2020-07-14 14:10:30 +02:00
include CsvExportable
2020-07-20 13:28:40 +00:00
include Approvable
2020-07-14 14:10:30 +02:00
class << self
def custom_csv_exportable_headers
%i[name phone email]
end
end
2020-05-31 22:38:19 +02:00
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)
]
composed_of :guardian_address,
class_name: "Address",
mapping: [
%w(guardian_address_street1 street1),
%w(guardian_address_street2 street2),
%w(guardian_address_city city),
%w(guardian_address_state state),
%w(guardian_address_zip zip),
%w(guardian_address_country country)
]
2020-06-30 05:07:43 +02:00
composed_of :guardian_2_address,
class_name: "Address",
mapping: [
%w(guardian_2_address_street1 street1),
%w(guardian_2_address_street2 street2),
%w(guardian_2_address_city city),
%w(guardian_2_address_state state),
%w(guardian_2_address_zip zip),
%w(guardian_2_address_country country)
]
2020-05-31 22:38:19 +02:00
def self.face_photo_acceptable_content_types
["image/png", "image/jpeg"]
end
# These validations apply to all releases
validates :person_first_name, :person_last_name, presence: true
validates :person_email, email: true, allow_blank: true
validate :has_one_or_more_photos
# These validations apply to releases created natively by the system (i.e. not imported from elsewhere)
with_options on: :native do
validates :person_phone, presence: true
validates :signature, attached: true
end
# These validations apply to releases imported to the system from an outside source
with_options on: :non_native do
validates :contract, attached: true
end
# These validations apply to releases being signed by a minor
with_options if: :minor? do
validates :guardian_first_name, :guardian_last_name, presence: true
2020-06-30 05:07:43 +02:00
validates :guardian_email, :guardian_2_email, email: true, allow_blank: true
2020-05-31 22:38:19 +02:00
validates :guardian_phone, presence: true
end
searchable_on %i[
person_first_name person_last_name person_email person_phone
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
guardian_address_street1 guardian_address_street2 guardian_address_city guardian_address_state guardian_address_zip guardian_address_country
]
# All releases must respond to the following messages
def name
person_name
end
2020-07-14 14:10:30 +02:00
def phone
person_phone
end
def email
person_email
end
2020-05-31 22:38:19 +02:00
def filename_suffix
"#{person_last_name} #{person_first_name}"
end
def contact_person
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
end
def uses_edl?
2020-07-21 13:12:27 +00:00
true
2020-05-31 22:38:19 +02:00
end
2020-06-30 05:07:43 +02:00
def second_guardian_present?
guardian_2_first_name.present?
end
2020-05-31 22:38:19 +02:00
def contract_file_name
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
end
private
def has_one_or_more_photos
if photos.empty?
errors.add(:photos, "must be included")
end
end
end