Gli admin possono concedere o revocare Premium Light/Full senza Stripe; il piano omaggio ha priorità sui webhook e la società vede un messaggio dedicato. Co-authored-by: Cursor <cursoragent@cursor.com>
39 lines
804 B
Ruby
39 lines
804 B
Ruby
class Subscription < ApplicationRecord
|
|
STATUSES = %w[active trialing past_due canceled incomplete].freeze
|
|
ACTIVE_STATUSES = %w[active trialing].freeze
|
|
|
|
belongs_to :club
|
|
belongs_to :plan
|
|
belongs_to :pending_plan, class_name: "Plan", optional: true
|
|
belongs_to :admin_comped_by, class_name: "AdminAccount", optional: true
|
|
|
|
validates :status, inclusion: { in: STATUSES }
|
|
validates :club_id, uniqueness: true
|
|
|
|
scope :active, -> { where(status: ACTIVE_STATUSES) }
|
|
|
|
def active?
|
|
status.in?(ACTIVE_STATUSES)
|
|
end
|
|
|
|
def premium?
|
|
active? && plan.premium?
|
|
end
|
|
|
|
def premium_full?
|
|
active? && plan.slug == "premium_full"
|
|
end
|
|
|
|
def free?
|
|
plan.slug == "free"
|
|
end
|
|
|
|
def plan_change_pending?
|
|
pending_plan_id.present?
|
|
end
|
|
|
|
def admin_comped?
|
|
admin_comped
|
|
end
|
|
end
|