diff --git a/src/resources/vue/Wallet.vue b/src/resources/vue/Wallet.vue --- a/src/resources/vue/Wallet.vue +++ b/src/resources/vue/Wallet.vue @@ -2,12 +2,53 @@
-
Account balance
+
Account balance {{ $root.price(balance) }}
-

Current account balance is - {{ $root.price(balance) }} -

- +

Your current account balance will last until {{lastUntilDate}}.

+ + + +

You can add and cancel services at any time. Your account will be charged accordingly.

+ + + + + + + + + + + + + + +
User Accounts + edit +
+ {{user.name}} + +
{{$root.price(user.cost)}}
+
+ + + + + + + + + + + + + + +
Domains + edit +
{{ domain.namespace }} +
{{ $root.price(domain.cost) }}
+
@@ -19,8 +60,48 @@ data() { return { balance: 0, + lastUntilDate: "Mar 15, 2021", + users: [], + domains: [], + skus: [] } }, + created() { + axios.get('api/v4/skus') + .then(response => { + this.skus = response.data + }) + .catch(this.$root.errorHandler); + + axios.get('/api/v4/users') + .then(response => { + for(const u of response.data) { + axios.get('api/v4/users/' + u.id) + .then(response => { + let user = response.data; + user.cost = this.skus + .filter(sku => sku.type == 'user' && sku.id in user.skus) + .map(sku => { return sku.cost * (user.skus[sku.id].count - sku.units_free) } ) + .reduce((a, b) => a + b, 0); + this.users.push(user); + }) + .catch(this.$root.errorHandler); + } + }) + .catch(this.$root.errorHandler); + + axios.get('/api/v4/domains') + .then(response => { + for (const domain of response.data) { + domain.cost = this.skus + .filter(sku => sku.title == 'domain-hosting') + .map(sku => {return sku.cost}) + .reduce((a, b) => a + b, 0); + this.domains.push(domain); + } + }) + .catch(this.$root.errorHandler); + }, mounted() { this.balance = 0 // TODO: currencies, multi-wallets, accounts