| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- async = require("async")
- RecurlyWrapper = require("./RecurlyWrapper")
- Settings = require "settings-sharelatex"
- User = require('../../models/User').User
- logger = require('logger-sharelatex')
- SubscriptionUpdater = require("./SubscriptionUpdater")
- LimitationsManager = require('./LimitationsManager')
- EmailHandler = require("../Email/EmailHandler")
- Events = require "../../infrastructure/Events"
- Analytics = require("../Analytics/AnalyticsManager")
- module.exports =
- validateNoSubscriptionInRecurly: (user_id, callback = (error, valid) ->) ->
- RecurlyWrapper.listAccountActiveSubscriptions user_id, (error, subscriptions = []) ->
- return callback(error) if error?
- if subscriptions.length > 0
- SubscriptionUpdater.syncSubscription subscriptions[0], user_id, (error) ->
- return callback(error) if error?
- return callback(null, false)
- else
- return callback(null, true)
- createSubscription: (user, subscriptionDetails, recurly_token_id, callback)->
- self = @
- clientTokenId = ""
- @validateNoSubscriptionInRecurly user._id, (error, valid) ->
- return callback(error) if error?
- if !valid
- return callback(new Error("user already has subscription in recurly"))
- RecurlyWrapper.createSubscription user, subscriptionDetails, recurly_token_id, (error, recurlySubscription)->
- return callback(error) if error?
- SubscriptionUpdater.syncSubscription recurlySubscription, user._id, (error) ->
- return callback(error) if error?
- callback()
- updateSubscription: (user, plan_code, coupon_code, callback)->
- logger.log user:user, plan_code:plan_code, coupon_code:coupon_code, "updating subscription"
- LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
- if !hasSubscription
- return callback()
- else
- async.series [
- (cb)->
- return cb() if !coupon_code?
- logger.log user_id:user._id, plan_code:plan_code, coupon_code:coupon_code, "updating subscription with coupon code applied first"
- RecurlyWrapper.getSubscription subscription.recurlySubscription_id, includeAccount: true, (err, usersSubscription)->
- return callback(err) if err?
- account_code = usersSubscription.account.account_code
- RecurlyWrapper.redeemCoupon account_code, coupon_code, cb
- (cb)->
- RecurlyWrapper.updateSubscription subscription.recurlySubscription_id, {plan_code: plan_code, timeframe: "now"}, (error, recurlySubscription) ->
- return callback(error) if error?
- SubscriptionUpdater.syncSubscription recurlySubscription, user._id, cb
- ], callback
-
- cancelSubscription: (user, callback) ->
- LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
- if hasSubscription
- RecurlyWrapper.cancelSubscription subscription.recurlySubscription_id, (error) ->
- return callback(error) if error?
- emailOpts =
- to: user.email
- first_name: user.first_name
- ONE_HOUR_IN_MS = 1000 * 60 * 60
- setTimeout (-> EmailHandler.sendEmail "canceledSubscription", emailOpts
- ), ONE_HOUR_IN_MS
- Events.emit "cancelSubscription", user._id
- Analytics.recordEvent user._id, "subscription-canceled"
- callback()
- else
- callback()
- reactivateSubscription: (user, callback) ->
- LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
- if hasSubscription
- RecurlyWrapper.reactivateSubscription subscription.recurlySubscription_id, (error) ->
- return callback(error) if error?
- callback()
- else
- callback()
- recurlyCallback: (recurlySubscription, callback) ->
- RecurlyWrapper.getSubscription recurlySubscription.uuid, includeAccount: true, (error, recurlySubscription) ->
- return callback(error) if error?
- User.findById recurlySubscription.account.account_code, (error, user) ->
- return callback(error) if error?
- if !user?
- return callback("no user found")
- SubscriptionUpdater.syncSubscription recurlySubscription, user?._id, callback
- extendTrial: (subscription, daysToExend, callback)->
- RecurlyWrapper.extendTrial subscription.recurlySubscription_id, daysToExend, callback
|