SubscriptionViewModelBuilder.coffee 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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 = (error, subscription, groups) ->) ->
  10. SubscriptionLocator.getUsersSubscription user, (err, subscription) ->
  11. return callback(err) if err?
  12. SubscriptionLocator.getMemberSubscriptions user, (err, memberSubscriptions = []) ->
  13. return callback(err) if err?
  14. if subscription?
  15. return callback(error) if error?
  16. plan = PlansLocator.findLocalPlanInSettings(subscription.planCode)
  17. RecurlyWrapper.getSubscription subscription.recurlySubscription_id, (err, recurlySubscription)->
  18. callback null, {
  19. name: plan.name
  20. nextPaymentDueAt: SubscriptionFormatters.formatDate(recurlySubscription.current_period_ends_at)
  21. state: recurlySubscription.state
  22. price: SubscriptionFormatters.formatPrice recurlySubscription.unit_amount_in_cents, recurlySubscription.currency
  23. planCode: subscription.planCode
  24. groupPlan: subscription.groupPlan
  25. }, memberSubscriptions
  26. else
  27. callback null, null, memberSubscriptions
  28. buildViewModel : ->
  29. plans = Settings.plans
  30. allPlans = {}
  31. plans.forEach (plan)->
  32. allPlans[plan.planCode] = plan
  33. result =
  34. allPlans: allPlans
  35. result.personalAccount = _.find plans, (plan)->
  36. plan.planCode == "personal"
  37. result.studentAccounts = _.filter plans, (plan)->
  38. plan.planCode.indexOf("student") != -1
  39. result.groupMonthlyPlans = _.filter plans, (plan)->
  40. plan.groupPlan and !plan.annual
  41. result.groupAnnualPlans = _.filter plans, (plan)->
  42. plan.groupPlan and plan.annual
  43. result.individualMonthlyPlans = _.filter plans, (plan)->
  44. !plan.groupPlan and !plan.annual and plan.planCode != "personal" and plan.planCode.indexOf("student") == -1
  45. result.individualAnnualPlans = _.filter plans, (plan)->
  46. !plan.groupPlan and plan.annual and plan.planCode.indexOf("student") == -1
  47. return result