Rebuild frontend.

This commit is contained in:
James Cole
2021-02-13 20:04:18 +01:00
parent 1ecc454f70
commit 45f918963e
22 changed files with 259 additions and 115 deletions

View File

@@ -64,7 +64,7 @@ class ExpandedForm
try { try {
$html = prefixView('form.amount-no-currency', compact('classes', 'name', 'label', 'value', 'options'))->render(); $html = prefixView('form.amount-no-currency', compact('classes', 'name', 'label', 'value', 'options'))->render();
} catch (Throwable $e) { } catch (Throwable $e) {
Log::debug(sprintf('Could not render amountNoCurrency(): %s', $e->getMessage())); Log::error(sprintf('Could not render amountNoCurrency(): %s', $e->getMessage()));
$html = 'Could not render amountNoCurrency.'; $html = 'Could not render amountNoCurrency.';
} }

View File

@@ -57,6 +57,16 @@
{{ Intl.NumberFormat(locale, {style: 'currency', currency: budgetLimit.currency_code}).format(budgetLimit.amount) }} {{ Intl.NumberFormat(locale, {style: 'currency', currency: budgetLimit.currency_code}).format(budgetLimit.amount) }}
</span> </span>
</div> </div>
<!-- amount if bar is very small -->
<span v-if="budgetLimit.pctGreen <= 35 && 0 === budgetLimit.pctOrange && 0 === budgetLimit.pctRed">
&nbsp;
Spent
{{ Intl.NumberFormat(locale, {style: 'currency', currency: budgetLimit.currency_code}).format(budgetLimit.spent) }}
of
{{ Intl.NumberFormat(locale, {style: 'currency', currency: budgetLimit.currency_code}).format(budgetLimit.amount) }}
</span>
</div> </div>
<small class="d-none d-lg-block"> <small class="d-none d-lg-block">
{{ new Intl.DateTimeFormat(locale, {year: 'numeric', month: 'long', day: 'numeric'}).format(budgetLimit.start) }} {{ new Intl.DateTimeFormat(locale, {year: 'numeric', month: 'long', day: 'numeric'}).format(budgetLimit.start) }}

View File

@@ -78,22 +78,43 @@
</template> </template>
<script> <script>
import {createNamespacedHelpers} from "vuex";
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('dashboard/index')
export default { export default {
name: "Calendar", name: "Calendar",
created() { created() {
this.ready = true;
this.locale = localStorage.locale ?? 'en-US'; this.locale = localStorage.locale ?? 'en-US';
}, },
computed: {
...mapGetters([
'viewRange',
'start',
'end'
]),
'datesReady': function () {
return null !== this.start && null !== this.end && this.ready;
}
},
watch: {
datesReady: function (value) {
if (true === value) {
this.range.start = new Date(this.start);
this.range.end = new Date(this.end);
}
},
},
data() { data() {
return { return {
locale: 'en-US', locale: 'en-US',
ready: false,
range: { range: {
start: new Date(window.sessionStart), start: new Date,
end: new Date(window.sessionEnd), end: new Date,
}, }
defaultRange: {
start: new Date(window.sessionStart),
end: new Date(window.sessionEnd),
},
}; };
}, },
} }

View File

@@ -80,8 +80,11 @@ export default {
methods: {}, methods: {},
watch: { watch: {
start: function (value) { start: function (value) {
console.log('Value of start is now ' + value); // console.log('Value of start is now ' + value);
} },
end: function (value) {
// console.log('Value of end is now ' + value);
},
} }
} }
</script> </script>

View File

