SubscriptionHandler.coffee 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. DropboxHandler = require("../Dropbox/DropboxHandler")
  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. console.log 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. DropboxHandler.unlinkAccount user._id, ->
  51. callback()
  52. else
  53. callback()
  54. reactivateSubscription: (user, callback) ->
  55. LimitationsManager.userHasSubscription user, (err, hasSubscription, subscription)->
  56. if hasSubscription
  57. RecurlyWrapper.reactivateSubscription subscription.recurlySubscription_id, (error) ->
  58. return callback(error) if error?
  59. callback()
  60. else
  61. callback()
  62. recurlyCallback: (recurlySubscription, callback) ->
  63. RecurlyWrapper.getSubscription recurlySubscription.uuid, includeAccount: true, (error, recurlySubscription) ->
  64. return callback(error) if error?
  65. User.findById recurlySubscription.account.account_code, (error, user) ->
  66. return callback(error) if error?
  67. SubscriptionUpdater.syncSubscription recurlySubscription, user._id, callback