SubscriptionViewModelBuilder.coffee 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. Settings = require('settings-sharelatex')
  2. RecurlyWrapper = require("./RecurlyWrapper")
  3. PlansLocator = require("./PlansLocator")
  4. SubscriptionFormatters = require("./SubscriptionFormatters")
  5. LimitationsManager = require("./LimitationsManager")
  6. SubscriptionLocator = require("./SubscriptionLocator")
  7. _ = require("underscore")
  8. module.exports =
  9. buildUsersSubscriptionViewModel: (user, callback) ->
  10. SubscriptionLocator.getUsersSubscription user, (err, subscription)->
  11. LimitationsManager.userHasFreeTrial user, (err, hasFreeTrial)->
  12. LimitationsManager.userHasSubscription user, (err, hasSubscription)->
  13. if hasSubscription
  14. return callback(error) if error?
  15. plan = PlansLocator.findLocalPlanInSettings(subscription.planCode)
  16. RecurlyWrapper.getSubscription subscription.recurlySubscription_id, (err, recurlySubscription)->
  17. callback null,
  18. name: plan.name
  19. nextPaymentDueAt: SubscriptionFormatters.formatDate(recurlySubscription.current_period_ends_at)
  20. state: recurlySubscription.state
  21. price: SubscriptionFormatters.formatPrice recurlySubscription.unit_amount_in_cents
  22. planCode: subscription.planCode
  23. groupPlan: subscription.groupPlan
  24. else if hasFreeTrial
  25. plan = PlansLocator.findLocalPlanInSettings(subscription.freeTrial.planCode)
  26. callback null,
  27. name: plan.name
  28. state: "free-trial"
  29. planCode: plan.planCode
  30. groupPlan: subscription.groupPlan
  31. expiresAt: SubscriptionFormatters.formatDate(subscription.freeTrial.expiresAt)
  32. else
  33. callback "User has no subscription"
  34. buildViewModel : ->
  35. plans = Settings.plans
  36. allPlans = {}
  37. plans.forEach (plan)->
  38. allPlans[plan.planCode] = plan
  39. result =
  40. allPlans: allPlans
  41. result.personalAccount = _.find plans, (plan)->
  42. plan.planCode == "personal"
  43. result.studentAccounts = _.filter plans, (plan)->
  44. plan.planCode.indexOf("student") != -1
  45. result.groupMonthlyPlans = _.filter plans, (plan)->
  46. plan.groupPlan and !plan.annual
  47. result.groupAnnualPlans = _.filter plans, (plan)->
  48. plan.groupPlan and plan.annual
  49. result.individualMonthlyPlans = _.filter plans, (plan)->
  50. !plan.groupPlan and !plan.annual and plan.planCode != "personal" and plan.planCode.indexOf("student") == -1
  51. result.individualAnnualPlans = _.filter plans, (plan)->
  52. !plan.groupPlan and plan.annual and plan.planCode.indexOf("student") == -1
  53. return result