SubscriptionHandler.coffee 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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, "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. RecurlyWrapper.getSubscription subscription.recurlySubscription_id, includeAccount: true, (err, usersSubscription)->
  27. return callback(err) if err?
  28. account_code = usersSubscription.account.account_code
  29. RecurlyWrapper.redeemCoupon account_code, coupon_code, cb
  30. (cb)->
  31. RecurlyWrapper.updateSubscription subscription.recurlySubscription_id, {plan_code: plan_code, timeframe: "now"}, (error, recurlySubscription) ->
  32. return callback(error) if error?
  33. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, cb
  34. ], callback
  35. cancelSubscription: (user, callback) ->
  36. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  37. if hasSubscription
  38. RecurlyWrapper.cancelSubscription subscription.recurlySubscription_id, (error) ->
  39. return callback(error) if error?
  40. emailOpts =
  41. to: user.email
  42. first_name: user.first_name
  43. EmailHandler.sendEmail "canceledSubscription", emailOpts
  44. callback()
  45. else
  46. callback()
  47. reactivateSubscription: (user, callback) ->
  48. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  49. if hasSubscription
  50. RecurlyWrapper.reactivateSubscription subscription.recurlySubscription_id, (error) ->
  51. return callback(error) if error?
  52. callback()
  53. else
  54. callback()
  55. recurlyCallback: (recurlySubscription, callback) ->
  56. RecurlyWrapper.getSubscription recurlySubscription.uuid, includeAccount: true, (error, recurlySubscription) ->
  57. return callback(error) if error?
  58. User.findById recurlySubscription.account.account_code, (error, user) ->
  59. return callback(error) if error?
  60. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, callback