SubscriptionHandler.coffee 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. async = require("async")
  2. RecurlyWrapper = require("./RecurlyWrapper")
  3. Settings = require "settings-sharelatex"
  4. User = require('../../models/User').User
  5. logger = require('logger-sharelatex')
  6. SubscriptionUpdater = require("./SubscriptionUpdater")
  7. LimitationsManager = require('./LimitationsManager')
  8. EmailHandler = require("../Email/EmailHandler")
  9. Events = require "../../infrastructure/Events"
  10. Analytics = require("../Analytics/AnalyticsManager")
  11. module.exports =
  12. createSubscription: (user, subscriptionDetails, recurly_token_id, callback)->
  13. self = @
  14. clientTokenId = ""
  15. RecurlyWrapper.createSubscription user, subscriptionDetails, recurly_token_id, (error, recurlySubscription)->
  16. return callback(error) if error?
  17. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, (error) ->
  18. return callback(error) if error?
  19. callback()
  20. updateSubscription: (user, plan_code, coupon_code, callback)->
  21. logger.log user:user, plan_code:plan_code, coupon_code:coupon_code, "updating subscription"
  22. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  23. if !hasSubscription
  24. return callback()
  25. else
  26. async.series [
  27. (cb)->
  28. return cb() if !coupon_code?
  29. logger.log user_id:user._id, plan_code:plan_code, coupon_code:coupon_code, "updating subscription with coupon code applied first"
  30. RecurlyWrapper.getSubscription subscription.recurlySubscription_id, includeAccount: true, (err, usersSubscription)->
  31. return callback(err) if err?
  32. account_code = usersSubscription.account.account_code
  33. RecurlyWrapper.redeemCoupon account_code, coupon_code, cb
  34. (cb)->
  35. RecurlyWrapper.updateSubscription subscription.recurlySubscription_id, {plan_code: plan_code, timeframe: "now"}, (error, recurlySubscription) ->
  36. return callback(error) if error?
  37. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, cb
  38. ], callback
  39. cancelSubscription: (user, callback) ->
  40. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  41. if hasSubscription
  42. RecurlyWrapper.cancelSubscription subscription.recurlySubscription_id, (error) ->
  43. return callback(error) if error?
  44. emailOpts =
  45. to: user.email
  46. first_name: user.first_name
  47. ONE_HOUR_IN_MS = 1000 * 60 * 60
  48. setTimeout (-> EmailHandler.sendEmail "canceledSubscription", emailOpts
  49. ), ONE_HOUR_IN_MS
  50. Events.emit "cancelSubscription", user._id
  51. Analytics.recordEvent user._id, "subscription-canceled"
  52. callback()
  53. else
  54. callback()
  55. reactivateSubscription: (user, callback) ->
  56. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  57. if hasSubscription
  58. RecurlyWrapper.reactivateSubscription subscription.recurlySubscription_id, (error) ->
  59. return callback(error) if error?
  60. callback()
  61. else
  62. callback()
  63. recurlyCallback: (recurlySubscription, callback) ->
  64. RecurlyWrapper.getSubscription recurlySubscription.uuid, includeAccount: true, (error, recurlySubscription) ->
  65. return callback(error) if error?
  66. User.findById recurlySubscription.account.account_code, (error, user) ->
  67. return callback(error) if error?
  68. if !user?
  69. return callback("no user found")
  70. SubscriptionUpdater.syncSubscription recurlySubscription, user?._id, callback
  71. extendTrial: (subscription, daysToExend, callback)->
  72. RecurlyWrapper.extendTrial subscription.recurlySubscription_id, daysToExend, callback