- A
- C
- E
- N
- S
- U
Attributes
| [R] | error | |
| [R] | member | |
| [R] | site | |
| [R] | status | |
| [R] | subscription |
Class Public methods
cancel(subscription:, reason:, at_period_end: nil) Link
Source: show
# File app/services/service/subscription_manager.rb, line 3 def self.cancel(subscription:, reason:, at_period_end: nil) new(subscription:).cancel(reason, at_period_end:) end
new(args = {}) Link
Source: show
# File app/services/service/subscription_manager.rb, line 9 def initialize(args = {}) @subscription = args.fetch(:subscription) @member = @subscription.member @site = @member.site end
Instance Public methods
apply_discount_coupon() Link
Source: show
# File app/services/service/subscription_manager.rb, line 70 def apply_discount_coupon with_error_handling do coupon = DB::Coupon.find(site_settings.retention_coupon_id) sub = remote_subscription sub.coupon = coupon.code sub.save reference_coupon_used(coupon) Member::FailedPaymentRecorderJob.perform_later( member, subscription, "recovered_coupon" ) end end
cancel(reason, at_period_end: nil) Link
Source: show
# File app/services/service/subscription_manager.rb, line 15 def cancel(reason, at_period_end: nil) return false unless cancelable?(reason) with_error_handling do cancel_at_period_end = cancel_at_period_end?(at_period_end:) result = cancel_stripe_subscription(cancel_at_period_end) member.failed_payments.where(subscription:).destroy_all if cancel_at_period_end && result.current_period_end.present? updated = subscription.update( canceled_reason: reason, cancels_on: DateTime.strptime(result.current_period_end.to_s, "%s") ) Emailer.admin_subscription_will_cancel( "admin", member_id: member.id, plan_id: plan.id, subscription_id: subscription.id ).deliver_later else updated = subscription.update(status: "canceled", canceled_reason: reason) if member.of_memberspace? && updated TransactionFeeUpdatorJob.perform_later(member_id: member.id) end end updated end end
cancel_at_period_end?(at_period_end: nil) Link
Source: show
# File app/services/service/subscription_manager.rb, line 48 def cancel_at_period_end?(at_period_end: nil) !incomplete? && !trial_with_billing_anchor? && !plan.multi_payment_plan_type? && (at_period_end.nil? ? site_settings.cancel_at_period_end? : at_period_end) end
contact_support(email_content) Link
Source: show
# File app/services/service/subscription_manager.rb, line 88 def contact_support(email_content) Emailer.admin_member_contacted_support( "admin", site: member.site, first_name: member.first_name, last_name: member.last_name, email_address: member.email, email_content: email_content, member_id: member.id ).deliver_later unless contacted_support_recently? Member::FailedPaymentRecorderJob.perform_later( member, subscription, "recovered_support" ) end end
extend_trial() Link
Source: show
# File app/services/service/subscription_manager.rb, line 53 def extend_trial with_error_handling do sub = remote_subscription number_extra_days = site_settings.extended_trial_days new_trial_end = sub.trial_end + number_extra_days.to_i.days.to_i sub.trial_end = new_trial_end sub.save Member::FailedPaymentRecorderJob.perform_later( member, subscription, "recovered_trial_extension" ) end end
send_cancelation_emails() Link
Source: show
# File app/services/service/subscription_manager.rb, line 108 def send_cancelation_emails unless payments_completed? Emailer.plan_cancellation(site, {member_id: member.id, plan_id: plan.id}).deliver_later data = {member_id: member.id, plan_id: plan.id, subscription_id: subscription.id} if cancelation_email_turned_on && site.active? Emailer.admin_subscription_canceled("admin", data).deliver_later end end end