Skip to Content Skip to Search
Methods
A
C
E
G
I
S
T
U

Instance Public methods

active?()

# File app/models/db/planning.rb, line 86
def active?
  !expired?
end

canceled?()

# File app/models/db/planning.rb, line 110
def canceled?
  cancels_on.present? && cancels_on <= Time.current
end

canceling?()

# File app/models/db/planning.rb, line 114
def canceling?
  cancels_on.present? && cancels_on > Time.current
end

cancels_on()

# File app/models/db/planning.rb, line 118
def cancels_on
  subscription&.cancels_on
end

expiration_description()

# File app/models/db/planning.rb, line 164
def expiration_description
  if expired?
    expired_expiration_details
  elsif expires?
    expiration_details
  end
end

expiration_processed!()

# File app/models/db/planning.rb, line 94
def expiration_processed!
  update!(expiration_processed_at: Time.current)
end

expiration_processed?()

# File app/models/db/planning.rb, line 106
def expiration_processed?
  !!expiration_processed_at
end

expired?()

# File app/models/db/planning.rb, line 82
def expired?
  is_membership? && expires_at.present? && expires_at < Time.current
end

expires?()

# File app/models/db/planning.rb, line 78
def expires?
  expires_at.present?
end

export_status()

# File app/models/db/planning.rb, line 142
def export_status
  if canceling?
    "active - cancels on #{formatted_cancels_on}"
  elsif canceled?
    "canceled on #{formatted_cancels_on}"
  elsif expired?
    "expired on #{formatted_expiration}"
  elsif expires?
    "active - expires on #{formatted_expiration}"
  elsif trialing?
    "active - on trial"
  elsif plan.payment_plan?
    status_text
  else
    status
  end
end

good_standing?()

# File app/models/db/planning.rb, line 160
def good_standing?
  %w[active trialing past_due].include?(status)
end

is_membership?()

# File app/models/db/planning.rb, line 90
def is_membership?
  planable_type == "DB::Member"
end

same_site_id()

# File app/models/db/planning.rb, line 72
def same_site_id
  unless plan_id.nil? || plan.site_id == planable.site_id
    errors.add(:base, "Must be part of the same site")
  end
end

status()

# File app/models/db/planning.rb, line 126
def status
  if expired?
    "expired"
  elsif plan.subscription_plan?
    subscription_status
  elsif plan.payment_plan?
    multi_payment_status
  else
    "active"
  end
end

status_text()

# File app/models/db/planning.rb, line 138
def status_text
  [display_status.titleize, payment_text, incomplete_text].compact.join(" ")
end

subscription()

# File app/models/db/planning.rb, line 172
def subscription
  if is_membership?
    # Concrete class usage with *_id fields reduces queries
    DB::Subscription.find_by(plan_id:, member_id: planable_id)
  end
end

trialing?()

# File app/models/db/planning.rb, line 122
def trialing?
  status == "trialing"
end

upcoming_expiration_processed!()

# File app/models/db/planning.rb, line 98
def upcoming_expiration_processed!
  update!(upcoming_expiration_processed_at: Time.current)
end

upcoming_expiration_processed?()

# File app/models/db/planning.rb, line 102
def upcoming_expiration_processed?
  !!upcoming_expiration_processed_at
end