diff --git a/assets/javascripts/discourse/models/admin-plan.js.es6 b/assets/javascripts/discourse/models/admin-plan.js.es6 index 2be4f99..2a29256 100644 --- a/assets/javascripts/discourse/models/admin-plan.js.es6 +++ b/assets/javascripts/discourse/models/admin-plan.js.es6 @@ -1,7 +1,8 @@ +import Plan from "discourse/plugins/discourse-patrons/discourse/models/plan"; import computed from "ember-addons/ember-computed-decorators"; import { ajax } from "discourse/lib/ajax"; -const AdminPlan = Discourse.Model.extend({ +const AdminPlan = Plan.extend({ isNew: false, name: "", interval: "month", diff --git a/assets/javascripts/discourse/models/plan.js.es6 b/assets/javascripts/discourse/models/plan.js.es6 index baff3a7..de04a99 100644 --- a/assets/javascripts/discourse/models/plan.js.es6 +++ b/assets/javascripts/discourse/models/plan.js.es6 @@ -2,10 +2,14 @@ import computed from "ember-addons/ember-computed-decorators"; import { ajax } from "discourse/lib/ajax"; const Plan = Discourse.Model.extend({ - @computed("amount", "currency", "interval") - subscriptionRate(amount, currency, interval) { - const dollars = parseFloat(amount / 100).toFixed(2); - return `$${dollars} ${currency.toUpperCase()} / ${interval}`; + @computed("amount") + amountDollars(amount) { + return parseFloat(amount / 100).toFixed(2); + }, + + @computed("amountDollars", "currency", "interval") + subscriptionRate(amountDollars, currency, interval) { + return `$${amountDollars} ${currency.toUpperCase()} / ${interval}`; }, }); diff --git a/assets/javascripts/discourse/models/subscription.js.es6 b/assets/javascripts/discourse/models/subscription.js.es6 index aa0fc49..574113c 100644 --- a/assets/javascripts/discourse/models/subscription.js.es6 +++ b/assets/javascripts/discourse/models/subscription.js.es6 @@ -1,5 +1,6 @@ import computed from "ember-addons/ember-computed-decorators"; import { ajax } from "discourse/lib/ajax"; +import Plan from "discourse/plugins/discourse-patrons/discourse/models/plan"; const Subscription = Discourse.Model.extend({ @computed("created") @@ -31,7 +32,10 @@ const Subscription = Discourse.Model.extend({ Subscription.reopenClass({ findAll() { return ajax("/patrons/subscriptions", { method: "get" }).then(result => - result.map(subscription => Subscription.create(subscription)) + result.map(subscription => { + subscription.plan = Plan.create(subscription.plan); + return Subscription.create(subscription) + }) ); } }); diff --git a/assets/javascripts/discourse/routes/patrons-subscribe.js.es6 b/assets/javascripts/discourse/routes/patrons-subscribe.js.es6 index ab8e950..336bf20 100644 --- a/assets/javascripts/discourse/routes/patrons-subscribe.js.es6 +++ b/assets/javascripts/discourse/routes/patrons-subscribe.js.es6 @@ -3,16 +3,8 @@ import Subscription from "discourse/plugins/discourse-patrons/discourse/models/s export default Discourse.Route.extend({ model() { - const toCurrency = cents => parseFloat(cents / 100).toFixed(2); - - const planSelectText = plan => { - return `$${toCurrency(plan.amount)} ${plan.currency.toUpperCase()} / ${ - plan.interval - }`; - }; - const plans = Plan.findAll().then(results => - results.map(p => ({ id: p.id, name: planSelectText(p) })) + results.map(p => ({ id: p.id, name: p.subscriptionRate })) ); const subscription = Subscription.create(); diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs index 35071b6..dee5bd5 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs @@ -45,7 +45,7 @@ {{format-date plan.createdFormatted}} {{plan.metadata.group_name}} {{plan.active}} - {{plan.amount}} + {{plan.amountDollars}} {{#link-to "adminPlugins.discourse-patrons.products.show.plans.show" model.product.id plan.id class="btn no-text btn-icon"}} {{d-icon "far-edit"}} diff --git a/assets/javascripts/discourse/templates/user/subscriptions.hbs b/assets/javascripts/discourse/templates/user/subscriptions.hbs index 830026d..62c6eea 100644 --- a/assets/javascripts/discourse/templates/user/subscriptions.hbs +++ b/assets/javascripts/discourse/templates/user/subscriptions.hbs @@ -5,6 +5,7 @@ + @@ -12,6 +13,7 @@ {{#each model as |subscription|}} + diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index ead6d05..5a144b5 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -25,6 +25,8 @@ en: subscribe: Subscribe billing: Billing user: + plans: + rate: Rate subscriptions_help: You have no subscriptions. subscriptions: title: Subscriptions diff --git a/test/javascripts/models/plan-test.js.es6 b/test/javascripts/models/plan-test.js.es6 index 50774ac..29f8173 100644 --- a/test/javascripts/models/plan-test.js.es6 +++ b/test/javascripts/models/plan-test.js.es6 @@ -12,6 +12,16 @@ QUnit.test("subscriptionRate", assert => { assert.equal( plan.get("subscriptionRate"), "$23.99 AUD / month", - "it should return the formatted subscription rate" + "it returns the formatted subscription rate" + ); +}); + +QUnit.test("amountDollars", assert => { + const plan = Plan.create({ amount: 2399 }); + + assert.equal( + plan.get("amountDollars"), + 23.99, + "it returns the formatted amount" ); });
{{i18n 'discourse_patrons.user.subscriptions.id'}}{{i18n 'discourse_patrons.user.plans.rate'}} {{i18n 'discourse_patrons.user.subscriptions.status'}} {{i18n 'discourse_patrons.user.subscriptions.created_at'}}
{{subscription.id}}{{subscription.plan.subscriptionRate}} {{subscription.status}} {{format-date subscription.createdFormatted}} {{d-button disabled=subscription.canceled label="cancel" action=(route-action "cancelSubscription" subscription) icon="times"}}