@@ -24,8 +24,14 @@
<h3 class="card-title">{{ $t('firefly.yourAccounts') }}</h3> <h3 class="card-title">{{ $t('firefly.yourAccounts') }}</h3>
</div> </div>
<div class="card-body"> <div class="card-body">
<div> <div v-if="!loading">
<canvas id="mainAccountsChart" style="min-height: 400px; height: 400px; max-height: 400px; max-width: 100%;"></canvas> <MainAccountChart :chart-data="dataCollection" :options="chartOptions" v-if="!loading && !error" />
</div>
<div v-if="loading && !error" class="text-center">
<i class="fas fa-spinner fa-spin"></i>
</div>
<div v-if="error" class="text-center">
<i class="fas fa-exclamation-triangle text-danger"></i>
</div> </div>
</div> </div>
<div class="card-footer"> <div class="card-footer">
@@ -38,21 +44,63 @@
import DataConverter from "../charts/DataConverter"; import DataConverter from "../charts/DataConverter";
import DefaultLineOptions from "../charts/DefaultLineOptions"; import DefaultLineOptions from "../charts/DefaultLineOptions";
import {createNamespacedHelpers} from "vuex";
import MainAccountChart from "./MainAccountChart";
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('dashboard/index')
export default { export default {
name: "MainAccount", name: "MainAccount",
components: {MainAccountChart},
data() {
return {
loading: true,
error: false,
ready: false,
dataCollection: {},
chartOptions: {}
}
},
created() { created() {
axios.get('./api/v1/chart/account/overview?start=' + window.sessionStart + '&end=' + window.sessionEnd) this.ready= true;
.then(response => { this.chartOptions = DefaultLineOptions.methods.getDefaultOptions();
},
let chartData = DataConverter.methods.convertChart(response.data); computed: {
chartData = DataConverter.methods.colorizeLineData(chartData); ...mapGetters([
let lineChartCanvas = $('#mainAccountsChart').get(0).getContext('2d'); 'start',
new Chart(lineChartCanvas, { 'end'
type: 'line', ]),
data: chartData, 'datesReady': function () {
options: DefaultLineOptions.methods.getDefaultOptions() return null !== this.start && null !== this.end && this.ready;
}
},
watch: {
datesReady: function (value) {
if (true === value) {
// console.log(this.chartOptions);
this.initialiseChart();
}
}
},
methods: {
initialiseChart: function () {
let startStr = this.start.toISOString().split('T')[0];
let endStr = this.end.toISOString().split('T')[0];
let url = './api/v1/chart/account/overview?start=' + startStr + '&end=' + endStr;
// console.log('URL is ' + url);
axios.get(url)
.then(response => {
let chartData = DataConverter.methods.convertChart(response.data);
chartData = DataConverter.methods.colorizeLineData(chartData);
this.dataCollection = chartData;
this.loading = false;
})
.catch(error => {
// console.log('Has error!');
// console.log(error);
this.error = true;
// console.error(error);
}); });
}); }
}, },
} }
</script> </script>

View File

