SubscriptionViewModelBuilder.coffee 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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, memberSubscriptions) ->) ->
  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. if !plan?
  18. err = new Error('No plan found for planCode "#{subscription.planCode}"')
  19. return callback(err)
  20. RecurlyWrapper.getSubscription subscription.recurlySubscription_id, (err, recurlySubscription)->
  21. tax = recurlySubscription?.tax_in_cents || 0
  22. callback null, {
  23. admin_id:subscription.admin_id
  24. name: plan.name
  25. nextPaymentDueAt: SubscriptionFormatters.formatDate(recurlySubscription?.current_period_ends_at)
  26. state: recurlySubscription?.state
  27. price: SubscriptionFormatters.formatPrice (recurlySubscription?.unit_amount_in_cents + tax), recurlySubscription?.currency
  28. planCode: subscription.planCode
  29. currency:recurlySubscription?.currency
  30. taxRate:parseFloat(recurlySubscription?.tax_rate?._)
  31. groupPlan: subscription.groupPlan
  32. trial_ends_at:recurlySubscription?.trial_ends_at
  33. }, memberSubscriptions
  34. else
  35. callback null, null, memberSubscriptions
  36. buildViewModel : ->
  37. plans = Settings.plans
  38. allPlans = {}
  39. plans.forEach (plan)->
  40. allPlans[plan.planCode] = plan
  41. result =
  42. allPlans: allPlans
  43. result.personalAccount = _.find plans, (plan)->
  44. plan.planCode == "personal"
  45. result.studentAccounts = _.filter plans, (plan)->
  46. plan.planCode.indexOf("student") != -1
  47. result.groupMonthlyPlans = _.filter plans, (plan)->
  48. plan.groupPlan and !plan.annual
  49. result.groupAnnualPlans = _.filter plans, (plan)->
  50. plan.groupPlan and plan.annual
  51. result.individualMonthlyPlans = _.filter plans, (plan)->
  52. !plan.groupPlan and !plan.annual and plan.planCode != "personal" and plan.planCode.indexOf("student") == -1
  53. result.individualAnnualPlans = _.filter plans, (plan)->
  54. !plan.groupPlan and plan.annual and plan.planCode.indexOf("student") == -1
  55. return result