SubscriptionHandler.coffee 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. ONE_HOUR_IN_MS = 1000 * 60 * 60
  45. setTimeout (-> EmailHandler.sendEmail "canceledSubscription", emailOpts
  46. ), ONE_HOUR_IN_MS
  47. callback()
  48. else
  49. callback()
  50. reactivateSubscription: (user, callback) ->
  51. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  52. if hasSubscription
  53. RecurlyWrapper.reactivateSubscription subscription.recurlySubscription_id, (error) ->
  54. return callback(error) if error?
  55. callback()
  56. else
  57. callback()
  58. recurlyCallback: (recurlySubscription, callback) ->
  59. RecurlyWrapper.getSubscription recurlySubscription.uuid, includeAccount: true, (error, recurlySubscription) ->
  60. return callback(error) if error?
  61. User.findById recurlySubscription.account.account_code, (error, user) ->
  62. return callback(error) if error?
  63. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, callback