Files
old-holivud2/app/models/account.rb
2020-07-17 04:50:04 +02:00

131 lines
3.5 KiB
Ruby

class Account < ApplicationRecord
include Syncable
include PgSearch
has_many :account_auths
has_many :users, through: :account_auths
has_many :projects, dependent: :destroy
has_many :casting_calls, through: :projects
has_many :casting_submissions, through: :projects
has_many :videos, through: :projects
has_many :contract_templates, through: :projects
validates :name, presence: true
validates :slug, presence: true, uniqueness: true
before_validation :set_slug
scope :order_by_name, -> { order(name: :asc) }
has_one_attached :logo
pg_search_scope :search, {
against: [:name, :slug],
using: {
tsearch: {any_word: true, prefix: true},
trigram: {},
dmetaphone: {any_word: true}
}
}
def managers
users.where(account_auths: { role: :account_manager })
end
def current_month_video_duration_total
@current_month_video_duration_total ||=
Video.with_attached_file.where(project: projects, created_at: Time.zone.now.beginning_of_month..Time.zone.now.end_of_month).sum { |video| video.file.blob.metadata.dig("duration").to_f }
end
def video_duration_total
@video_duration_total ||=
Video.with_attached_file.where(project: projects).sum { |video| video.file.blob.metadata.dig("duration").to_f }
end
def storage_total
ActiveStorage::Blob.joins(:attachments).merge(
ActiveStorage::Attachment.where(record: [
AppearanceRelease.where(project: projects),
TalentRelease.where(project: projects),
MaterialRelease.where(project: projects),
LocationRelease.where(project: projects),
AcquiredMediaRelease.where(project: projects),
Import.where(project: projects),
MusicRelease.where(project: projects),
Video.where(project: projects),
Directory.where(project: projects),
Download.where(project: projects),
User.joins(:project_memberships).where(project_memberships: { project: projects }),
Broadcast.where(project: projects),
TaskRequest.where(project: projects),
ZoomMeeting.where(project: projects),
MedicalRelease.where(project: projects),
MiscRelease.where(project: projects),
MatchingRequest.where(project: projects),
CastingCall.where(project: projects),
self.casting_submissions,
self
])).sum(:byte_size).to_f
end
def to_param
slug
end
def me_suite_enabled?
plan_uid.to_s == "me_suite"
end
def deliverme_enabled?
plan_uid.to_s == "me_suite" || plan_uid.to_s == "deliverme"
end
def directme_enabled?
plan_uid.to_s == "me_suite" || plan_uid.to_s == "directme"
end
def releaseme_enabled?
plan_uid.to_s == "me_suite" || plan_uid.to_s == "releaseme"
end
def taskme_enabled?
ENV["TASKME_ENABLED"] && (plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme")
end
def castme_enabled?
plan_uid.to_s == "me_suite" || plan_uid.to_s == "castme"
end
def plan_name
case plan_uid.to_s
when "deliverme"
"DeliverME"
when "directme"
"DirectME"
when "releaseme"
"ReleaseME"
when "taskme"
"TaskME"
when "castme"
"CastME"
when "me_suite"
"ME Suite"
end
end
private
def set_slug
return if name.blank? || slug.present?
counter = 1
begin
if counter == 1
self.slug = name.parameterize
else
self.slug = [name.parameterize, counter].join("-")
end
counter += 1
end while self.class.exists?(slug: self.slug)
end
end