SubscriptionHandler.coffee 3.1 KB

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