Class: Tang::Subscription

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
AASM
Defined in:
app/models/tang/subscription.rb

Constant Summary collapse

STATUSES =
['trialing', 'active', 'past_due', 'canceled', 'unpaid']

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build(stripe_subscription, customer, plan) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/models/tang/subscription.rb', line 62

def self.build(stripe_subscription, customer, plan)
  subscription = Subscription.find_or_create_by(stripe_id: stripe_subscription.id) do |s|
    s.customer = customer
    s.plan = plan
    s.application_fee_percent = stripe_subscription.application_fee_percent
    s.quantity = stripe_subscription.quantity
    # s.tax_percent = stripe_subscription.tax_percent # removed from api in favor of tax rates
    s.trial_end = DateTime.strptime(stripe_subscription.trial_end.to_s, '%s') if stripe_subscription.trial_end.present?
    s.coupon = Coupon.find_by(stripe_id: stripe_subscription.discount.coupon.id) if stripe_subscription.discount.present?
    s.status = stripe_subscription.status
  end
  return subscription
end

.from_stripe(stripe_subscription) ⇒ Object



51
52
53
54
55
56
57
58
59
60
# File 'app/models/tang/subscription.rb', line 51

def self.from_stripe(stripe_subscription)
  customer = Tang.customer_class.find_by(stripe_id: stripe_subscription.customer)
  plan = Plan.find_by(stripe_id: stripe_subscription.plan.id)
  if customer.present? && plan.present?
    subscription = Subscription.build(stripe_subscription, customer, plan)
    subscription.update(coupon: nil, coupon_start: nil) if stripe_subscription.discount.nil?
    return subscription
  end
  return nil
end

Instance Method Details

#discount_for_plan(plan) ⇒ Object



119
120
121
122
123
124
125
126
127
# File 'app/models/tang/subscription.rb', line 119

def discount_for_plan(plan)
  amount_off = 0
  if self.coupon.percent_off.present?
    amount_off = (self.coupon.percent_off.to_f / 100.0) * plan.amount.to_f
  elsif self.coupon.amount_off.present?
    amount_off = self.coupon.amount_off
  end
  return amount_off
end

#end_trial_nowObject



103
104
105
# File 'app/models/tang/subscription.rb', line 103

def end_trial_now
  @end_trial_now || false
end

#end_trial_now=(val) ⇒ Object



107
108
109
# File 'app/models/tang/subscription.rb', line 107

def end_trial_now=(val)
  @end_trial_now = val
end

#period_endObject



85
86
87
88
89
90
91
# File 'app/models/tang/subscription.rb', line 85

def period_end
  # invoice = invoices.order(:period_start).last
  # if invoice.present?
  #   return invoice.period_end
  # end
  return plan.period_days_from(period_start)
end

#period_startObject



76
77
78
79
80
81
82
83
# File 'app/models/tang/subscription.rb', line 76

def period_start
  invoice = invoices.order(:date).last
  if invoice.present?
    # return invoice.period_start
    return invoice.date
  end
  return created_at
end

#quantityObject



93
94
95
# File 'app/models/tang/subscription.rb', line 93

def quantity
  self[:quantity] || 1
end

#stripe_trial_endObject



97
98
99
100
101
# File 'app/models/tang/subscription.rb', line 97

def stripe_trial_end
  return 'now' if self.end_trial_now
  return self.trial_end.to_i if self.trial_end.present?
  return nil
end

#upgradedObject



111
112
113
# File 'app/models/tang/subscription.rb', line 111

def upgraded
  @upgraded || false
end

#upgraded=(val) ⇒ Object



115
116
117
# File 'app/models/tang/subscription.rb', line 115

def upgraded=(val)
  @upgraded = val
end