2019-04-25 15:09:37 +02:00
|
|
|
# frozen_string_literal: true
|
2018-12-06 18:26:01 +01:00
|
|
|
|
2019-04-25 15:09:37 +02:00
|
|
|
# Provides helper methods for Subscription actions
|
|
|
|
class Subscriptions::Subscribe
|
2019-06-12 12:22:38 +02:00
|
|
|
attr_accessor :user_id, :operator_profile_id
|
2019-04-25 15:09:37 +02:00
|
|
|
|
2019-06-12 12:22:38 +02:00
|
|
|
def initialize(operator_profile_id, user_id = nil)
|
2019-04-25 15:09:37 +02:00
|
|
|
@user_id = user_id
|
2019-06-12 12:22:38 +02:00
|
|
|
@operator_profile_id = operator_profile_id
|
2019-04-25 15:09:37 +02:00
|
|
|
end
|
2018-12-06 18:26:01 +01:00
|
|
|
|
2019-09-10 17:57:46 +02:00
|
|
|
def pay_and_save(subscription, coupon: nil, invoice: nil, payment_intent_id: nil)
|
2019-06-04 16:50:23 +02:00
|
|
|
return false if user_id.nil?
|
|
|
|
|
2019-06-06 16:34:53 +02:00
|
|
|
subscription.statistic_profile_id = StatisticProfile.find_by(user_id: user_id).id
|
2019-09-10 17:57:46 +02:00
|
|
|
subscription.save_with_payment(operator_profile_id, invoice, coupon, payment_intent_id)
|
2019-04-25 15:09:37 +02:00
|
|
|
end
|
2018-12-10 13:24:00 +01:00
|
|
|
|
2019-04-25 15:09:37 +02:00
|
|
|
def extend_subscription(subscription, new_expiration_date, free_days)
|
2019-06-12 12:22:38 +02:00
|
|
|
return subscription.free_extend(new_expiration_date, @operator_profile_id) if free_days
|
2018-12-10 13:24:00 +01:00
|
|
|
|
2019-04-25 15:09:37 +02:00
|
|
|
new_sub = Subscription.create(
|
|
|
|
plan_id: subscription.plan_id,
|
2019-06-04 16:50:23 +02:00
|
|
|
statistic_profile_id: subscription.statistic_profile_id,
|
2019-04-25 15:09:37 +02:00
|
|
|
expiration_date: new_expiration_date
|
|
|
|
)
|
|
|
|
if new_sub.save
|
2019-06-12 12:22:38 +02:00
|
|
|
new_sub.user.generate_subscription_invoice(operator_profile_id)
|
2019-04-25 15:09:37 +02:00
|
|
|
return new_sub
|
2018-12-10 13:24:00 +01:00
|
|
|
end
|
2019-04-25 15:09:37 +02:00
|
|
|
false
|
2018-12-10 13:24:00 +01:00
|
|
|
end
|
2019-06-04 16:50:23 +02:00
|
|
|
end
|