@@ -20,21 +20,15 @@
--> -->
<script> <script>
import {Line} from 'vue-chartjs' import { Line, mixins } from 'vue-chartjs'
const { reactiveProp } = mixins
export default { export default {
extends: Line, extends: Line,
props: ['options', 'chartData'], mixins: [reactiveProp],
props: ['options'],
created() { mounted () {
// this.chartData is created in the mixin. this.renderChart(this.chartData, this.options)
// If you want to pass options please create a local options object }
this.renderChart(this.chartData, this.options) }
}
}
</script> </script>
<style scoped>
</style>

View File

@@ -32,9 +32,17 @@
</div> </div>
</div> </div>
<div class="card-body table-responsive p-0"> <div class="card-body table-responsive p-0">
<transaction-list-large :transactions="account.transactions" v-if="1===accounts.length" :account_id="account.id"/> <div v-if="!loading && !error">
<transaction-list-medium :transactions="account.transactions" v-if="2===accounts.length" :account_id="account.id"/> <transaction-list-large :transactions="account.transactions" v-if="1===accounts.length" :account_id="account.id"/>
<transaction-list-small :transactions="account.transactions" v-if="accounts.length > 2" :account_id="account.id"/> <transaction-list-medium :transactions="account.transactions" v-if="2===accounts.length" :account_id="account.id"/>
<transaction-list-small :transactions="account.transactions" v-if="accounts.length > 2" :account_id="account.id"/>
</div>
<div v-if="loading && !error" class="text-center">
<i class="fas fa-spinner fa-spin"></i>
</div>
<div v-if="error" class="text-center">
<i class="fas fa-exclamation-triangle text-danger"></i>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -46,6 +54,9 @@ export default {
name: "MainAccountList", name: "MainAccountList",
data() { data() {
return { return {
loading: true,
error: false,
ready: false,
accounts: [], accounts: [],
locale: 'en-US' locale: 'en-US'
} }
@@ -92,6 +103,8 @@ export default {
axios.get('./api/v1/accounts/' + accountId + '/transactions?page=1&limit=10') axios.get('./api/v1/accounts/' + accountId + '/transactions?page=1&limit=10')
.then(response => { .then(response => {
this.accounts[key].transactions = response.data.data; this.accounts[key].transactions = response.data.data;
this.loading = false;
this.error = false;
} }
); );
}, },

View File

@@ -62,21 +62,45 @@
</div> </div>
</template> </template>
<script> <script>
import {createNamespacedHelpers} from "vuex";
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('dashboard/index')
export default { export default {
name: "MainBillsList", name: "MainBillsList",
computed: {
...mapGetters([
'start',
'end'
]),
'datesReady': function () {
return null !== this.start && null !== this.end && this.ready;
}
},
watch: {
datesReady: function (value) {
if (true === value) {
// console.log(this.chartOptions);
this.initialiseBills();
}
}
},
created() { created() {
this.ready = true;
this.locale = localStorage.locale ?? 'en-US'; this.locale = localStorage.locale ?? 'en-US';
axios.get('./api/v1/bills?start=' + window.sessionStart + '&end=' + window.sessionEnd)
.then(response => {
this.loadBills(response.data.data);
}
);
}, },
components: {}, components: {},
methods: { methods: {
initialiseBills: function () {
let startStr = this.start.toISOString().split('T')[0];
let endStr = this.end.toISOString().split('T')[0];
axios.get('./api/v1/bills?start=' + startStr + '&end=' + endStr)
.then(response => {
this.loadBills(response.data.data);
}
);
},
renderPaidDate: function (obj) { renderPaidDate: function (obj) {
// console.log(obj);
let dateStr = new Intl.DateTimeFormat(this.locale, {year: 'numeric', month: 'long', day: 'numeric'}).format(new Date(obj.date)); let dateStr = new Intl.DateTimeFormat(this.locale, {year: 'numeric', month: 'long', day: 'numeric'}).format(new Date(obj.date));
let str = this.$t('firefly.bill_paid_on', {date: dateStr}); let str = this.$t('firefly.bill_paid_on', {date: dateStr});
return '<a href="./transactions/show/' + obj.transaction_group_id + '" title="' + str + '">' + str + '</a>'; return '<a href="./transactions/show/' + obj.transaction_group_id + '" title="' + str + '">' + str + '</a>';
@@ -97,7 +121,8 @@ export default {
data() { data() {
return { return {
bills: [], bills: [],
locale: 'en-US' locale: 'en-US',
ready: false
} }
}, },
} }

View File

@@ -19,39 +19,40 @@
--> -->
<template> <template>
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">{{ $t('firefly.budgets') }}</h3> <h3 class="card-title">{{ $t('firefly.budgets') }}</h3>
</div>
<div class="card-body">
<div style="position: relative;">
<canvas id="mainBudgetChart" style="min-height: 400px; height: 400px; max-height: 400px; max-width: 100%;"></canvas>
</div>
</div>
<div class="card-footer">
<a href="./budgets" class="btn btn-default button-sm"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_budgets') }}</a>
</div>
</div> </div>
<div class="card-body">
<div style="position: relative;">
<canvas id="mainBudgetChart" style="min-height: 400px; height: 400px; max-height: 400px; max-width: 100%;"></canvas>
</div>
</div>
<div class="card-footer">
<a href="./budgets" class="btn btn-default button-sm"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_budgets') }}</a>
</div>
</div>
</template> </template>
<script> <script>
import DefaultBarOptions from "../charts/DefaultBarOptions"; import DefaultBarOptions from "../charts/DefaultBarOptions";
import DataConverter from "../charts/DataConverter"; import DataConverter from "../charts/DataConverter";
export default {
name: "MainBudget", export default {
created() { name: "MainBudget",
axios.get('./api/v1/chart/budget/overview?start=' + window.sessionStart + '&end=' + window.sessionEnd) created() {
.then(response => { axios.get('./api/v1/chart/budget/overview?start=' + window.sessionXStart + '&end=' + window.sessionXEnd)
let chartData = DataConverter.methods.convertChart(response.data); .then(response => {
let stackedBarChartCanvas = $('#mainBudgetChart').get(0).getContext('2d') let chartData = DataConverter.methods.convertChart(response.data);
new Chart(stackedBarChartCanvas, { let stackedBarChartCanvas = $('#mainBudgetChart').get(0).getContext('2d')
type: 'bar', new Chart(stackedBarChartCanvas, {
data: chartData, type: 'bar',
options: DefaultBarOptions.methods.getDefaultOptions() data: chartData,
}); options: DefaultBarOptions.methods.getDefaultOptions()
}); });
}, });
} },
}
</script> </script>
<style scoped> <style scoped>

View File

@@ -57,6 +57,8 @@
<script> <script>
import BudgetListGroup from "./BudgetListGroup"; import BudgetListGroup from "./BudgetListGroup";
import {createNamespacedHelpers} from "vuex";
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('dashboard/index')
export default { export default {
name: "MainBudgetList", name: "MainBudgetList",
@@ -76,11 +78,28 @@ export default {
budgets: {}, budgets: {},
rawBudgets: [], rawBudgets: [],
locale: 'en-US', locale: 'en-US',
ready: false
} }
}, },
created() { created() {
this.ready = true;
this.locale = localStorage.locale ?? 'en-US'; this.locale = localStorage.locale ?? 'en-US';
this.collectData(); },
watch: {
datesReady: function (value) {
if (true === value) {
this.collectData();
}
}
},
computed: {
...mapGetters([
'start',
'end'
]),
'datesReady': function () {
return null !== this.start && null !== this.end && this.ready;
}
}, },
methods: methods:
{ {
@@ -88,7 +107,9 @@ export default {
this.getBudgets(); this.getBudgets();
}, },
getBudgets() { getBudgets() {
axios.get('./api/v1/budgets?start=' + window.sessionStart + '&end=' + window.sessionEnd) let startStr = this.start.toISOString().split('T')[0];
let endStr = this.end.toISOString().split('T')[0];
axios.get('./api/v1/budgets?start=' + startStr + '&end=' + endStr)
.then(response => { .then(response => {
this.parseBudgets(response.data); this.parseBudgets(response.data);
} }
@@ -120,7 +141,9 @@ export default {
getBudgetLimits() { getBudgetLimits() {
axios.get('./api/v1/budgets/limits?start=' + window.sessionStart + '&end=' + window.sessionEnd) let startStr = this.start.toISOString().split('T')[0];
let endStr = this.end.toISOString().split('T')[0];
axios.get('./api/v1/budgets/limits?start=' + startStr + '&end=' + endStr)
.then(response => { .then(response => {
this.parseBudgetLimits(response.data); this.parseBudgetLimits(response.data);
} }

View File

@@ -53,7 +53,7 @@ const actions = {
context.dispatch('setDatesFromViewRange'); context.dispatch('setDatesFromViewRange');
} }
).catch(error => { ).catch(error => {
console.log(error); // console.log(error);
context.commit('setViewRange', '1M'); context.commit('setViewRange', '1M');
// call another action: // call another action:
context.dispatch('setDatesFromViewRange'); context.dispatch('setDatesFromViewRange');
@@ -61,24 +61,23 @@ const actions = {
} }
}, },
setDatesFromViewRange(context) { setDatesFromViewRange(context) {
console.log('Must set dates from viewRange "' + context.state.viewRange + '"'); // console.log('Must set dates from viewRange "' + context.state.viewRange + '"');
// check local storage first? // check local storage first?
if (localStorage.viewRangeStart) { if (localStorage.viewRangeStart) {
console.log('view range set from local storage.'); // console.log('view range set from local storage.');
context.commit('setStart', localStorage.viewRangeStart); context.commit('setStart', new Date(localStorage.viewRangeStart));
} }
if (localStorage.viewRangeEnd) { if (localStorage.viewRangeEnd) {
console.log('view range set from local storage.'); // console.log('view range set from local storage.');
context.commit('setEnd', localStorage.viewRangeEnd); context.commit('setEnd', new Date(localStorage.viewRangeEnd));
} }
if (null !== context.getters.end && null !== context.getters.start) { if (null !== context.getters.end && null !== context.getters.start) {
return; return;
} }
console.log('view range must be calculated.');
let start; let start;
let end; let end;
let viewRange = context.getters.viewRange; let viewRange = context.getters.viewRange;
viewRange = '1Y'; // console.log('Will recreate view range on ' + viewRange);
switch (viewRange) { switch (viewRange) {
case '1D': case '1D':
// one day: // one day:
@@ -113,10 +112,10 @@ const actions = {
// this quarter // this quarter
start = new Date; start = new Date;
end = new Date; end = new Date;
let quarter = Math.floor((start.getMonth() + 3) / 3)-1; let quarter = Math.floor((start.getMonth() + 3) / 3) - 1;
// start and end months? I'm sure this could be better: // start and end months? I'm sure this could be better:
let startMonths = [0,3,6,9]; let startMonths = [0, 3, 6, 9];
let endMonths = [2,5,8,11]; let endMonths = [2, 5, 8, 11];
// set start to the correct month, day one: // set start to the correct month, day one:
start = new Date(start.getFullYear(), startMonths[quarter], 1); start = new Date(start.getFullYear(), startMonths[quarter], 1);
start.setHours(0, 0, 0, 0); start.setHours(0, 0, 0, 0);
@@ -131,10 +130,10 @@ const actions = {
// this half-year // this half-year
start = new Date; start = new Date;
end = new Date; end = new Date;
let half = start.getMonth()<= 5 ? 0 : 1; let half = start.getMonth() <= 5 ? 0 : 1;
let startHalf = [0,6]; let startHalf = [0, 6];
let endHalf = [5,11]; let endHalf = [5, 11];
// set start to the correct month, day one: // set start to the correct month, day one:
start = new Date(start.getFullYear(), startHalf[half], 1); start = new Date(start.getFullYear(), startHalf[half], 1);
start.setHours(0, 0, 0, 0); start.setHours(0, 0, 0, 0);
@@ -156,9 +155,9 @@ const actions = {
end.setHours(23, 59, 59, 999); end.setHours(23, 59, 59, 999);
break; break;
} }
console.log('Range is ' + viewRange); // console.log('Range is ' + viewRange);
console.log('Start is ' + start); // console.log('Start is ' + start);
console.log('End is ' + end); // console.log('End is ' + end);
context.commit('setStart', start); context.commit('setStart', start);
context.commit('setEnd', end); context.commit('setEnd', end);
} }
@@ -168,9 +167,11 @@ const actions = {
const mutations = { const mutations = {
setStart(state, value) { setStart(state, value) {
state.start = value; state.start = value;
window.localStorage.setItem('viewRangeStart', value);
}, },
setEnd(state, value) { setEnd(state, value) {
state.end = value; state.end = value;
window.localStorage.setItem('viewRangeEnd', value);
}, },
setViewRange(state, range) { setViewRange(state, range) {
state.viewRange = range; state.viewRange = range;

View File

@@ -1723,9 +1723,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0" lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181: caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181:
version "1.0.30001185" version "1.0.30001187"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001187.tgz#5706942631f83baa5a0218b7dfa6ced29f845438"
integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== integrity sha512-w7/EP1JRZ9552CyrThUnay2RkZ1DXxKe/Q2swTC4+LElLh9RRYrL1Z+27LlakB8kzY0fSmHw9mc7XYDUKAKWMA==
chalk@^1.1.3: chalk@^1.1.3:
version "1.1.3" version "1.1.3"
@@ -2626,9 +2626,9 @@ ejs@^2.6.1:
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
electron-to-chromium@^1.3.649: electron-to-chromium@^1.3.649:
version "1.3.663" version "1.3.664"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz#dd54adfd8d7f0e01b80d236c6e232efbaa0c686c" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.664.tgz#8fb039e2fa8ef3ab2568308464a28425d4f6e2a3"
integrity sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw== integrity sha512-yb8LrTQXQnh9yhnaIHLk6CYugF/An50T20+X0h++hjjhVfgSp1DGoMSYycF8/aD5eiqS4QwaNhiduFvK8rifRg==
elliptic@^6.5.3: elliptic@^6.5.3:
version "6.5.4" version "6.5.4"
@@ -4469,11 +4469,16 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0" bn.js "^4.0.0"
brorand "^1.0.1" brorand "^1.0.1"
mime-db@1.45.0, "mime-db@>= 1.43.0 < 2": mime-db@1.45.0:
version "1.45.0" version "1.45.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"
integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==
"mime-db@>= 1.43.0 < 2":
version "1.46.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee"
integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==
mime-types@~2.1.17, mime-types@~2.1.24: mime-types@~2.1.17, mime-types@~2.1.24:
version "2.1.28" version "2.1.28"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd"

View File

@@ -1,2 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{293:function(t,s,a){t.exports=a(411)},411:function(t,s,a){"use strict";a.r(s);var e={name:"Index",props:{accountTypes:String},data:function(){return{accounts:[]}},created:function(){var t=this;axios.get("./api/v1/accounts?type="+this.$props.accountTypes).then((function(s){t.loadAccounts(s.data.data)}))},methods:{loadAccounts:function(t){for(var s in t)if(t.hasOwnProperty(s)&&/^0$|^[1-9]\d*$/.test(s)&&s<=4294967294){var a=t[s];"asset"===a.attributes.type&&null!==a.attributes.account_role&&(a.attributes.account_role=this.$t("firefly.account_role_"+a.attributes.account_role)),"asset"===a.attributes.type&&null===a.attributes.account_role&&(a.attributes.account_role=this.$t("firefly.Default asset account")),null===a.attributes.iban&&(a.attributes.iban=a.attributes.account_number),this.accounts.push(a)}}}},c=a(1),n=Object(c.a)(e,(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"row"},[a("div",{staticClass:"col-lg-12 col-md-12 col-sm-12 col-xs-12"},[a("div",{staticClass:"card"},[t._m(0),t._v(" "),a("div",{staticClass:"card-body p-0"},[a("table",{staticClass:"table table-sm table-striped"},[a("caption",{staticStyle:{display:"none"}},[t._v(t._s(t.$t("list.name")))]),t._v(" "),a("thead",[a("tr",[a("th",{attrs:{scope:"col"}},[t._v(" ")]),t._v(" "),a("th",{attrs:{scope:"col"}},[t._v(t._s(t.$t("list.name")))]),t._v(" "),"asset"===t.$props.accountTypes?a("th",{attrs:{scope:"col"}},[t._v(t._s(t.$t("list.role")))]):t._e(),t._v(" "),a("th",{attrs:{scope:"col"}},[t._v(t._s(t.$t("list.iban")))]),t._v(" "),a("th",{staticStyle:{"text-align":"right"},attrs:{scope:"col"}},[t._v(t._s(t.$t("list.currentBalance")))]),t._v(" "),a("th",{attrs:{scope:"col"}},[t._v(t._s(t.$t("list.balanceDiff")))])])]),t._v(" "),a("tbody",t._l(t.accounts,(function(s){return a("tr",[a("td",[a("div",{staticClass:"btn-group btn-group-xs"},[a("a",{staticClass:"btn btn-xs btn-default",attrs:{href:"./accounts/edit/"+s.id}},[a("i",{staticClass:"fa fas fa-pencil-alt"})]),t._v(" "),a("a",{staticClass:"btn btn-xs btn-danger",attrs:{href:"./accounts/delete/"+s.id}},[a("i",{staticClass:"fa far fa-trash"})])])]),t._v(" "),a("td",[t._v(t._s(s.attributes.name)+"\n ")]),t._v(" "),"asset"===t.$props.accountTypes?a("td",[t._v("\n "+t._s(s.attributes.account_role)+"\n ")]):t._e(),t._v(" "),a("td",[t._v("\n "+t._s(s.attributes.iban)+"\n ")]),t._v(" "),a("td",{staticStyle:{"text-align":"right"}},[t._v("\n "+t._s(Intl.NumberFormat("en-US",{style:"currency",currency:s.attributes.currency_code}).format(s.attributes.current_balance))+"\n ")]),t._v(" "),a("td",[t._v("diff")])])})),0)])]),t._v(" "),a("div",{staticClass:"card-footer"},[t._v("\n Footer stuff.\n ")])])])])}),[function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"card-header"},[s("h3",{staticClass:"card-title"},[this._v("Title thing")]),this._v(" "),s("div",{staticClass:"card-tools"},[s("div",{staticClass:"input-group input-group-sm",staticStyle:{width:"150px"}},[s("input",{staticClass:"form-control float-right",attrs:{type:"text",name:"table_search",placeholder:"Search"}}),this._v(" "),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"btn btn-default",attrs:{type:"submit"}},[s("i",{staticClass:"fas fa-search"})])])])])])}],!1,null,"d668ce46",null).exports;a(17);var i=a(19),r={};new Vue({i18n:i,render:function(t){return t(n,{props:r})}}).$mount("#accounts")}},[[293,0,1]]]); (window.webpackJsonp=window.webpackJsonp||[]).push([[2],{294:function(t,s,a){t.exports=a(412)},412:function(t,s,a){"use strict";a.r(s);var e={name:"Index",props:{accountTypes:String},data:function(){return{accounts:[]}},created:function(){var t=this;axios.get("./api/v1/accounts?type="+this.$props.accountTypes).then((function(s){t.loadAccounts(s.data.data)}))},methods:{loadAccounts:function(t){for(var s in t)if(t.hasOwnProperty(s)&&/^0$|^[1-9]\d*$/.test(s)&&s<=4294967294){var a=t[s];"asset"===a.attributes.type&&null!==a.attributes.account_role&&(a.attributes.account_role=this.$t("firefly.account_role_"+a.attributes.account_role)),"asset"===a.attributes.type&&null===a.attributes.account_role&&(a.attributes.account_role=this.$t("firefly.Default asset account")),null===a.attributes.iban&&(a.attributes.iban=a.attributes.account_number),this.accounts.push(a)}}}},c=a(1),n=Object(c.a)(e,(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"row"},[a("div",{staticClass:"col-lg-12 col-md-12 col-sm-12 col-xs-12"},[a("div",{staticClass:"card"},[t._m(0),t._v(" "),a("div",{staticClass:"card-body p-0"},[a("table",{staticClass:"table table-sm table-striped"},[a("caption",{staticStyle:{display:"none"}},[t._v(t._s(t.$t("list.name")))]),t._v(" "),a("thead",[a("tr",[a("th",{attrs:{scope:"col"}},[t._v(" ")]),t._v(" "),a("th",{attrs:{scope:"col"}},[t._v(t._s(t.$t("list.name")))]),t._v(" "),"asset"===t.$props.accountTypes?a("th",{attrs:{scope:"col"}},[t._v(t._s(t.$t("list.role")))]):t._e(),t._v(" "),a("th",{attrs:{scope:"col"}},[t._v(t._s(t.$t("list.iban")))]),t._v(" "),a("th",{staticStyle:{"text-align":"right"},attrs:{scope:"col"}},[t._v(t._s(t.$t("list.currentBalance")))]),t._v(" "),a("th",{attrs:{scope:"col"}},[t._v(t._s(t.$t("list.balanceDiff")))])])]),t._v(" "),a("tbody",t._l(t.accounts,(function(s){return a("tr",[a("td",[a("div",{staticClass:"btn-group btn-group-xs"},[a("a",{staticClass:"btn btn-xs btn-default",attrs:{href:"./accounts/edit/"+s.id}},[a("i",{staticClass:"fa fas fa-pencil-alt"})]),t._v(" "),a("a",{staticClass:"btn btn-xs btn-danger",attrs:{href:"./accounts/delete/"+s.id}},[a("i",{staticClass:"fa far fa-trash"})])])]),t._v(" "),a("td",[t._v(t._s(s.attributes.name)+"\n ")]),t._v(" "),"asset"===t.$props.accountTypes?a("td",[t._v("\n "+t._s(s.attributes.account_role)+"\n ")]):t._e(),t._v(" "),a("td",[t._v("\n "+t._s(s.attributes.iban)+"\n ")]),t._v(" "),a("td",{staticStyle:{"text-align":"right"}},[t._v("\n "+t._s(Intl.NumberFormat("en-US",{style:"currency",currency:s.attributes.currency_code}).format(s.attributes.current_balance))+"\n ")]),t._v(" "),a("td",[t._v("diff")])])})),0)])]),t._v(" "),a("div",{staticClass:"card-footer"},[t._v("\n Footer stuff.\n ")])])])])}),[function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"card-header"},[s("h3",{staticClass:"card-title"},[this._v("Title thing")]),this._v(" "),s("div",{staticClass:"card-tools"},[s("div",{staticClass:"input-group input-group-sm",staticStyle:{width:"150px"}},[s("input",{staticClass:"form-control float-right",attrs:{type:"text",name:"table_search",placeholder:"Search"}}),this._v(" "),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"btn btn-default",attrs:{type:"submit"}},[s("i",{staticClass:"fas fa-search"})])])])])])}],!1,null,"d668ce46",null).exports;a(17);var i=a(19),r={};new Vue({i18n:i,render:function(t){return t(n,{props:r})}}).$mount("#accounts")}},[[294,0,1]]]);
//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map

View File

@@ -1,2 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{294:function(n,e,t){n.exports=t(412)},412:function(n,e,t){"use strict";t.r(e);var o={name:"Show"},r=t(1),s=Object(r.a)(o,(function(){var n=this.$createElement;return(this._self._c||n)("div",[this._v("\n I am a show\n")])}),[],!1,null,"dcd61a50",null).exports;t(17);var c=t(19),u={};new Vue({i18n:c,render:function(n){return n(s,{props:u})}}).$mount("#accounts_show")}},[[294,0,1]]]); (window.webpackJsonp=window.webpackJsonp||[]).push([[3],{295:function(n,e,t){n.exports=t(413)},413:function(n,e,t){"use strict";t.r(e);var o={name:"Show"},r=t(1),s=Object(r.a)(o,(function(){var n=this.$createElement;return(this._self._c||n)("div",[this._v("\n I am a show\n")])}),[],!1,null,"dcd61a50",null).exports;t(17);var c=t(19),u={};new Vue({i18n:c,render:function(n){return n(s,{props:u})}}).$mount("#accounts_show")}},[[295,0,1]]]);
//# sourceMappingURL=show.js.map //# sourceMappingURL=show.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{290:function(n,o,p){n.exports=p(291)},291:function(n,o,p){p(17)}},[[290,0,1]]]); (window.webpackJsonp=window.webpackJsonp||[]).push([[5],{291:function(n,o,p){n.exports=p(292)},292:function(n,o,p){p(17)}},[[291,0,1]]]);
//# sourceMappingURL=empty.js.map //# sourceMappingURL=empty.js.map

