class Account < ApplicationRecord include Syncable include PgSearch has_many :account_auths has_many :users, through: :account_auths has_many :projects, dependent: :destroy has_many :videos, through: :projects has_many :broadcasts, 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), self ])).sum(:byte_size).to_f end def total_number_of_releases [ MiscRelease.where(project: projects).size, AppearanceRelease.where(project: projects).size, TalentRelease.where(project: projects).size, MaterialRelease.where(project: projects).size, MedicalRelease.where(project: projects).size, LocationRelease.where(project: projects).size, AcquiredMediaRelease.where(project: projects).size, MusicRelease.where(project: projects).size ].sum 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? plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme" end def plan_name case plan_uid.to_s when "deliverme" "DeliverME" when "directme" "DirectME" when "releaseme" "ReleaseME" when "taskme" "TaskME" 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