SubscriptionHandler.coffee 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. module.exports =
  10. createSubscription: (user, recurlySubscriptionId, callback)->
  11. self = @
  12. RecurlyWrapper.getSubscription recurlySubscriptionId, {recurlyJsResult: true}, (error, recurlySubscription) ->
  13. return callback(error) if error?
  14. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, (error) ->
  15. return callback(error) if error?
  16. callback()
  17. updateSubscription: (user, plan_code, coupon_code, callback)->
  18. logger.log user:user, plan_code:plan_code, coupon_code:coupon_code, "updating subscription"
  19. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  20. if !hasSubscription
  21. return callback()
  22. else
  23. async.series [
  24. (cb)->
  25. return cb() if !coupon_code?
  26. logger.log user_id:user._id, plan_code:plan_code, coupon_code:coupon_code, "updating subscription with coupon code applied first"
  27. RecurlyWrapper.getSubscription subscription.recurlySubscription_id, includeAccount: true, (err, usersSubscription)->
  28. return callback(err) if err?
  29. account_code = usersSubscription.account.account_code
  30. RecurlyWrapper.redeemCoupon account_code, coupon_code, cb
  31. (cb)->
  32. RecurlyWrapper.updateSubscription subscription.recurlySubscription_id, {plan_code: plan_code, timeframe: "now"}, (error, recurlySubscription) ->
  33. return callback(error) if error?
  34. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, cb
  35. ], callback
  36. cancelSubscription: (user, callback) ->
  37. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  38. if hasSubscription
  39. RecurlyWrapper.cancelSubscription subscription.recurlySubscription_id, (error) ->
  40. return callback(error) if error?
  41. emailOpts =
  42. to: user.email
  43. first_name: user.first_name
  44. EmailHandler.sendEmail "canceledSubscription", emailOpts
  45. callback()
  46. else
  47. callback()
  48. reactivateSubscription: (user, callback) ->
  49. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  50. if hasSubscription
  51. RecurlyWrapper.reactivateSubscription subscription.recurlySubscription_id, (error) ->
  52. return callback(error) if error?
  53. callback()
  54. else
  55. callback()
  56. recurlyCallback: (recurlySubscription, callback) ->
  57. RecurlyWrapper.getSubscription recurlySubscription.uuid, includeAccount: true, (error, recurlySubscription) ->
  58. return callback(error) if error?
  59. User.findById recurlySubscription.account.account_code, (error, user) ->
  60. return callback(error) if error?
  61. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, callback