View File

@@ -1,2 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{292:function(a,e,t){a.exports=t(410)},410:function(a,e,t){"use strict";t.r(e);var s={name:"Index"},n=t(1),i=Object(n.a)(s,(function(){var a=this.$createElement;this._self._c;return this._m(0)}),[function(){var a=this,e=a.$createElement,t=a._self._c||e;return t("div",{staticClass:"row"},[t("div",{staticClass:"col"},[t("div",{attrs:{id:"accordion"}},[t("div",{staticClass:"card card-primary"},[t("div",{staticClass:"card-header"},[t("h4",{staticClass:"card-title"},[t("a",{attrs:{"data-toggle":"collapse","data-parent":"#accordion",href:"#collapseOne"}},[a._v("\n Create new accounts\n ")])])]),a._v(" "),t("div",{staticClass:"panel-collapse collapse show",attrs:{id:"collapseOne"}},[t("div",{staticClass:"card-body"},[t("div",{staticClass:"row"},[t("div",{staticClass:"col"},[t("p",[a._v("Explain")])])]),a._v(" "),t("div",{staticClass:"row"},[t("div",{staticClass:"col-lg-4"},[a._v("\n A\n ")]),a._v(" "),t("div",{staticClass:"col-lg-8"},[a._v("\n B\n ")])])])])]),a._v(" "),t("div",{staticClass:"card card-secondary"},[t("div",{staticClass:"card-header"},[t("h4",{staticClass:"card-title"},[t("a",{attrs:{"data-toggle":"collapse","data-parent":"#accordion",href:"#collapseTwo"}},[a._v("\n Collapsible Group Danger\n ")])])]),a._v(" "),t("div",{staticClass:"panel-collapse collapse",attrs:{id:"collapseTwo"}},[t("div",{staticClass:"card-body"},[a._v("\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.\n 3\n wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt\n laborum\n eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee\n nulla\n assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred\n nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft\n beer\n farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus\n labore sustainable VHS.\n ")])])]),a._v(" "),t("div",{staticClass:"card card-secondary"},[t("div",{staticClass:"card-header"},[t("h4",{staticClass:"card-title"},[t("a",{attrs:{"data-toggle":"collapse","data-parent":"#accordion",href:"#collapseThree"}},[a._v("\n Collapsible Group Success\n ")])])]),a._v(" "),t("div",{staticClass:"panel-collapse collapse",attrs:{id:"collapseThree"}},[t("div",{staticClass:"card-body"},[a._v("\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.\n 3\n wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt\n laborum\n eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee\n nulla\n assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred\n nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft\n beer\n farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus\n labore sustainable VHS.\n ")])])])])])])}],!1,null,"5c520d02",null).exports;t(17);var c=t(19),r={};new Vue({i18n:c,render:function(a){return a(i,{props:r})}}).$mount("#newuser")}},[[292,0,1]]]); (window.webpackJsonp=window.webpackJsonp||[]).push([[6],{293:function(a,e,t){a.exports=t(411)},411:function(a,e,t){"use strict";t.r(e);var s={name:"Index"},n=t(1),i=Object(n.a)(s,(function(){var a=this.$createElement;this._self._c;return this._m(0)}),[function(){var a=this,e=a.$createElement,t=a._self._c||e;return t("div",{staticClass:"row"},[t("div",{staticClass:"col"},[t("div",{attrs:{id:"accordion"}},[t("div",{staticClass:"card card-primary"},[t("div",{staticClass:"card-header"},[t("h4",{staticClass:"card-title"},[t("a",{attrs:{"data-toggle":"collapse","data-parent":"#accordion",href:"#collapseOne"}},[a._v("\n Create new accounts\n ")])])]),a._v(" "),t("div",{staticClass:"panel-collapse collapse show",attrs:{id:"collapseOne"}},[t("div",{staticClass:"card-body"},[t("div",{staticClass:"row"},[t("div",{staticClass:"col"},[t("p",[a._v("Explain")])])]),a._v(" "),t("div",{staticClass:"row"},[t("div",{staticClass:"col-lg-4"},[a._v("\n A\n ")]),a._v(" "),t("div",{staticClass:"col-lg-8"},[a._v("\n B\n ")])])])])]),a._v(" "),t("div",{staticClass:"card card-secondary"},[t("div",{staticClass:"card-header"},[t("h4",{staticClass:"card-title"},[t("a",{attrs:{"data-toggle":"collapse","data-parent":"#accordion",href:"#collapseTwo"}},[a._v("\n Collapsible Group Danger\n ")])])]),a._v(" "),t("div",{staticClass:"panel-collapse collapse",attrs:{id:"collapseTwo"}},[t("div",{staticClass:"card-body"},[a._v("\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.\n 3\n wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt\n laborum\n eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee\n nulla\n assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred\n nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft\n beer\n farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus\n labore sustainable VHS.\n ")])])]),a._v(" "),t("div",{staticClass:"card card-secondary"},[t("div",{staticClass:"card-header"},[t("h4",{staticClass:"card-title"},[t("a",{attrs:{"data-toggle":"collapse","data-parent":"#accordion",href:"#collapseThree"}},[a._v("\n Collapsible Group Success\n ")])])]),a._v(" "),t("div",{staticClass:"panel-collapse collapse",attrs:{id:"collapseThree"}},[t("div",{staticClass:"card-body"},[a._v("\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.\n 3\n wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt\n laborum\n eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee\n nulla\n assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred\n nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft\n beer\n farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus\n labore sustainable VHS.\n ")])])])])])])}],!1,null,"5c520d02",null).exports;t(17);var c=t(19),r={};new Vue({i18n:c,render:function(a){return a(i,{props:r})}}).$mount("#newuser")}},[[293,0,1]]]);
//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map

View File

@@ -1,2 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{405:function(n,o,w){n.exports=w(406)},406:function(n,o,w){w(407)},407:function(n,o,w){window.$=window.jQuery=w(18)}},[[405,0,1]]]); (window.webpackJsonp=window.webpackJsonp||[]).push([[7],{406:function(n,o,w){n.exports=w(407)},407:function(n,o,w){w(408)},408:function(n,o,w){window.$=window.jQuery=w(18)}},[[406,0,1]]]);
//# sourceMappingURL=register.js.map //# sourceMappingURL=register.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long