Rebuild frontend.

This commit is contained in:
James Cole 2021-02-26 06:39:20 +01:00
parent 9aa743b31b
commit 5944cda03a
No known key found for this signature in database
GPG Key ID: B5669F9493CDE38D
88 changed files with 733 additions and 697 deletions

View File

@ -34,7 +34,8 @@ class StaticConfigKey
'firefly.version',
'firefly.api_version',
'firefly.default_location',
'firefly.account_to_transaction'
'firefly.account_to_transaction',
'firefly.allowed_opposing_types'
];
/**
* @param string $value

View File

@ -23,9 +23,9 @@
</template>
<script>
export default {
name: "Edit"
}
export default {
name: "Edit"
}
</script>
<style scoped>

View File

@ -26,10 +26,10 @@
<h3 class="card-title">Title thing</h3>
<div class="card-tools">
<div class="input-group input-group-sm" style="width: 150px;">
<input type="text" name="table_search" class="form-control float-right" placeholder="Search">
<input class="form-control float-right" name="table_search" placeholder="Search" type="text">
<div class="input-group-append">
<button type="submit" class="btn btn-default">
<button class="btn btn-default" type="submit">
<i class="fas fa-search"></i>
</button>
</div>
@ -43,7 +43,7 @@
<tr>
<th scope="col">&nbsp;</th>
<th scope="col">{{ $t('list.name') }}</th>
<th scope="col" v-if="'asset' === $props.accountTypes">{{ $t('list.role') }}</th>
<th v-if="'asset' === $props.accountTypes" scope="col">{{ $t('list.role') }}</th>
<th scope="col">{{ $t('list.iban') }}</th>
<th scope="col" style="text-align: right;">{{ $t('list.currentBalance') }}</th>
<th scope="col">{{ $t('list.balanceDiff') }}</th>

View File

@ -19,15 +19,15 @@
-->
<template>
<div>
I am a show
</div>
<div>
I am a show
</div>
</template>
<script>
export default {
name: "Show"
}
export default {
name: "Show"
}
</script>
<style scoped>

View File

@ -24,91 +24,91 @@
<script>
import FormatLabel from "../charts/FormatLabel";
import FormatLabel from "../charts/FormatLabel";
export default {
name: "DefaultBarOptions",
data() {
return {}
export default {
name: "DefaultBarOptions",
data() {
return {}
},
methods: {
getDefaultOptions() {
return {
type: 'bar',
layout: {
padding: {
left: 50,
right: 50,
top: 0,
bottom: 0
},
},
methods: {
getDefaultOptions() {
return {
type: 'bar',
layout: {
padding: {
left: 50,
right: 50,
top: 0,
bottom: 0
},
},
stacked: true,
elements: {
line: {
cubicInterpolationMode: 'monotone'
}
},
legend: {
display: false,
},
animation: {
duration: 0,
},
responsive: true,
maintainAspectRatio: false,
scales: {
xAxes: [
{
stacked: true,
gridLines: {
display: false
},
ticks: {
// break ticks when too long.
callback: function (value, index, values) {
return FormatLabel.methods.formatLabel(value, 20);
//return value;
}
}
}
],
yAxes: [{
stacked: false,
display: true,
drawOnChartArea: false,
offset: true,
beginAtZero: true,
ticks: {
callback: function (tickValue) {
"use strict";
let currencyCode = this.chart.data.datasets[0] ? this.chart.data.datasets[0].currency_code : 'EUR';
return new Intl.NumberFormat(localStorage.locale, {style: 'currency', currency: currencyCode}).format(tickValue);
},
}
}]
},
tooltips: {
mode: 'label',
callbacks: {
label: function (tooltipItem, data) {
"use strict";
let currencyCode = data.datasets[tooltipItem.datasetIndex] ? data.datasets[tooltipItem.datasetIndex].currency_code : 'EUR';
let nrString = new Intl.NumberFormat(localStorage.locale, {
style: 'currency',
currency: currencyCode
}).format(tooltipItem.yLabel);
return data.datasets[tooltipItem.datasetIndex].label + ': ' + nrString;
}
}
}
};
stacked: true,
elements: {
line: {
cubicInterpolationMode: 'monotone'
}
},
legend: {
display: false,
},
animation: {
duration: 0,
},
responsive: true,
maintainAspectRatio: false,
scales: {
xAxes: [
{
stacked: true,
gridLines: {
display: false
},
ticks: {
// break ticks when too long.
callback: function (value, index, values) {
return FormatLabel.methods.formatLabel(value, 20);
//return value;
}
}
}
],
yAxes: [{
stacked: false,
display: true,
drawOnChartArea: false,
offset: true,
beginAtZero: true,
ticks: {
callback: function (tickValue) {
"use strict";
let currencyCode = this.chart.data.datasets[0] ? this.chart.data.datasets[0].currency_code : 'EUR';
return new Intl.NumberFormat(localStorage.locale, {style: 'currency', currency: currencyCode}).format(tickValue);
},
}
}]
},
tooltips: {
mode: 'label',
callbacks: {
label: function (tooltipItem, data) {
"use strict";
let currencyCode = data.datasets[tooltipItem.datasetIndex] ? data.datasets[tooltipItem.datasetIndex].currency_code : 'EUR';
let nrString = new Intl.NumberFormat(localStorage.locale, {
style: 'currency',
currency: currencyCode
}).format(tooltipItem.yLabel);
return data.datasets[tooltipItem.datasetIndex].label + ': ' + nrString;
}
}
}
};
}
}
}
</script>
<style scoped>

View File

@ -105,7 +105,7 @@ export default {
callback: function (value, index, values) {
// date format
let dateObj = new Date(value);
let options = { year: 'numeric', month: 'long', day: 'numeric' };
let options = {year: 'numeric', month: 'long', day: 'numeric'};
let str = new Intl.DateTimeFormat(localStorage.locale, options).format(dateObj);
//console.log();
//return self.formatLabel(value, 20);

View File

@ -23,9 +23,9 @@
</template>
<script>
export default {
name: "DefaultPieOptions"
}
export default {
name: "DefaultPieOptions"
}
</script>
<style scoped>

View File

@ -18,56 +18,56 @@
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<script>
export default {
name: "FormatLabel",
methods: {
/**
* Takes a string phrase and breaks it into separate phrases no bigger than 'maxwidth', breaks are made at complete words.
* https://stackoverflow.com/questions/21409717/chart-js-and-long-labels
*
* @param str
* @param maxwidth
* @returns {Array}
*/
formatLabel(str, maxwidth) {
var sections = [];
str = String(str);
var words = str.split(" ");
var temp = "";
export default {
name: "FormatLabel",
methods: {
/**
* Takes a string phrase and breaks it into separate phrases no bigger than 'maxwidth', breaks are made at complete words.
* https://stackoverflow.com/questions/21409717/chart-js-and-long-labels
*
* @param str
* @param maxwidth
* @returns {Array}
*/
formatLabel(str, maxwidth) {
var sections = [];
str = String(str);
var words = str.split(" ");
var temp = "";
words.forEach(function (item, index) {
if (temp.length > 0) {
var concat = temp + ' ' + item;
words.forEach(function (item, index) {
if (temp.length > 0) {
var concat = temp + ' ' + item;
if (concat.length > maxwidth) {
sections.push(temp);
temp = "";
} else {
if (index === (words.length - 1)) {
sections.push(concat);
return;
} else {
temp = concat;
return;
}
}
}
if (index === (words.length - 1)) {
sections.push(item);
return;
}
if (item.length < maxwidth) {
temp = item;
} else {
sections.push(item);
}
});
return sections;
},
if (concat.length > maxwidth) {
sections.push(temp);
temp = "";
} else {
if (index === (words.length - 1)) {
sections.push(concat);
return;
} else {
temp = concat;
return;
}
}
}
}
if (index === (words.length - 1)) {
sections.push(item);
return;
}
if (item.length < maxwidth) {
temp = item;
} else {
sections.push(item);
}
});
return sections;
},
}
}
</script>

View File

@ -26,8 +26,8 @@
<td style="vertical-align: middle">
<div class="progress progress active">
<div class="progress-bar bg-success progress-bar-striped" role="progressbar"
:aria-valuenow="budgetLimit.pctGreen" aria-valuemin="0" aria-valuemax="100" :style="'width: '+ budgetLimit.pctGreen + '%;'">
<div :aria-valuenow="budgetLimit.pctGreen" :style="'width: '+ budgetLimit.pctGreen + '%;'"
aria-valuemax="100" aria-valuemin="0" class="progress-bar bg-success progress-bar-striped" role="progressbar">
<span v-if="budgetLimit.pctGreen > 35">
Spent
{{ Intl.NumberFormat(locale, {style: 'currency', currency: budgetLimit.currency_code}).format(budgetLimit.spent) }}
@ -38,8 +38,8 @@
</div>
<div class="progress-bar bg-warning progress-bar-striped" role="progressbar"
:aria-valuenow="budgetLimit.pctOrange" aria-valuemin="0" aria-valuemax="100" :style="'width: '+ budgetLimit.pctOrange + '%;'">
<div :aria-valuenow="budgetLimit.pctOrange" :style="'width: '+ budgetLimit.pctOrange + '%;'"
aria-valuemax="100" aria-valuemin="0" class="progress-bar bg-warning progress-bar-striped" role="progressbar">
<span v-if="budgetLimit.pctRed <= 50 && budgetLimit.pctOrange > 35">
Spent
{{ Intl.NumberFormat(locale, {style: 'currency', currency: budgetLimit.currency_code}).format(budgetLimit.spent) }}
@ -48,8 +48,8 @@
</span>
</div>
<div class="progress-bar bg-danger progress-bar-striped" role="progressbar"
:aria-valuenow="budgetLimit.pctRed" aria-valuemin="0" aria-valuemax="100" :style="'width: '+ budgetLimit.pctRed + '%;'">
<div :aria-valuenow="budgetLimit.pctRed" :style="'width: '+ budgetLimit.pctRed + '%;'"
aria-valuemax="100" aria-valuemin="0" class="progress-bar bg-danger progress-bar-striped" role="progressbar">
<span v-if="budgetLimit.pctOrange <= 50 && budgetLimit.pctRed > 35" class="text-muted">
Spent
{{ Intl.NumberFormat(locale, {style: 'currency', currency: budgetLimit.currency_code}).format(budgetLimit.spent) }}
@ -75,8 +75,8 @@
</small>
</td>
<td style="width:10%;" class="align-middle d-none d-lg-table-cell">
<span class="text-success" v-if="parseFloat(budgetLimit.amount) + parseFloat(budgetLimit.spent) > 0">
<td class="align-middle d-none d-lg-table-cell" style="width:10%;">
<span v-if="parseFloat(budgetLimit.amount) + parseFloat(budgetLimit.spent) > 0" class="text-success">
{{
Intl.NumberFormat(locale, {
style: 'currency',
@ -84,10 +84,10 @@
}).format(parseFloat(budgetLimit.amount) + parseFloat(budgetLimit.spent))
}}
</span>
<span class="text-muted" v-if="0.0 === parseFloat(budgetLimit.amount) + parseFloat(budgetLimit.spent)">
<span v-if="0.0 === parseFloat(budgetLimit.amount) + parseFloat(budgetLimit.spent)" class="text-muted">
{{ Intl.NumberFormat(locale, {style: 'currency', currency: budgetLimit.currency_code}).format(0) }}
</span>
<span class="text-danger" v-if="parseFloat(budgetLimit.amount) + parseFloat(budgetLimit.spent) < 0">
<span v-if="parseFloat(budgetLimit.amount) + parseFloat(budgetLimit.spent) < 0" class="text-danger">
{{
Intl.NumberFormat(locale, {
style: 'currency',

View File

@ -26,13 +26,13 @@
<div class="card-body table-responsive p-0">
<table class="table table-sm">
<tbody>
<BudgetLimitRow v-bind:key="key" v-for="(budgetLimit, key) in budgetLimits" :budgetLimit="budgetLimit" />
<BudgetRow v-bind:key="key" v-for="(budget, key) in budgets" :budget="budget" />
<BudgetLimitRow v-for="(budgetLimit, key) in budgetLimits" v-bind:key="key" :budgetLimit="budgetLimit"/>
<BudgetRow v-for="(budget, key) in budgets" v-bind:key="key" :budget="budget"/>
</tbody>
</table>
</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>
<a class="btn btn-default button-sm" href="./budgets"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_budgets') }}</a>
</div>
</div>
</template>
@ -40,6 +40,7 @@
<script>
import BudgetLimitRow from "./BudgetLimitRow";
import BudgetRow from "./BudgetRow";
export default {
name: "BudgetListGroup",
components: {BudgetLimitRow, BudgetRow},

View File

@ -30,41 +30,41 @@
</div>
<date-picker
v-model="range"
mode="date"
:rows="2"
is-range
mode="date"
>
<template v-slot="{ inputValue, inputEvents, isDragging, togglePopover }">
<div class="row">
<div class="col">
<div class="btn-group btn-group-sm d-flex">
<button
class="btn btn-secondary btn-sm" :title="$t('firefly.custom_period')"
:title="$t('firefly.custom_period')" class="btn btn-secondary btn-sm"
@click="togglePopover({ placement: 'auto-start', positionFixed: true })"
><i class="fas fa-calendar-alt"></i></button>
<button @click="resetDate"
<button :title="$t('firefly.reset_to_current')"
class="btn btn-secondary"
:title="$t('firefly.reset_to_current')"
@click="resetDate"
><i class="fas fa-history"></i></button>
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true"
:title="$t('firefly.select_period')"
aria-expanded="false">
<button id="dropdownMenuButton" :title="$t('firefly.select_period')" aria-expanded="false" aria-haspopup="true" class="btn btn-secondary dropdown-toggle"
data-toggle="dropdown"
type="button">
<i class="fas fa-list"></i>
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<div aria-labelledby="dropdownMenuButton" class="dropdown-menu">
<a v-for="period in periods" class="dropdown-item" href="#" @click="customDate(period.start, period.end)">{{ period.title }}</a>
</div>
</div>
<input type="hidden"
<input v-on="inputEvents.start"
:class="isDragging ? 'text-gray-600' : 'text-gray-900'"
:value="inputValue.start"
v-on="inputEvents.start"
type="hidden"
/>
<input type="hidden"
<input v-on="inputEvents.end"
:class="isDragging ? 'text-gray-600' : 'text-gray-900'"
:value="inputValue.end"
v-on="inputEvents.end"
type="hidden"
/>
</div>
</div>

View File

@ -25,7 +25,7 @@
</div>
<div class="card-body">
<div v-if="!loading">
<MainAccountChart :chart-data="dataCollection" :options="chartOptions" v-if="!loading && !error"/>
<MainAccountChart v-if="!loading && !error" :chart-data="dataCollection" :options="chartOptions"/>
</div>
<div v-if="loading && !error" class="text-center">
<i class="fas fa-spinner fa-spin"></i>
@ -35,7 +35,7 @@
</div>
</div>
<div class="card-footer">
<a href="./accounts/asset" class="btn btn-default button-sm"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_asset_accounts') }}</a>
<a class="btn btn-default button-sm" href="./accounts/asset"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_asset_accounts') }}</a>
</div>
</div>
</template>

View File

@ -1,4 +1,3 @@
<!--
- MainAccountChart.vue
- Copyright (c) 2020 james@firefly-iii.org
@ -21,14 +20,15 @@
<script>
import { Line, mixins } from 'vue-chartjs'
const { reactiveProp } = mixins
import {Line, mixins} from 'vue-chartjs'
const {reactiveProp} = mixins
export default {
extends: Line,
mixins: [reactiveProp],
props: ['options'],
mounted () {
mounted() {
this.renderChart(this.chartData, this.options)
}
}

View File

@ -21,7 +21,7 @@
<template>
<div>
<!-- row if loading -->
<div class="row" v-if="loading && !error">
<div v-if="loading && !error" class="row">
<div class="col">
<div class="card">
<div class="card-body">
@ -34,7 +34,7 @@
</div>
<!-- row if error -->
<div class="row" v-if="error">
<div v-if="error" class="row">
<div class="col">
<div class="card">
<div class="card-body">
@ -47,10 +47,10 @@
</div>
<!-- row if normal -->
<div class="row" v-if="!loading && !error">
<div v-if="!loading && !error" class="row">
<div
v-bind:class="{ 'col-lg-12': 1 === accounts.length, 'col-lg-6': 2 === accounts.length, 'col-lg-4': accounts.length > 2 }"
v-for="account in accounts">
v-for="account in accounts"
v-bind:class="{ 'col-lg-12': 1 === accounts.length, 'col-lg-6': 2 === accounts.length, 'col-lg-4': accounts.length > 2 }">
<div class="card">
<div class="card-header">
<h3 class="card-title"><a :href="account.url">{{ account.title }}</a></h3>
@ -62,9 +62,9 @@
</div>
<div class="card-body table-responsive p-0">
<div>
<transaction-list-large :transactions="account.transactions" v-if="1===accounts.length" :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"/>
<transaction-list-large v-if="1===accounts.length" :account_id="account.id" :transactions="account.transactions"/>
<transaction-list-medium v-if="2===accounts.length" :account_id="account.id" :transactions="account.transactions"/>
<transaction-list-small v-if="accounts.length > 2" :account_id="account.id" :transactions="account.transactions"/>
</div>
</div>
</div>

View File

@ -24,19 +24,19 @@
<h3 class="card-title">{{ $t('firefly.bills') }}</h3>
</div>
<!-- body if loading -->
<div class="card-body" v-if="loading && !error">
<div v-if="loading && !error" class="card-body">
<div class="text-center">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<!-- body if error -->
<div class="card-body" v-if="error">
<div v-if="error" class="card-body">
<div class="text-center">
<i class="fas fa-exclamation-triangle text-danger"></i>
</div>
</div>
<!-- body if normal -->
<div class="card-body table-responsive p-0" v-if="!loading && !error">
<div v-if="!loading && !error" class="card-body table-responsive p-0">
<table class="table table-striped">
<caption style="display:none;">{{ $t('firefly.bills') }}</caption>
<thead>
@ -70,7 +70,7 @@
</table>
</div>
<div class="card-footer">
<a href="./bills" class="btn btn-default button-sm"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_bills') }}</a>
<a class="btn btn-default button-sm" href="./bills"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_bills') }}</a>
</div>
</div>
</template>

View File

@ -21,37 +21,37 @@
<template>
<div>
<!-- daily budgets (will be the exception, I expect) -->
<div class="row" v-if="!loading">
<div class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12" v-if="budgetLimits.daily.length > 0">
<BudgetListGroup :title="$t('firefly.daily_budgets')" :budgetLimits=budgetLimits.daily
<div v-if="!loading" class="row">
<div v-if="budgetLimits.daily.length > 0" class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<BudgetListGroup :budgetLimits=budgetLimits.daily :title="$t('firefly.daily_budgets')"
/>
</div>
<div class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12" v-if="budgetLimits.weekly.length > 0">
<BudgetListGroup :title="$t('firefly.weekly_budgets')" :budgetLimits=budgetLimits.weekly
<div v-if="budgetLimits.weekly.length > 0" class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<BudgetListGroup :budgetLimits=budgetLimits.weekly :title="$t('firefly.weekly_budgets')"
/>
</div>
<div class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12" v-if="budgetLimits.monthly.length > 0">
<BudgetListGroup :title="$t('firefly.monthly_budgets')" :budgetLimits=budgetLimits.monthly
<div v-if="budgetLimits.monthly.length > 0" class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<BudgetListGroup :budgetLimits=budgetLimits.monthly :title="$t('firefly.monthly_budgets')"
/>
</div>
<div class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12" v-if="budgetLimits.quarterly.length > 0">
<BudgetListGroup :title="$t('firefly.quarterly_budgets')" :budgetLimits=budgetLimits.quarterly
<div v-if="budgetLimits.quarterly.length > 0" class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<BudgetListGroup :budgetLimits=budgetLimits.quarterly :title="$t('firefly.quarterly_budgets')"
/>
</div>
<div class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12" v-if="budgetLimits.half_year.length > 0">
<BudgetListGroup :title="$t('firefly.half_year_budgets')" :budgetLimits=budgetLimits.half_year
<div v-if="budgetLimits.half_year.length > 0" class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<BudgetListGroup :budgetLimits=budgetLimits.half_year :title="$t('firefly.half_year_budgets')"
/>
</div>
<div class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12" v-if="budgetLimits.yearly.length > 0">
<BudgetListGroup :title="$t('firefly.yearly_budgets')" :budgetLimits=budgetLimits.yearly
<div v-if="budgetLimits.yearly.length > 0" class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<BudgetListGroup :budgetLimits=budgetLimits.yearly :title="$t('firefly.yearly_budgets')"
/>
</div>
<div class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12" v-if="budgetLimits.other.length > 0 || rawBudgets.length > 0">
<BudgetListGroup :title="$t('firefly.other_budgets')" :budgetLimits=budgetLimits.other :budgets="rawBudgets"
<div v-if="budgetLimits.other.length > 0 || rawBudgets.length > 0" class="col-xl-6 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<BudgetListGroup :budgetLimits=budgetLimits.other :budgets="rawBudgets" :title="$t('firefly.other_budgets')"
/>
</div>
</div>
<div class="row" v-if="loading && !error">
<div v-if="loading && !error" class="row">
<div class="col">
<div class="card">
<div class="card-body">

View File

@ -24,19 +24,19 @@
<h3 class="card-title">{{ $t('firefly.categories') }}</h3>
</div>
<!-- body if loading -->
<div class="card-body" v-if="loading && !error">
<div v-if="loading && !error" class="card-body">
<div class="text-center">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<!-- body if error -->
<div class="card-body" v-if="error">
<div v-if="error" class="card-body">
<div class="text-center">
<i class="fas fa-exclamation-triangle text-danger"></i>
</div>
</div>
<!-- body if normal -->
<div class="card-body table-responsive p-0" v-if="!loading && !error">
<div v-if="!loading && !error" class="card-body table-responsive p-0">
<table class="table table-sm">
<tbody>
<tr v-for="category in sortedList">
@ -45,10 +45,10 @@
</td>
<td class="align-middle">
<!-- SPENT -->
<div class="progress" v-if="category.spentPct > 0">
<div class="progress-bar progress-bar-striped bg-danger" role="progressbar" :aria-valuenow="category.spentPct"
:style="{ width: category.spentPct + '%'}" aria-valuemin="0"
aria-valuemax="100">
<div v-if="category.spentPct > 0" class="progress">
<div :aria-valuenow="category.spentPct" :style="{ width: category.spentPct + '%'}" aria-valuemax="100"
aria-valuemin="0" class="progress-bar progress-bar-striped bg-danger"
role="progressbar">
<span v-if="category.spentPct > 20">
{{ Intl.NumberFormat(locale, {style: 'currency', currency: category.currency_code}).format(category.spent) }}
</span>
@ -59,13 +59,13 @@
</div>
<!-- EARNED -->
<div class="progress justify-content-end" v-if="category.earnedPct > 0" title="hello2">
<div v-if="category.earnedPct > 0" class="progress justify-content-end" title="hello2">
<span v-if="category.earnedPct <= 20">
{{ Intl.NumberFormat(locale, {style: 'currency', currency: category.currency_code}).format(category.earned) }}
&nbsp;</span>
<div class="progress-bar progress-bar-striped bg-success" role="progressbar" :aria-valuenow="category.earnedPct"
:style="{ width: category.earnedPct + '%'}" aria-valuemin="0"
aria-valuemax="100" title="hello">
<div :aria-valuenow="category.earnedPct" :style="{ width: category.earnedPct + '%'}" aria-valuemax="100"
aria-valuemin="0" class="progress-bar progress-bar-striped bg-success"
role="progressbar" title="hello">
<span v-if="category.earnedPct > 20">
{{ Intl.NumberFormat(locale, {style: 'currency', currency: category.currency_code}).format(category.earned) }}
</span>

View File

@ -24,28 +24,28 @@
<h3 class="card-title">{{ $t('firefly.revenue_accounts') }}</h3>
</div>
<!-- body if loading -->
<div class="card-body" v-if="loading && !error">
<div v-if="loading && !error" class="card-body">
<div class="text-center">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<!-- body if error -->
<div class="card-body" v-if="error">
<div v-if="error" class="card-body">
<div class="text-center">
<i class="fas fa-exclamation-triangle text-danger"></i>
</div>
</div>
<!-- body if normal -->
<div class="card-body table-responsive p-0" v-if="!loading && !error">
<div v-if="!loading && !error" class="card-body table-responsive p-0">
<table class="table table-sm">
<tbody>
<tr v-for="entry in income">
<td style="width:20%;"><a :href="'./accounts/show/' + entry.id">{{ entry.name }}</a></td>
<td class="align-middle">
<div class="progress" v-if="entry.pct > 0">
<div class="progress-bar progress-bar-striped bg-success" role="progressbar" :aria-valuenow="entry.pct"
:style="{ width: entry.pct + '%'}" aria-valuemin="0"
aria-valuemax="100">
<div v-if="entry.pct > 0" class="progress">
<div :aria-valuenow="entry.pct" :style="{ width: entry.pct + '%'}" aria-valuemax="100"
aria-valuemin="0" class="progress-bar progress-bar-striped bg-success"
role="progressbar">
<span v-if="entry.pct > 20">
{{ Intl.NumberFormat(locale, {style: 'currency', currency: entry.currency_code}).format(entry.difference_float) }}
</span>
@ -60,7 +60,7 @@
</table>
</div>
<div class="card-footer">
<a href="./transactions/deposit" class="btn btn-default button-sm"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_deposits') }}</a>
<a class="btn btn-default button-sm" href="./transactions/deposit"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_deposits') }}</a>
</div>
</div>
</template>
@ -117,7 +117,7 @@ export default {
getIncome() {
this.loading = true;
this.income = [];
this.error=false;
this.error = false;
let startStr = this.start.toISOString().split('T')[0];
let endStr = this.end.toISOString().split('T')[0];
axios.get('./api/v1/insight/income/date/basic?start=' + startStr + '&end=' + endStr)

View File

@ -24,28 +24,28 @@
<h3 class="card-title">{{ $t('firefly.expense_accounts') }}</h3>
</div>
<!-- body if loading -->
<div class="card-body" v-if="loading && !error">
<div v-if="loading && !error" class="card-body">
<div class="text-center">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<!-- body if error -->
<div class="card-body" v-if="error">
<div v-if="error" class="card-body">
<div class="text-center">
<i class="fas fa-exclamation-triangle text-danger"></i>
</div>
</div>
<!-- body if normal -->
<div class="card-body table-responsive p-0" v-if="!loading && !error">
<div v-if="!loading && !error" class="card-body table-responsive p-0">
<table class="table table-sm">
<tbody>
<tr v-for="entry in expenses">
<td style="width:20%;"><a :href="'./accounts/show/' + entry.id">{{ entry.name }}</a></td>
<td class="align-middle">
<div class="progress" v-if="entry.pct > 0">
<div class="progress-bar progress-bar-striped bg-danger" role="progressbar" :aria-valuenow="entry.pct"
:style="{ width: entry.pct + '%'}" aria-valuemin="0"
aria-valuemax="100">
<div v-if="entry.pct > 0" class="progress">
<div :aria-valuenow="entry.pct" :style="{ width: entry.pct + '%'}" aria-valuemax="100"
aria-valuemin="0" class="progress-bar progress-bar-striped bg-danger"
role="progressbar">
<span v-if="entry.pct > 20">
{{ Intl.NumberFormat(locale, {style: 'currency', currency: entry.currency_code}).format(entry.difference_float) }}
</span>
@ -60,7 +60,7 @@
</table>
</div>
<div class="card-footer">
<a href="./transactions/withdrawal" class="btn btn-default button-sm"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_withdrawals') }}</a>
<a class="btn btn-default button-sm" href="./transactions/withdrawal"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_withdrawals') }}</a>
</div>
</div>
</template>
@ -116,7 +116,7 @@ export default {
methods: {
getExpenses() {
this.loading = true;
this.error=false;
this.error = false;
this.expenses = [];
let startStr = this.start.toISOString().split('T')[0];
let endStr = this.end.toISOString().split('T')[0];

View File

@ -25,19 +25,19 @@
</div>
<!-- body if loading -->
<div class="card-body" v-if="loading && !error">
<div v-if="loading && !error" class="card-body">
<div class="text-center">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<!-- body if error -->
<div class="card-body" v-if="error">
<div v-if="error" class="card-body">
<div class="text-center">
<i class="fas fa-exclamation-triangle text-danger"></i>
</div>
</div>
<!-- body if normal -->
<div class="card-body table-responsive p-0" v-if="!loading && !error">
<div v-if="!loading && !error" class="card-body table-responsive p-0">
<table class="table table-striped">
<caption style="display:none;">{{ $t('firefly.piggy_banks') }}</caption>
<thead>
@ -58,9 +58,9 @@
<td>
<div class="progress-group">
<div class="progress progress-sm">
<div class="progress-bar progress-bar-striped primary" v-if="piggy.attributes.pct < 100" :style="{'width': piggy.attributes.pct + '%'}"></div>
<div class="progress-bar progress-bar-striped bg-success" v-if="100 === piggy.attributes.pct"
:style="{'width': piggy.attributes.pct + '%'}"></div>
<div v-if="piggy.attributes.pct < 100" :style="{'width': piggy.attributes.pct + '%'}" class="progress-bar progress-bar-striped primary"></div>
<div v-if="100 === piggy.attributes.pct" :style="{'width': piggy.attributes.pct + '%'}"
class="progress-bar progress-bar-striped bg-success"></div>
</div>
</div>
<span class="text-success">
@ -81,7 +81,7 @@
</table>
</div>
<div class="card-footer">
<a href="./piggy-banks" class="btn btn-default button-sm"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_piggies') }}</a>
<a class="btn btn-default button-sm" href="./piggy-banks"><i class="far fa-money-bill-alt"></i> {{ $t('firefly.go_to_piggies') }}</a>
</div>
</div>
</template>

View File

@ -25,11 +25,11 @@
<span class="info-box-icon"><i class="far fa-bookmark text-info"></i></span>
<div class="info-box-content">
<span class="info-box-text" v-if="!loading && !error">{{ $t("firefly.balance") }}</span>
<span class="info-box-text" v-if="loading && !error"><i class="fas fa-spinner fa-spin"></i></span>
<span class="info-box-text" v-if="error"><i class="fas fa-exclamation-triangle text-danger"></i></span>
<span v-if="!loading && !error" class="info-box-text">{{ $t("firefly.balance") }}</span>
<span v-if="loading && !error" class="info-box-text"><i class="fas fa-spinner fa-spin"></i></span>
<span v-if="error" class="info-box-text"><i class="fas fa-exclamation-triangle text-danger"></i></span>
<!-- balance in preferred currency -->
<span class="info-box-number" v-for="balance in prefCurrencyBalances" :title="balance.sub_title">{{ balance.value_parsed }}</span>
<span v-for="balance in prefCurrencyBalances" :title="balance.sub_title" class="info-box-number">{{ balance.value_parsed }}</span>
<div class="progress bg-info">
<div class="progress-bar" style="width: 0"></div>
@ -50,11 +50,11 @@
<span class="info-box-icon"><i class="far fa-calendar-alt text-teal"></i></span>
<div class="info-box-content">
<span class="info-box-text" v-if="!loading && !error">{{ $t('firefly.bills_to_pay') }}</span>
<span class="info-box-text" v-if="loading && !error"><i class="fas fa-spinner fa-spin"></i></span>
<span class="info-box-text" v-if="error"><i class="fas fa-exclamation-triangle text-danger"></i></span>
<span v-if="!loading && !error" class="info-box-text">{{ $t('firefly.bills_to_pay') }}</span>
<span v-if="loading && !error" class="info-box-text"><i class="fas fa-spinner fa-spin"></i></span>
<span v-if="error" class="info-box-text"><i class="fas fa-exclamation-triangle text-danger"></i></span>
<!-- bills unpaid, in preferred currency. -->
<span class="info-box-number" v-for="balance in prefBillsUnpaid">{{ balance.value_parsed }}</span>
<span v-for="balance in prefBillsUnpaid" class="info-box-number">{{ balance.value_parsed }}</span>
<div class="progress bg-teal">
<div class="progress-bar" style="width: 0"></div>
@ -75,11 +75,11 @@
<span class="info-box-icon"><i class="fas fa-money-bill text-success"></i></span>
<div class="info-box-content">
<span class="info-box-text" v-if="!loading && !error">{{ $t('firefly.left_to_spend') }}</span>
<span class="info-box-text" v-if="loading && !error"><i class="fas fa-spinner fa-spin"></i></span>
<span class="info-box-text" v-if="error"><i class="fas fa-exclamation-triangle text-danger"></i></span>
<span v-if="!loading && !error" class="info-box-text">{{ $t('firefly.left_to_spend') }}</span>
<span v-if="loading && !error" class="info-box-text"><i class="fas fa-spinner fa-spin"></i></span>
<span v-if="error" class="info-box-text"><i class="fas fa-exclamation-triangle text-danger"></i></span>
<!-- left to spend in preferred currency -->
<span class="info-box-number" v-for="left in prefLeftToSpend" :title="left.sub_title">{{ left.value_parsed }}</span>
<span v-for="left in prefLeftToSpend" :title="left.sub_title" class="info-box-number">{{ left.value_parsed }}</span>
<div class="progress bg-success">
<div class="progress-bar" style="width: 0"></div>
@ -101,10 +101,10 @@
<span class="info-box-icon"><i class="fas fa-money-bill text-success"></i></span>
<div class="info-box-content">
<span class="info-box-text" v-if="!loading && !error">{{ $t('firefly.net_worth') }}</span>
<span class="info-box-text" v-if="loading && !error"><i class="fas fa-spinner fa-spin"></i></span>
<span class="info-box-text" v-if="error"><i class="fas fa-exclamation-triangle text-danger"></i></span>
<span class="info-box-number" v-for="nw in prefNetWorth" :title="nw.sub_title">{{ nw.value_parsed }}</span>
<span v-if="!loading && !error" class="info-box-text">{{ $t('firefly.net_worth') }}</span>
<span v-if="loading && !error" class="info-box-text"><i class="fas fa-spinner fa-spin"></i></span>
<span v-if="error" class="info-box-text"><i class="fas fa-exclamation-triangle text-danger"></i></span>
<span v-for="nw in prefNetWorth" :title="nw.sub_title" class="info-box-number">{{ nw.value_parsed }}</span>
<div class="progress bg-success">
<div class="progress-bar" style="width: 0"></div>
@ -241,7 +241,7 @@ export default {
* Prepare the component.
*/
prepareComponent() {
this.error=false;
this.error = false;
this.loading = true;
this.summary = [];
this.balances = [];

View File

@ -21,85 +21,85 @@
<template>
<div class="row">
<div class="col">
<div id="accordion">
<!-- we are adding the .class so bootstrap.js collapse plugin detects it -->
<div class="card card-primary">
<div class="card-header">
<h4 class="card-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
Create new accounts
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse show">
<div class="card-body">
<div class="row">
<div class="col">
<p>Explain</p>
</div>
</div>
<div class="row">
<div class="col-lg-4">
A
</div>
<div class="col-lg-8">
B
</div>
</div>
<div id="accordion">
<!-- we are adding the .class so bootstrap.js collapse plugin detects it -->
<div class="card card-primary">
<div class="card-header">
<h4 class="card-title">
<a data-parent="#accordion" data-toggle="collapse" href="#collapseOne">
Create new accounts
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse show">
<div class="card-body">
<div class="row">
<div class="col">
<p>Explain</p>
</div>
</div>
</div>
<div class="card card-secondary">
<div class="card-header">
<h4 class="card-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
Collapsible Group Danger
</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
3
wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt
laborum
eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee
nulla
assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred
nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft
beer
farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
labore sustainable VHS.
<div class="row">
<div class="col-lg-4">
A
</div>
</div>
</div>
<div class="card card-secondary">
<div class="card-header">
<h4 class="card-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
Collapsible Group Success
</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
3
wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt
laborum
eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee
nulla
assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred
nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft
beer
farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
labore sustainable VHS.
<div class="col-lg-8">
B
</div>
</div>
</div>
</div>
</div>
<div class="card card-secondary">
<div class="card-header">
<h4 class="card-title">
<a data-parent="#accordion" data-toggle="collapse" href="#collapseTwo">
Collapsible Group Danger
</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
3
wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt
laborum
eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee
nulla
assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred
nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft
beer
farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
labore sustainable VHS.
</div>
</div>
</div>
<div class="card card-secondary">
<div class="card-header">
<h4 class="card-title">
<a data-parent="#accordion" data-toggle="collapse" href="#collapseThree">
Collapsible Group Success
</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
3
wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt
laborum
eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee
nulla
assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred
nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft
beer
farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
labore sustainable VHS.
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>

View File

@ -18,8 +18,8 @@
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<template>
<div :class="'alert alert-' + type + ' alert-dismissible'" v-if="message.length > 0">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<div v-if="message.length > 0" :class="'alert alert-' + type + ' alert-dismissible'">
<button aria-hidden="true" class="close" data-dismiss="alert" type="button">×</button>
<h5>
<i v-if="'danger' === type" class="icon fas fa-ban"></i>
<i v-if="'success' === type" class="icon fas fa-thumbs-up"></i>

View File

@ -81,12 +81,12 @@ const actions = {
context.commit('setEnd', new Date(localStorage.viewRangeEnd));
}
// also set default:
if(localStorage.viewRangeDefaultStart) {
if (localStorage.viewRangeDefaultStart) {
// console.log('view range default start set from local storage.');
// console.log(localStorage.viewRangeDefaultStart);
context.commit('setDefaultStart', new Date(localStorage.viewRangeDefaultStart));
}
if(localStorage.viewRangeDefaultEnd) {
if (localStorage.viewRangeDefaultEnd) {
// console.log('view range default end set from local storage.');
// console.log(localStorage.viewRangeDefaultEnd);
context.commit('setDefaultEnd', new Date(localStorage.viewRangeDefaultEnd));

View File

@ -23,14 +23,8 @@ const lodashClonedeep = require('lodash.clonedeep');
// initial state
const state = () => ({
transactionType: 'any',
date: new Date,
time: new Date,
groupTitle: '',
transactions: [],
allowedOpposingTypes: {},
accountToTransaction: {},
sourceAllowedTypes: ['Asset account', 'Loan', 'Debt', 'Mortgage', 'Revenue account'],
destinationAllowedTypes: ['Asset account', 'Loan', 'Debt', 'Mortgage', 'Expense account'],
customDateFields: {
interest_date: false,
book_date: false,
@ -147,12 +141,6 @@ const getters = {
transactions: state => {
return state.transactions;
},
date: state => {
return state.date;
},
time: state => {
return state.time;
},
groupTitle: state => {
return state.groupTitle;
},
@ -190,9 +178,7 @@ const getters = {
}
// actions
const actions = {
}
const actions = {}
// mutations
const mutations = {
@ -208,12 +194,6 @@ const mutations = {
resetTransactions(state) {
state.transactions = [];
},
setDate(state, payload) {
state.date = payload.date;
},
setTime(state, payload) {
state.time = payload.time;
},
setGroupTitle(state, payload) {
state.groupTitle = payload.groupTitle;
},
@ -224,7 +204,7 @@ const mutations = {
state.transactions.splice(payload.index, 1);
// console.log('Deleted transaction ' + payload.index);
// console.log(state.transactions);
if(0===state.transactions.length) {
if (0 === state.transactions.length) {
// console.log('array is empty!');
}
},

View File

@ -23,16 +23,13 @@ const state = () => ({});
// getters
const getters = {
};
const getters = {};
// actions
const actions = {
};
const actions = {};
// mutations
const mutations = {
};
const mutations = {};
export default {
namespaced: true,

View File

@ -27,11 +27,17 @@
<SplitForm
v-for="(transaction, index) in this.transactions"
v-bind:key="index"
:transaction="transaction"
:index="index"
:allowed-opposing-types="allowedOpposingTypes"
:count="transactions.length"
:custom-fields="customFields"
:date="date"
:destination-allowed-types="destinationAllowedTypes"
:index="index"
:source-allowed-types="sourceAllowedTypes"
:submitted-transaction="submittedTransaction"
:time="time"
:transaction="transaction"
:transaction-type="transactionType"
v-on:uploaded-attachments="uploadedAttachment($event)"
v-on:set-marker-location="storeLocation($event)"
v-on:set-account="storeAccountValue($event)"
@ -40,13 +46,16 @@
v-on:set-time="storeTime($event)"
v-on:set-field="storeField($event)"
v-on:remove-transaction="removeTransaction($event)"
v-on:set-dest-types="setDestinationAllowedTypes($event)"
v-on:set-src-types="setSourceAllowedTypes($event)"
/>
</div>
<div class="row">
<!-- group title -->
<div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12">
<div class="card" v-if="transactions.length > 1">
<div v-if="transactions.length > 1" class="card">
<div class="card-body">
<div class="row">
<div class="col">
@ -65,14 +74,14 @@
<div class="text-xs d-none d-lg-block d-xl-block">
&nbsp;
</div>
<button @click="addTransaction" class="btn btn-outline-primary btn-block"><i class="far fa-clone"></i> {{ $t('firefly.add_another_split') }}
<button class="btn btn-outline-primary btn-block" @click="addTransaction"><i class="far fa-clone"></i> {{ $t('firefly.add_another_split') }}
</button>
</div>
<div class="col">
<div class="text-xs d-none d-lg-block d-xl-block">
&nbsp;
</div>
<button class="btn btn-success btn-block" @click="submitTransaction" :disabled="!enableSubmit">
<button :disabled="!enableSubmit" class="btn btn-success btn-block" @click="submitTransaction">
<span v-if="enableSubmit"><i class="far fa-save"></i> {{ $t('firefly.store_transaction') }}</span>
<span v-if="!enableSubmit"><i class="fas fa-spinner fa-spin"></i></span>
</button>
@ -84,13 +93,13 @@
</div>
<div class="col">
<div class="form-check">
<input class="form-check-input" type="checkbox" v-model="createAnother" id="createAnother">
<input id="createAnother" v-model="createAnother" class="form-check-input" type="checkbox">
<label class="form-check-label" for="createAnother">
<span class="small">{{ $t('firefly.create_another') }}</span>
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" v-model="resetFormAfter" id="resetFormAfter" :disabled="!createAnother">
<input id="resetFormAfter" v-model="resetFormAfter" :disabled="!createAnother" class="form-check-input" type="checkbox">
<label class="form-check-label" for="resetFormAfter">
<span class="small">{{ $t('firefly.reset_after') }}</span>
</label>
@ -161,16 +170,23 @@ export default {
returnedGroupId: 0,
returnedGroupTitle: '',
// meta data:
accountToTransaction: {}
// meta data for accounts
accountToTransaction: {},
allowedOpposingTypes: {},
defaultSourceAllowedTypes: ['Asset account', 'Loan', 'Debt', 'Mortgage', 'Revenue account'],
defaultDestinationAllowedTypes: ['Asset account', 'Loan', 'Debt', 'Mortgage', 'Expense account'],
sourceAllowedTypes: ['Asset account', 'Loan', 'Debt', 'Mortgage', 'Revenue account'],
destinationAllowedTypes: ['Asset account', 'Loan', 'Debt', 'Mortgage', 'Expense account'],
// date and time not in the store because it was buggy
date: new Date,
time: new Date,
}
},
computed: {
...mapGetters([
'transactionType',
'transactions',
'date',
'time',
'groupTitle'
])
},
@ -200,14 +216,11 @@ export default {
'setGroupTitle',
'addTransaction',
'deleteTransaction',
'setAllowedOpposingTypes',
'setTransactionError',
'setTransactionType',
'resetErrors',
'updateField',
'resetTransactions',
'setDate',
'setTime'
],
),
/**
@ -246,7 +259,6 @@ export default {
return;
}
if (false === this.inError) {
// show message:
this.errorMessage = '';
@ -399,11 +411,11 @@ export default {
storeField: function (payload) {
this.updateField(payload);
},
storeDate: function (value) {
this.setDate(value.date)
storeDate: function (payload) {
this.date = payload.date;
},
storeTime: function (value) {
this.setTime(value.time)
storeTime: function (payload) {
this.time = payload.time;
},
storeGroupTitle: function (value) {
// console.log('set group title: ' + value);
@ -702,9 +714,11 @@ export default {
theDate.setHours(this.time.getHours());
theDate.setMinutes(this.time.getMinutes());
theDate.setSeconds(this.time.getSeconds());
dateStr = this.toW3CString(this.date);
dateStr = this.toW3CString(theDate);
}
// console.log('dateStr = ' + dateStr);
let currentSplit = {
// basic
description: array.description,
@ -857,8 +871,11 @@ export default {
offsetSign + offsetHours + ':' + offsetMinutes;
},
storeAllowedOpposingTypes: function () {
// take this from API:
this.setAllowedOpposingTypes(window.allowedOpposingTypes);
axios.get('./api/v1/configuration/static/firefly.allowed_opposing_types')
.then(response => {
this.allowedOpposingTypes = response.data['firefly.allowed_opposing_types'];
// console.log('Set allowedOpposingTypes');
});
},
storeAccountToTransaction: function () {
axios.get('./api/v1/configuration/static/firefly.account_to_transaction')
@ -866,7 +883,26 @@ export default {
this.accountToTransaction = response.data['firefly.account_to_transaction'];
});
},
setDestinationAllowedTypes: function (value) {
// console.log('Create::setDestinationAllowedTypes');
// console.log(value);
if (0 === value.length) {
this.destinationAllowedTypes = this.defaultDestinationAllowedTypes;
//console.log('empty so back to defaults');
return;
}
this.destinationAllowedTypes = value;
},
setSourceAllowedTypes(value) {
// console.log('Create::setSourceAllowedTypes');
// console.log(value);
if (0 === value.length) {
this.sourceAllowedTypes = this.defaultSourceAllowedTypes;
// console.log('empty so back to defaults');
return;
}
this.sourceAllowedTypes = value;
}
},
}

View File

@ -19,7 +19,7 @@
-->
<template>
<div :class="'tab-pane' + (0===index ? ' active' : '')" :id="'split_' + index">
<div :id="'split_' + index" :class="'tab-pane' + (0===index ? ' active' : '')">
<div class="row">
<div class="col">
<div class="card">
@ -28,7 +28,7 @@
{{ $t('firefly.basic_journal_information') }}
<span v-if="count > 1">({{ index + 1 }} / {{ count }}) </span>
</h3>
<div class="card-tools" v-if="count>1">
<div v-if="count>1" class="card-tools">
<button class="btn btn-danger btn-xs" @click="removeTransaction"><i class="fas fa-trash-alt"></i></button>
</div>
</div>
@ -37,10 +37,10 @@
<div class="row">
<div class="col">
<TransactionDescription
v-on="$listeners"
v-model="transaction.description"
:index="index"
v-on="$listeners"
:errors="transaction.errors.description"
:index="index"
></TransactionDescription>
</div>
</div>
@ -49,11 +49,14 @@
<div class="col-xl-5 col-lg-5 col-md-10 col-sm-12 col-xs-12">
<!-- SOURCE -->
<TransactionAccount
v-on="$listeners"
v-model="sourceAccount"
direction="source"
:index="index"
v-on="$listeners"
:allowed-opposing-types="allowedOpposingTypes"
:destination-allowed-types="destinationAllowedTypes"
:errors="transaction.errors.source"
:index="index"
:source-allowed-types="sourceAllowedTypes"
direction="source"
/>
</div>
<!-- switcharoo! -->
@ -62,6 +65,7 @@
v-if="0 === index"
v-on="$listeners"
:index="index"
:transaction-type="transactionType"
/>
</div>
@ -69,11 +73,14 @@
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
<!-- DESTINATION -->
<TransactionAccount
v-on="$listeners"
v-model="destinationAccount"
direction="destination"
:index="index"
v-on="$listeners"
:allowed-opposing-types="allowedOpposingTypes"
:destination-allowed-types="destinationAllowedTypes"
:errors="transaction.errors.destination"
:index="index"
:source-allowed-types="sourceAllowedTypes"
direction="destination"
/>
</div>
</div>
@ -84,24 +91,24 @@
<div class="col-xl-5 col-lg-5 col-md-10 col-sm-12 col-xs-12">
<!-- AMOUNT -->
<TransactionAmount
:index="index"
:errors="transaction.errors.amount"
:amount="transaction.amount"
:transaction-type="this.transactionType"
:source-currency-symbol="this.transaction.source_account_currency_symbol"
:destination-currency-symbol="this.transaction.destination_account_currency_symbol"
v-on="$listeners"
:amount="transaction.amount"
:destination-currency-symbol="this.transaction.destination_account_currency_symbol"
:errors="transaction.errors.amount"
:index="index"
:source-currency-symbol="this.transaction.source_account_currency_symbol"
:transaction-type="this.transactionType"
/>
</div>
<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 text-center d-none d-sm-block">
<TransactionForeignCurrency
v-on="$listeners"
v-model="transaction.foreign_currency_id"
:transaction-type="this.transactionType"
:source-currency-id="this.transaction.source_account_currency_id"
v-on="$listeners"
:destination-currency-id="this.transaction.destination_account_currency_id"
:selected-currency-id="this.transaction.foreign_currency_id"
:index="index"
:selected-currency-id="this.transaction.foreign_currency_id"
:source-currency-id="this.transaction.source_account_currency_id"
:transaction-type="this.transactionType"
/>
</div>
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
@ -112,14 +119,14 @@
currency id is submitted to Firefly III.
-->
<TransactionForeignAmount
:index="index"
v-on="$listeners"
:errors="transaction.errors.foreign_amount"
v-model="transaction.foreign_amount"
:transaction-type="this.transactionType"
:source-currency-id="this.transaction.source_account_currency_id"
v-on="$listeners"
:destination-currency-id="this.transaction.destination_account_currency_id"
:errors="transaction.errors.foreign_amount"
:index="index"
:selected-currency-id="this.transaction.foreign_currency_id"
:source-currency-id="this.transaction.source_account_currency_id"
:transaction-type="this.transactionType"
/>
</div>
</div>
@ -128,26 +135,26 @@
<div class="row">
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
<TransactionDate
:index="index"
v-on="$listeners"
:date="splitDate"
:time="splitTime"
:errors="transaction.errors.date"
:index="index"
:time="splitTime"
/>
</div>
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12 offset-xl-2 offset-lg-2">
<TransactionCustomDates
:index="index"
v-on="$listeners"
:custom-fields.sync="customFields"
:errors="transaction.errors.custom_dates"
:interest-date="transaction.interest_date"
:book-date="transaction.book_date"
:process-date="transaction.process_date"
:custom-fields.sync="customFields"
:due-date="transaction.due_date"
:payment-date="transaction.payment_date"
:errors="transaction.errors.custom_dates"
:index="index"
:interest-date="transaction.interest_date"
:invoice-date="transaction.invoice_date"
:payment-date="transaction.payment_date"
:process-date="transaction.process_date"
/>
</div>
</div>
@ -174,39 +181,39 @@
<div class="row">
<div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12">
<TransactionBudget
v-on="$listeners"
v-model="transaction.budget_id"
:index="index"
:errors="transaction.errors.budget"
v-if="!('Transfer' === transactionType || 'Deposit' === transactionType)"
v-model="transaction.budget_id"
v-on="$listeners"
:errors="transaction.errors.budget"
:index="index"
/>
<TransactionCategory
v-on="$listeners"
v-model="transaction.category"
:index="index"
v-on="$listeners"
:errors="transaction.errors.category"
:index="index"
/>
</div>
<div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12">
<TransactionBill
v-on="$listeners"
v-model="transaction.bill_id"
:index="index"
:errors="transaction.errors.bill"
v-if="!('Transfer' === transactionType || 'Deposit' === transactionType)"
v-model="transaction.bill_id"
v-on="$listeners"
:errors="transaction.errors.bill"
:index="index"
/>
<TransactionTags
v-on="$listeners"
:index="index"
v-model="transaction.tags"
v-on="$listeners"
:errors="transaction.errors.tags"
:index="index"
/>
<TransactionPiggyBank
v-on="$listeners"
:index="index"
v-model="transaction.piggy_bank_id"
:errors="transaction.errors.piggy_bank"
v-if="!('Withdrawal' === transactionType || 'Deposit' === transactionType)"
v-model="transaction.piggy_bank_id"
v-on="$listeners"
:errors="transaction.errors.piggy_bank"
:index="index"
/>
</div>
</div>
@ -216,7 +223,7 @@
</div>
<!-- end card for meta -->
<!-- card for extra -->
<div class="row" v-if="hasMetaFields">
<div v-if="hasMetaFields" class="row">
<div class="col">
<div class="card">
<div class="card-header">
@ -231,52 +238,52 @@
<div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12">
<TransactionInternalReference
v-on="$listeners"
:index="index"
v-model="transaction.internal_reference"
:errors="transaction.errors.internal_reference"
v-on="$listeners"
:custom-fields.sync="customFields"
:errors="transaction.errors.internal_reference"
:index="index"
/>
<TransactionExternalUrl
v-on="$listeners"
:index="index"
v-model="transaction.external_url"
:errors="transaction.errors.external_url"
v-on="$listeners"
:custom-fields.sync="customFields"
:errors="transaction.errors.external_url"
:index="index"
/>
<TransactionNotes
v-on="$listeners"
:index="index"
v-model="transaction.notes"
:errors="transaction.errors.notes"
v-on="$listeners"
:custom-fields.sync="customFields"
:errors="transaction.errors.notes"
:index="index"
/>
</div>
<div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12">
<TransactionAttachments
:index="index"
ref="attachments"
v-on="$listeners"
:transaction_journal_id="transaction.transaction_journal_id"
:submitted_transaction="submittedTransaction"
v-model="transaction.attachments"
v-on="$listeners"
:custom-fields.sync="customFields"
:index="index"
:submitted_transaction="submittedTransaction"
:transaction_journal_id="transaction.transaction_journal_id"
/>
<TransactionLocation
v-on="$listeners"
:index="index"
v-model="transaction.notes"
:errors="transaction.errors.location"
v-on="$listeners"
:custom-fields.sync="customFields"
:errors="transaction.errors.location"
:index="index"
/>
<TransactionLinks
v-on="$listeners"
:index="index"
v-model="transaction.links"
v-on="$listeners"
:custom-fields.sync="customFields"
:index="index"
/>
</div>
@ -312,11 +319,8 @@ import TransactionNotes from "./TransactionNotes";
import TransactionLinks from "./TransactionLinks";
import TransactionAttachments from "./TransactionAttachments";
import SplitPills from "./SplitPills";
import {createNamespacedHelpers} from "vuex";
import TransactionLocation from "./TransactionLocation";
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
export default {
name: "SplitForm",
props: [
@ -325,8 +329,19 @@ export default {
'count',
'customFields', // for custom transaction form fields.
'index',
'submittedTransaction' // need to know if transaction is submitted.
'date',
'time',
'transactionType',
'submittedTransaction', // need to know if transaction is submitted.
'sourceAllowedTypes', // allowed source account types.
'destinationAllowedTypes',
'allowedOpposingTypes'
],
// watch: {
// allowedOpposingTypes: function() {
// console.log('SplitForm noticed change in allowedOpposingTypes');
// }
// },
methods: {
removeTransaction: function () {
// console.log('Will remove transaction ' + this.index);
@ -334,7 +349,6 @@ export default {
},
},
computed: {
...mapGetters(['transactionType', 'date', 'time']),
splitDate: function () {
return this.date;
},

View File

@ -19,7 +19,7 @@
-->
<template>
<div class="row" v-if="transactions.length > 1">
<div v-if="transactions.length > 1" class="row">
<div class="col">
<!-- tabs -->
<ul class="nav nav-pills ml-auto p-2">

View File

@ -21,10 +21,10 @@
<template>
<div class="form-group">
<div class="text-xs d-none d-lg-block d-xl-block">
<span class="text-muted" v-if="'any' !== this.transactionType">
<span v-if="'any' !== this.transactionType" class="text-muted">
{{ $t('firefly.' + this.transactionType) }}
</span>
<span class="text-muted" v-if="'any' === this.transactionType">&nbsp;</span>
<span v-if="'any' === this.transactionType" class="text-muted">&nbsp;</span>
</div>
<div class="btn-group d-flex">
<button class="btn btn-light" @click="switchAccounts">&harr;</button>
@ -33,27 +33,13 @@
</template>
<script>
import {createNamespacedHelpers} from "vuex";
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
export default {
name: "SwitchAccount",
props: ['index'],
props: ['index', 'transactionType'],
methods: {
...mapMutations(
[
'updateField',
],
),
switchAccounts() {
this.$emit('switch-accounts', this.index);
}
},
computed: {
...mapGetters(['transactionType']),
}
}
</script>

View File

@ -20,39 +20,39 @@
<template>
<div class="form-group">
<div class="text-xs d-none d-lg-block d-xl-block" v-if="visible">
<div v-if="visible" class="text-xs d-none d-lg-block d-xl-block">
<span v-if="0 === this.index">{{ $t('firefly.' + this.direction + '_account') }}</span>
<span class="text-warning" v-if="this.index > 0">{{ $t('firefly.first_split_overrules_' + this.direction) }}</span>
<span v-if="this.index > 0" class="text-warning">{{ $t('firefly.first_split_overrules_' + this.direction) }}</span>
</div>
<div class="text-xs d-none d-lg-block d-xl-block" v-if="!visible">
<div v-if="!visible" class="text-xs d-none d-lg-block d-xl-block">
&nbsp;
</div>
<vue-typeahead-bootstrap
v-if="visible"
v-model="accountName"
:data="accounts"
:showOnFocus=true
:inputClass="errors.length > 0 ? 'is-invalid' : ''"
:inputName="direction + '[]'"
:serializer="item => item.name_with_balance"
:minMatchingChars="3"
:placeholder="$t('firefly.' + direction + '_account')"
@input="lookupAccount"
:serializer="item => item.name_with_balance"
:showOnFocus=true
@hit="selectedAccount = $event"
@input="lookupAccount"
>
<template slot="suggestion" slot-scope="{ data, htmlText }">
<div class="d-flex" :title="data.type">
<div :title="data.type" class="d-flex">
<span v-html="htmlText"></span><br>
</div>
</template>
<template slot="append">
<div class="input-group-append">
<button tabindex="-1" class="btn btn-outline-secondary" v-on:click="clearAccount" type="button"><i class="far fa-trash-alt"></i></button>
<button class="btn btn-outline-secondary" tabindex="-1" type="button" v-on:click="clearAccount"><i class="far fa-trash-alt"></i></button>
</div>
</template>
</vue-typeahead-bootstrap>
<div class="form-control-static" v-if="!visible">
<div v-if="!visible" class="form-control-static">
<span class="small text-muted"><em>{{ $t('firefly.first_split_decides') }}</em></span>
</div>
<span v-if="errors.length > 0">
@ -65,14 +65,19 @@
import VueTypeaheadBootstrap from 'vue-typeahead-bootstrap';
import {debounce} from 'lodash';
import {createNamespacedHelpers} from "vuex";
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
export default {
name: "TransactionAccount",
components: {VueTypeaheadBootstrap},
props: ['index', 'direction', 'value', 'errors'],
props: [
'index',
'direction',
'value',
'errors',
'sourceAllowedTypes',
'destinationAllowedTypes',
'allowedOpposingTypes'
],
data() {
return {
query: '',
@ -89,13 +94,6 @@ export default {
this.createInitialSet();
},
methods: {
...mapMutations(
[
'updateField',
'setDestinationAllowedTypes',
'setSourceAllowedTypes'
],
),
getACURL: function (types, query) {
return './api/v1/autocomplete/accounts?types=' + types.join(',') + '&query=' + query;
},
@ -110,6 +108,8 @@ export default {
// set the types from the default types for this direction:
this.accountTypes = 'source' === this.direction ? this.sourceAllowedTypes : this.destinationAllowedTypes;
}
// console.log(this.direction + ': Will search for types:');
// console.log(this.accountTypes);
// update autocomplete URL:
axios.get(this.getACURL(this.accountTypes, this.accountName))
@ -125,6 +125,8 @@ export default {
if ('destination' === this.direction) {
types = this.destinationAllowedTypes;
}
// console.log(this.direction + ' initial set searches for');
// console.log(types);
axios.get(this.getACURL(types, ''))
.then(response => {
@ -134,8 +136,20 @@ export default {
}
},
watch: {
// allowedOpposingTypes: function () {
// console.log(this.direction + ' account noticed change in allowedOpposingTypes');
// },
sourceAllowedTypes: function (value) {
// console.log(this.direction + ' account noticed change in sourceAllowedTypes');
// console.log(value);
this.createInitialSet();
},
destinationAllowedTypes: function (value) {
// console.log(this.direction + ' account noticed change in destinationAllowedTypes');
// console.log(value);
this.createInitialSet();
},
selectedAccount: function (value) {
// console.log('Emit on selected account');
this.selectedAccountTrigger = true;
this.account = value;
@ -183,10 +197,10 @@ export default {
}
if ('source' === this.direction) {
this.setDestinationAllowedTypes(opposingAccounts);
this.$emit('set-dest-types', opposingAccounts);
}
if ('destination' === this.direction) {
this.setSourceAllowedTypes(opposingAccounts);
this.$emit('set-src-types', opposingAccounts);
}
},
value: function (value) {
@ -199,53 +213,15 @@ export default {
}
},
computed: {
...mapGetters([
'transactionType',
'sourceAllowedTypes',
'destinationAllowedTypes',
'allowedOpposingTypes'
]),
// 'transactionType',
// 'sourceAllowedTypes',
// 'destinationAllowedTypes',
// 'allowedOpposingTypes'
accountKey: {
get() {
return 'source' === this.direction ? 'source_account' : 'destination_account';
}
},
emitAccountId: {
get() {
return 'set-' + this.direction + '-account-id';
}
},
emitAccount: {
get() {
return 'set-' + this.direction + '-account';
}
},
emitAccountName: {
get() {
return 'set-' + this.direction + '-account-name';
}
},
emitAccountType: {
get() {
return 'set-' + this.direction + '-account-type';
}
},
emitAccountCurrencyId: {
get() {
return 'set-' + this.direction + '-account-currency-id';
}
},
emitAccountCurrencyCode: {
get() {
return 'set-' + this.direction + '-account-currency-code';
}
},
emitAccountCurrencySymbol: {
get() {
return 'set-' + this.direction + '-account-currency-symbol';
}
},
visible: {
get() {
// index 0 is always visible:

View File

@ -22,17 +22,17 @@
<div class="form-group">
<div class="text-xs">{{ $t('firefly.amount') }}</div>
<div class="input-group">
<div class="input-group-prepend" v-if="currencySymbol">
<div v-if="currencySymbol" class="input-group-prepend">
<div class="input-group-text">{{ currencySymbol }}</div>
</div>
<input
v-model="transactionAmount"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:placeholder="$t('firefly.amount')"
:title="$t('firefly.amount')"
autocomplete="off"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
name="amount[]"
type="number"
v-model="transactionAmount"
:placeholder="$t('firefly.amount')"
>
</div>
<span v-if="errors.length > 0">

View File

@ -19,17 +19,17 @@
-->
<template>
<div class="form-group" v-if="showField">
<div v-if="showField" class="form-group">
<div class="text-xs d-none d-lg-block d-xl-block">
{{ $t('firefly.attachments') }}
</div>
<div class="input-group">
<input
type="file"
multiple
ref="att"
name="attachments[]"
class="form-control"
multiple
name="attachments[]"
type="file"
/>
</div>
</div>

View File

@ -26,14 +26,14 @@
<div class="input-group">
<select
ref="bill"
:title="$t('firefly.bill')"
v-model="bill"
autocomplete="off"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:title="$t('firefly.bill')"
autocomplete="off"
name="bill_id[]"
v-on:submit.prevent
>
<option v-for="bill in this.billList" :value="bill.id" :label="bill.name">{{ bill.name }}</option>
<option v-for="bill in this.billList" :label="bill.name" :value="bill.id">{{ bill.name }}</option>
</select>
</div>

View File

@ -26,14 +26,14 @@
<div class="input-group">
<select
ref="budget"
:title="$t('firefly.budget')"
v-model="budget"
autocomplete="off"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:title="$t('firefly.budget')"
autocomplete="off"
name="budget_id[]"
v-on:submit.prevent
>
<option v-for="budget in this.budgetList" :value="budget.id" :label="budget.name">{{ budget.name }}</option>
<option v-for="budget in this.budgetList" :label="budget.name" :value="budget.id">{{ budget.name }}</option>
</select>
</div>
<span v-if="errors.length > 0">

View File

@ -25,20 +25,20 @@
</div>
<vue-typeahead-bootstrap
inputName="category[]"
v-model="category"
:data="categories"
:placeholder="$t('firefly.category')"
:showOnFocus=true
:inputClass="errors.length > 0 ? 'is-invalid' : ''"
:minMatchingChars="3"
:placeholder="$t('firefly.category')"
:serializer="item => item.name"
:showOnFocus=true
inputName="category[]"
@hit="selectedCategory = $event"
@input="lookupCategory"
>
<template slot="append">
<div class="input-group-append">
<button tabindex="-1" v-on:click="clearCategory" class="btn btn-outline-secondary" type="button"><i class="far fa-trash-alt"></i></button>
<button class="btn btn-outline-secondary" tabindex="-1" type="button" v-on:click="clearCategory"><i class="far fa-trash-alt"></i></button>
</div>
</template>
</vue-typeahead-bootstrap>

View File

@ -20,21 +20,21 @@
<template>
<div>
<div class="form-group" v-for="(enabled, name) in availableFields">
<div class="text-xs d-none d-lg-block d-xl-block" v-if="enabled && isDateField(name)">
<div v-for="(enabled, name) in availableFields" class="form-group">
<div v-if="enabled && isDateField(name)" class="text-xs d-none d-lg-block d-xl-block">
{{ $t('form.' + name) }}
</div>
<div class="input-group" v-if="enabled && isDateField(name)">
<div v-if="enabled && isDateField(name)" class="input-group">
<input
class="form-control"
type="date"
:ref="name"
:title="$t('form.' + name)"
:value="getFieldValue(name)"
@change="setFieldValue($event, name)"
autocomplete="off"
:name="name + '[]'"
:placeholder="$t('form.' + name)"
:title="$t('form.' + name)"
:value="getFieldValue(name)"
autocomplete="off"
class="form-control"
type="date"
@change="setFieldValue($event, name)"
v-on:submit.prevent
>
</div>
@ -75,22 +75,22 @@ export default {
customFields: function (value) {
this.availableFields = value;
},
interestDate: function(value) {
interestDate: function (value) {
this.dates.interest_date = value;
},
bookDate: function(value) {
bookDate: function (value) {
this.dates.book_date = value;
},
processDate: function(value) {
processDate: function (value) {
this.dates.process_date = value;
},
dueDate: function(value) {
dueDate: function (value) {
this.dates.due_date = value;
},
paymentDate: function(value) {
paymentDate: function (value) {
this.dates.payment_date = value;
},
invoiceDate: function(value) {
invoiceDate: function (value) {
this.dates.invoice_date = value;
},
},

View File

@ -25,26 +25,26 @@
</div>
<div class="input-group">
<input
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
type="date"
ref="date"
:title="$t('firefly.date')"
v-model="dateStr"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:disabled="index > 0"
:placeholder="dateStr"
:title="$t('firefly.date')"
autocomplete="off"
name="date[]"
:placeholder="dateStr"
type="date"
>
<input
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
type="time"
ref="time"
:title="$t('firefly.time')"
v-model="timeStr"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:disabled="index > 0"
:placeholder="timeStr"
:title="$t('firefly.time')"
autocomplete="off"
name="time[]"
:placeholder="timeStr"
type="time"
>
</div>
<span v-if="errors.length > 0">

View File

@ -21,20 +21,20 @@
<template>
<div class="form-group">
<vue-typeahead-bootstrap
inputName="description[]"
v-model="description"
:data="descriptions"
:placeholder="$t('firefly.description')"
:showOnFocus=true
autofocus
:inputClass="errors.length > 0 ? 'is-invalid' : ''"
:minMatchingChars="3"
:placeholder="$t('firefly.description')"
:serializer="item => item.description"
:showOnFocus=true
autofocus
inputName="description[]"
@input="lookupDescription"
>
<template slot="append">
<div class="input-group-append">
<button tabindex="-1" v-on:click="clearDescription" class="btn btn-outline-secondary" type="button"><i class="far fa-trash-alt"></i></button>
<button class="btn btn-outline-secondary" tabindex="-1" type="button" v-on:click="clearDescription"><i class="far fa-trash-alt"></i></button>
</div>
</template>
</vue-typeahead-bootstrap>

View File

@ -19,20 +19,20 @@
-->
<template>
<div class="form-group" v-if="showField">
<div v-if="showField" class="form-group">
<div class="text-xs d-none d-lg-block d-xl-block">
{{ $t('firefly.external_url') }}
</div>
<div class="input-group">
<input
type="url"
name="external_url[]"
:placeholder="$t('firefly.external_url')"
v-model="url"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:placeholder="$t('firefly.external_url')"
name="external_url[]"
type="url"
/>
<div class="input-group-append">
<button tabindex="-1" type="button" class="btn btn-outline-secondary"><i class="far fa-trash-alt"></i></button>
<button class="btn btn-outline-secondary" tabindex="-1" type="button"><i class="far fa-trash-alt"></i></button>
</div>
</div>
</div>

View File

@ -20,17 +20,17 @@
<template>
<!-- FOREIGN AMOUNT -->
<div class="form-group" v-if="isVisible">
<div v-if="isVisible" class="form-group">
<div class="text-xs">{{ $t('form.foreign_amount') }}</div>
<div class="input-group">
<input
v-model="amount"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:placeholder="$t('form.foreign_amount')"
:title="$t('form.foreign_amount')"
autocomplete="off"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
name="foreign_amount[]"
type="number"
v-model="amount"
:placeholder="$t('form.foreign_amount')"
>
</div>
<span v-if="errors.length > 0">

View File

@ -20,10 +20,10 @@
<template>
<!-- FOREIGN Currency -->
<div class="form-group" v-if="isVisible">
<div v-if="isVisible" class="form-group">
<div class="text-xs">&nbsp;</div>
<div class="input-group">
<select name="foreign_currency_id[]" v-model="selectedCurrency" class="form-control">
<select v-model="selectedCurrency" class="form-control" name="foreign_currency_id[]">
<option v-for="currency in selectableCurrencies" :label="currency.name" :value="currency.id">{{ currency.name }}</option>
</select>
</div>

View File

@ -24,19 +24,19 @@
{{ $t('firefly.split_transaction_title') }}
</div>
<vue-typeahead-bootstrap
inputName="group_title"
v-model="title"
:data="descriptions"
:placeholder="$t('firefly.split_transaction_title')"
:showOnFocus=true
:minMatchingChars="3"
:serializer="item => item.description"
@input="lookupDescription"
:inputClass="errors.length > 0 ? 'is-invalid' : ''"
:minMatchingChars="3"
:placeholder="$t('firefly.split_transaction_title')"
:serializer="item => item.description"
:showOnFocus=true
inputName="group_title"
@input="lookupDescription"
>
<template slot="append">
<div class="input-group-append">
<button tabindex="-1" v-on:click="clearDescription" class="btn btn-outline-secondary" type="button"><i class="far fa-trash-alt"></i></button>
<button class="btn btn-outline-secondary" tabindex="-1" type="button" v-on:click="clearDescription"><i class="far fa-trash-alt"></i></button>
</div>
</template>
</vue-typeahead-bootstrap>

View File

@ -19,20 +19,20 @@
-->
<template>
<div class="form-group" v-if="showField">
<div v-if="showField" class="form-group">
<div class="text-xs d-none d-lg-block d-xl-block">
{{ $t('firefly.internal_reference') }}
</div>
<div class="input-group">
<input
type="text"
name="internal_reference[]"
v-model="reference"
:placeholder="$t('firefly.internal_reference')"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:placeholder="$t('firefly.internal_reference')"
name="internal_reference[]"
type="text"
/>
<div class="input-group-append">
<button tabindex="-1" type="button" class="btn btn-outline-secondary"><i class="far fa-trash-alt"></i></button>
<button class="btn btn-outline-secondary" tabindex="-1" type="button"><i class="far fa-trash-alt"></i></button>
</div>
</div>
</div>
@ -57,8 +57,7 @@ export default {
return false;
}
},
methods: {
},
methods: {},
watch: {
customFields: function (value) {
this.availableFields = value;

View File

@ -27,10 +27,10 @@
<div class="row">
<div class="col">
<p v-if="links.length === 0">
<button data-toggle="modal" data-target="#linkModal" class="btn btn-default btn-xs"><i class="fas fa-plus"></i> Add transaction link</button>
<button class="btn btn-default btn-xs" data-target="#linkModal" data-toggle="modal"><i class="fas fa-plus"></i> Add transaction link</button>
</p>
<ul class="list-group" v-if="links.length > 0">
<li class="list-group-item" v-for="transaction in links">
<ul v-if="links.length > 0" class="list-group">
<li v-for="transaction in links" class="list-group-item">
<em>{{ getTextForLinkType(transaction.link_type_id) }}</em>
<a :href='"./transaction/show/" + transaction.transaction_group_id'>{{ transaction.description }}</a>
@ -59,24 +59,24 @@
}}</span>)
</span>
<div class="btn-group btn-group-xs float-right">
<a tabindex="-1" href="#" class="btn btn-xs btn-default"><i class="far fa-edit"></i></a>
<a tabindex="-1" href="#" class="btn btn-xs btn-danger"><i class="far fa-trash-alt"></i></a>
<a class="btn btn-xs btn-default" href="#" tabindex="-1"><i class="far fa-edit"></i></a>
<a class="btn btn-xs btn-danger" href="#" tabindex="-1"><i class="far fa-trash-alt"></i></a>
</div>
</li>
</ul>
<div class="form-text" v-if="links.length > 0">
<button data-toggle="modal" data-target="#linkModal" class="btn btn-default"><i class="fas fa-plus"></i></button>
<div v-if="links.length > 0" class="form-text">
<button class="btn btn-default" data-target="#linkModal" data-toggle="modal"><i class="fas fa-plus"></i></button>
</div>
</div>
</div>
</div>
<!-- modal -->
<div class="modal" tabindex="-1" id="linkModal">
<div id="linkModal" class="modal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Transaction thing dialog.</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<button aria-label="Close" class="close" data-dismiss="modal" type="button">
<span aria-hidden="true">&times;</span>
</button>
</div>
@ -94,10 +94,10 @@
<div class="col">
<form v-on:submit.prevent="search">
<div class="input-group">
<input autocomplete="off" maxlength="255" type="text" name="search" v-model="query" id="query"
class="form-control" placeholder="Search query">
<input id="query" v-model="query" autocomplete="off" class="form-control" maxlength="255" name="search"
placeholder="Search query" type="text">
<div class="input-group-append">
<button type="submit" class="btn btn-default"><i class="fas fa-search"></i> Search</button>
<button class="btn btn-default" type="submit"><i class="fas fa-search"></i> Search</button>
</div>
</div>
</form>
@ -107,28 +107,28 @@
<div class="col">
<span v-if="searching"><i class="fas fa-spinner fa-spin"></i></span>
<h4 v-if="searchResults.length > 0">Search results</h4>
<table class="table table-sm" v-if="searchResults.length > 0">
<table v-if="searchResults.length > 0" class="table table-sm">
<thead>
<tr>
<th style="width:33%" colspan="2">Include?</th>
<th colspan="2" style="width:33%">Include?</th>
<th>Transaction</th>
</tr>
</thead>
<tbody>
<tr v-for="result in searchResults">
<td>
<input type="checkbox" class="form-control"
<input v-model="result.selected" class="form-control"
type="checkbox"
@change="selectTransaction($event)"
v-model="result.selected"
/>
</td>
<td>
<select
@change="selectLinkType($event)"
class="form-control"
v-model="result.link_type_id"
class="form-control"
@change="selectLinkType($event)"
>
<option v-for="linkType in linkTypes" :value="linkType.id + '-' + linkType.direction" :label="linkType.type">{{
<option v-for="linkType in linkTypes" :label="linkType.type" :value="linkType.id + '-' + linkType.direction">{{
linkType.type
}}
</option>
@ -175,7 +175,7 @@
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button class="btn btn-secondary" data-dismiss="modal" type="button">Close</button>
</div>
</div>
</div>

View File

@ -23,9 +23,9 @@
<caption style="display:none;">{{ $t('firefly.transaction_table_description') }}</caption>
<thead>
<tr>
<th scope="col" class="text-left">{{ $t('firefly.description') }}</th>
<th class="text-left" scope="col">{{ $t('firefly.description') }}</th>
<th scope="col">{{ $t('firefly.opposing_account') }}</th>
<th scope="col" class="text-right">{{ $t('firefly.amount') }}</th>
<th class="text-right" scope="col">{{ $t('firefly.amount') }}</th>
<th scope="col">{{ $t('firefly.category') }}</th>
<th scope="col">{{ $t('firefly.budget') }}</th>
</tr>
@ -40,10 +40,10 @@
</td>
<td>
<span v-for="tr in transaction.attributes.transactions">
<a :href="'accounts/show/' + tr.destination_id" v-if="'withdrawal' === tr.type">{{ tr.destination_name }}</a>
<a :href="'accounts/show/' + tr.source_id" v-if="'deposit' === tr.type">{{ tr.source_name }}</a>
<a :href="'accounts/show/' + tr.destination_id" v-if="'transfer' === tr.type && tr.source_id === account_id">{{ tr.destination_name }}</a>
<a :href="'accounts/show/' + tr.source_id" v-if="'transfer' === tr.type && tr.destination_id === account_id">{{ tr.source_name }}</a>
<a v-if="'withdrawal' === tr.type" :href="'accounts/show/' + tr.destination_id">{{ tr.destination_name }}</a>
<a v-if="'deposit' === tr.type" :href="'accounts/show/' + tr.source_id">{{ tr.source_name }}</a>
<a v-if="'transfer' === tr.type && tr.source_id === account_id" :href="'accounts/show/' + tr.destination_id">{{ tr.destination_name }}</a>
<a v-if="'transfer' === tr.type && tr.destination_id === account_id" :href="'accounts/show/' + tr.source_id">{{ tr.source_name }}</a>
<br/>
</span>
</td>
@ -65,12 +65,12 @@
</td>
<td>
<span v-for="tr in transaction.attributes.transactions">
<a :href="'categories/show/' + tr.category_id" v-if="0!==tr.category_id">{{ tr.category_name }}</a><br/>
<a v-if="0!==tr.category_id" :href="'categories/show/' + tr.category_id">{{ tr.category_name }}</a><br/>
</span>
</td>
<td>
<span v-for="tr in transaction.attributes.transactions">
<a :href="'budgets/show/' + tr.budget_id" v-if="0!==tr.budget_id">{{ tr.budget_name }}</a><br/>
<a v-if="0!==tr.budget_id" :href="'budgets/show/' + tr.budget_id">{{ tr.budget_name }}</a><br/>
</span>
</td>
</tr>

View File

@ -23,9 +23,9 @@
<caption style="display:none;">{{ $t('firefly.transaction_table_description') }}</caption>
<thead>
<tr>
<th scope="col" class="text-left">{{ $t('firefly.description') }}</th>
<th class="text-left" scope="col">{{ $t('firefly.description') }}</th>
<th scope="col">{{ $t('firefly.opposing_account') }}</th>
<th scope="col" class="text-right">{{ $t('firefly.amount') }}</th>
<th class="text-right" scope="col">{{ $t('firefly.amount') }}</th>
</tr>
</thead>
<tbody>
@ -38,10 +38,10 @@
</td>
<td>
<span v-for="tr in transaction.attributes.transactions">
<a :href="'accounts/show/' + tr.destination_id" v-if="'withdrawal' === tr.type">{{ tr.destination_name }}</a>
<a :href="'accounts/show/' + tr.source_id" v-if="'deposit' === tr.type">{{ tr.source_name }}</a>
<a :href="'accounts/show/' + tr.destination_id" v-if="'transfer' === tr.type && tr.source_id === account_id">{{ tr.destination_name }}</a>
<a :href="'accounts/show/' + tr.source_id" v-if="'transfer' === tr.type && tr.destination_id === account_id">{{ tr.source_name }}</a>
<a v-if="'withdrawal' === tr.type" :href="'accounts/show/' + tr.destination_id">{{ tr.destination_name }}</a>
<a v-if="'deposit' === tr.type" :href="'accounts/show/' + tr.source_id">{{ tr.source_name }}</a>
<a v-if="'transfer' === tr.type && tr.source_id === account_id" :href="'accounts/show/' + tr.destination_id">{{ tr.destination_name }}</a>
<a v-if="'transfer' === tr.type && tr.destination_id === account_id" :href="'accounts/show/' + tr.source_id">{{ tr.source_name }}</a>
<br/>
</span>
</td>

View File

@ -23,14 +23,15 @@
<caption style="display:none;">{{ $t('firefly.transaction_table_description') }}</caption>
<thead>
<tr>
<th scope="col" class="text-left">{{ $t('firefly.description') }}</th>
<th scope="col" class="text-right">{{ $t('firefly.amount') }}</th>
<th class="text-left" scope="col">{{ $t('firefly.description') }}</th>
<th class="text-right" scope="col">{{ $t('firefly.amount') }}</th>
</tr>
</thead>
<tbody>
<tr v-for="transaction in this.transactions">
<td>
<a :href="'transactions/show/' + transaction.id " :title="new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'long', day: 'numeric' }).format(new Date(transaction.attributes.transactions[0].date))">
<a :href="'transactions/show/' + transaction.id "
:title="new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'long', day: 'numeric' }).format(new Date(transaction.attributes.transactions[0].date))">
<span v-if="transaction.attributes.transactions.length > 1">{{ transaction.attributes.group_title }}</span>
<span v-if="1===transaction.attributes.transactions.length">{{ transaction.attributes.transactions[0].description }}</span>
</a>
@ -67,8 +68,7 @@ export default {
created() {
this.locale = localStorage.locale ?? 'en-US';
},
methods: {
},
methods: {},
props: {
transactions: {
type: Array,

View File

@ -19,16 +19,16 @@
-->
<template>
<div class="form-group" v-if="showField">
<div v-if="showField" class="form-group">
<div class="text-xs d-none d-lg-block d-xl-block">
{{ $t('firefly.location') }}
</div>
<div style="width:100%;height:300px;">
<l-map
style="width:100%;height:300px;"
:zoom="zoom"
ref="myMap" @ready="prepMap()"
ref="myMap"
:center="center"
:zoom="zoom" style="width:100%;height:300px;"
@ready="prepMap()"
@update:zoom="zoomUpdated"
@update:center="centerUpdated"
@update:bounds="boundsUpdated"

View File

@ -20,7 +20,7 @@
<template>
<div class="form-group" v-if="showField">
<div v-if="showField" class="form-group">
<div class="text-xs d-none d-lg-block d-xl-block">
{{ $t('firefly.notes') }}
</div>

View File

@ -26,14 +26,14 @@
<div class="input-group">
<select
ref="piggy_bank_id"
:title="$t('firefly.piggy_bank')"
v-model="piggy_bank_id"
autocomplete="off"
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
:title="$t('firefly.piggy_bank')"
autocomplete="off"
name="piggy_bank_id[]"
v-on:submit.prevent
>
<option v-for="piggy in this.piggyList" :value="piggy.id" :label="piggy.name_with_balance">{{ piggy.name_with_balance }}</option>
<option v-for="piggy in this.piggyList" :label="piggy.name_with_balance" :value="piggy.id">{{ piggy.name_with_balance }}</option>
</select>
</div>

View File

@ -47,6 +47,8 @@
"go_to_expenses": "\u041e\u0442\u0438\u0434\u0438 \u0432 \u0420\u0430\u0437\u0445\u043e\u0434\u0438",
"go_to_bills": "\u0412\u0438\u0436 \u0441\u043c\u0435\u0442\u043a\u0438\u0442\u0435 \u0441\u0438",
"bills": "\u0421\u043c\u0435\u0442\u043a\u0438",
"last_thirty_days": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u0442\u0440\u0438\u0439\u0441\u0435\u0442 \u0434\u043d\u0438",
"last_seven_days": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u0441\u0435\u0434\u0435\u043c \u0434\u043d\u0438",
"go_to_piggies": "\u0412\u0438\u0436 \u043a\u0430\u0441\u0438\u0447\u043a\u0438\u0442\u0435 \u0441\u0438",
"saved": "\u0417\u0430\u043f\u0438\u0441\u0430\u043d",
"piggy_banks": "\u041a\u0430\u0441\u0438\u0447\u043a\u0438",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Go to expenses",
"go_to_bills": "P\u0159ej\u00edt k \u00fa\u010dt\u016fm",
"bills": "\u00da\u010dty",
"last_thirty_days": "Uplynul\u00fdch 30 dn\u00ed",
"last_seven_days": "Uplynul\u00fdch 7 dn\u016f",
"go_to_piggies": "P\u0159ej\u00edt k pokladni\u010dk\u00e1m",
"saved": "Saved",
"piggy_banks": "Pokladni\u010dky",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Zu Ausgaben wechseln",
"go_to_bills": "Rechnungen anzeigen",
"bills": "Rechnungen",
"last_thirty_days": "Letzte 30 Tage",
"last_seven_days": "Letzte sieben Tage",
"go_to_piggies": "Sparschweine anzeigen",
"saved": "Gespeichert",
"piggy_banks": "Sparschweine",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bd\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b9\u03c2 \u03b4\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2",
"go_to_bills": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bd\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b1 \u03c0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1",
"bills": "\u03a0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1",
"last_thirty_days": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 \u03c4\u03c1\u03b9\u03ac\u03bd\u03c4\u03b1 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2",
"last_seven_days": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 \u03b5\u03c0\u03c4\u03ac \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2",
"go_to_piggies": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bd\u03b5\u03c4\u03b5 \u03c3\u03c4\u03bf\u03c5\u03c2 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03c2 \u03c3\u03b1\u03c2",
"saved": "\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c4\u03b7\u03ba\u03b5",
"piggy_banks": "\u039a\u03bf\u03c5\u03bc\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03c2",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Go to expenses",
"go_to_bills": "Go to your bills",
"bills": "Bills",
"last_thirty_days": "Last thirty days",
"last_seven_days": "Last seven days",
"go_to_piggies": "Go to your piggy banks",
"saved": "Saved",
"piggy_banks": "Piggy banks",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Go to expenses",
"go_to_bills": "Go to your bills",
"bills": "Bills",
"last_thirty_days": "Last thirty days",
"last_seven_days": "Last seven days",
"go_to_piggies": "Go to your piggy banks",
"saved": "Saved",
"piggy_banks": "Piggy banks",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Ir a gastos",
"go_to_bills": "Ir a tus cuentas",
"bills": "Facturas",
"last_thirty_days": "\u00daltimos treinta d\u00edas",
"last_seven_days": "\u00daltimos siete d\u00edas",
"go_to_piggies": "Ir a tu hucha",
"saved": "Guardado",
"piggy_banks": "Huchas",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Go to expenses",
"go_to_bills": "Avaa omat laskut",
"bills": "Laskut",
"last_thirty_days": "Viimeiset 30 p\u00e4iv\u00e4\u00e4",
"last_seven_days": "Viimeiset 7 p\u00e4iv\u00e4\u00e4",
"go_to_piggies": "Tarkastele s\u00e4\u00e4st\u00f6possujasi",
"saved": "Saved",
"piggy_banks": "S\u00e4\u00e4st\u00f6possut",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Aller aux d\u00e9penses",
"go_to_bills": "G\u00e9rer vos factures",
"bills": "Factures",
"last_thirty_days": "Trente derniers jours",
"last_seven_days": "7 Derniers Jours",
"go_to_piggies": "G\u00e9rer vos tirelires",
"saved": "Sauvegard\u00e9",
"piggy_banks": "Tirelires",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Ugr\u00e1s a kiad\u00e1sokra",
"go_to_bills": "Ugr\u00e1s a sz\u00e1ml\u00e1khoz",
"bills": "Sz\u00e1ml\u00e1k",
"last_thirty_days": "Elm\u00falt harminc nap",
"last_seven_days": "Utols\u00f3 h\u00e9t nap",
"go_to_piggies": "Ugr\u00e1s a malacperselyekhez",
"saved": "Mentve",
"piggy_banks": "Malacperselyek",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Vai alle spese",
"go_to_bills": "Vai alle tue bollette",
"bills": "Bollette",
"last_thirty_days": "Ultimi trenta giorni",
"last_seven_days": "Ultimi sette giorni",
"go_to_piggies": "Vai ai tuoi salvadanai",
"saved": "Salvata",
"piggy_banks": "Salvadanai",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Go to expenses",
"go_to_bills": "G\u00e5 til regningene dine",
"bills": "Regninger",
"last_thirty_days": "Tredve siste dager",
"last_seven_days": "Syv siste dager",
"go_to_piggies": "G\u00e5 til sparegrisene dine",
"saved": "Saved",
"piggy_banks": "Sparegriser",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Ga naar je uitgaven",
"go_to_bills": "Ga naar je contracten",
"bills": "Contracten",
"last_thirty_days": "Laatste dertig dagen",
"last_seven_days": "Laatste zeven dagen",
"go_to_piggies": "Ga naar je spaarpotjes",
"saved": "Opgeslagen",
"piggy_banks": "Spaarpotjes",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Przejd\u017a do wydatk\u00f3w",
"go_to_bills": "Przejd\u017a do swoich rachunk\u00f3w",
"bills": "Rachunki",
"last_thirty_days": "Ostanie 30 dni",
"last_seven_days": "Ostatnie 7 dni",
"go_to_piggies": "Przejd\u017a do swoich skarbonek",
"saved": "Zapisano",
"piggy_banks": "Skarbonki",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Ir para despesas",
"go_to_bills": "V\u00e1 para suas contas",
"bills": "Faturas",
"last_thirty_days": "\u00daltimos 30 dias",
"last_seven_days": "\u00daltimos sete dias",
"go_to_piggies": "V\u00e1 para sua poupan\u00e7a",
"saved": "Salvo",
"piggy_banks": "Cofrinhos",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Ir para despesas",
"go_to_bills": "Ir para contas",
"bills": "Contas",
"last_thirty_days": "\u00daltimos trinta dias",
"last_seven_days": "\u00daltimos sete dias",
"go_to_piggies": "Ir para mealheiros",
"saved": "Guardado",
"piggy_banks": "Mealheiros",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Go to expenses",
"go_to_bills": "Mergi la facturi",
"bills": "Facturi",
"last_thirty_days": "Ultimele 30 de zile",
"last_seven_days": "Ultimele 7 zile",
"go_to_piggies": "Mergi la pu\u0219culi\u021b\u0103",
"saved": "Salvat",
"piggy_banks": "Pu\u0219culi\u021b\u0103",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c",
"go_to_bills": "\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0432\u0430\u0448\u0438\u043c \u0441\u0447\u0435\u0442\u0430\u043c \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443",
"bills": "\u0421\u0447\u0435\u0442\u0430 \u043a \u043e\u043f\u043b\u0430\u0442\u0435",
"last_thirty_days": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 30 \u0434\u043d\u0435\u0439",
"last_seven_days": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 7 \u0434\u043d\u0435\u0439",
"go_to_piggies": "\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u043f\u0438\u043b\u043a\u0430\u043c",
"saved": "\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e",
"piggy_banks": "\u041a\u043e\u043f\u0438\u043b\u043a\u0438",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Zobrazi\u0165 v\u00fddavky",
"go_to_bills": "Zobrazi\u0165 \u00fa\u010dty",
"bills": "\u00da\u010dty",
"last_thirty_days": "Uplynul\u00fdch 30 dn\u00ed",
"last_seven_days": "Uplynul\u00fdch 7 dn\u00ed",
"go_to_piggies": "Zobrazi\u0165 pokladni\u010dky",
"saved": "Ulo\u017een\u00e9",
"piggy_banks": "Pokladni\u010dky",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "G\u00e5 till utgifter",
"go_to_bills": "G\u00e5 till dina notor",
"bills": "Notor",
"last_thirty_days": "Senaste 30 dagarna",
"last_seven_days": "Senaste 7 dagarna",
"go_to_piggies": "G\u00e5 till dina sparb\u00f6ssor",
"saved": "Sparad",
"piggy_banks": "Spargrisar",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Go to expenses",
"go_to_bills": "\u0110i \u0111\u1ebfn h\u00f3a \u0111\u01a1n c\u1ee7a b\u1ea1n",
"bills": "H\u00f3a \u0111\u01a1n",
"last_thirty_days": "Ba m\u01b0\u01a1i ng\u00e0y g\u1ea7n \u0111\u00e2y",
"last_seven_days": "B\u1ea3y ng\u00e0y g\u1ea7n \u0111\u00e2y",
"go_to_piggies": "T\u1edbi heo \u0111\u1ea5t c\u1ee7a b\u1ea1n",
"saved": "Saved",
"piggy_banks": "Heo \u0111\u1ea5t",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "\u524d\u5f80\u652f\u51fa",
"go_to_bills": "\u524d\u5f80\u8d26\u5355",
"bills": "\u8d26\u5355",
"last_thirty_days": "\u6700\u8fd1 30 \u5929",
"last_seven_days": "\u6700\u8fd1 7 \u5929",
"go_to_piggies": "\u524d\u5f80\u60a8\u7684\u5b58\u94b1\u7f50",
"saved": "\u5df2\u4fdd\u5b58",
"piggy_banks": "\u5b58\u94b1\u7f50",

View File

@ -47,6 +47,8 @@
"go_to_expenses": "Go to expenses",
"go_to_bills": "\u524d\u5f80\u60a8\u7684\u5e33\u55ae",
"bills": "\u5e33\u55ae",
"last_thirty_days": "\u6700\u8fd130\u5929",
"last_seven_days": "\u6700\u8fd17\u5929",
"go_to_piggies": "\u524d\u5f80\u60a8\u7684\u5c0f\u8c6c\u64b2\u6eff",
"saved": "Saved",
"piggy_banks": "\u5c0f\u8c6c\u64b2\u6eff",

View File

@ -89,10 +89,10 @@
"@babel/helper-annotate-as-pure" "^7.12.13"
regexpu-core "^4.7.1"
"@babel/helper-define-polyfill-provider@^0.1.2":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.2.tgz#619f01afe1deda460676c25c463b42eaefdb71a2"
integrity sha512-hWeolZJivTNGHXHzJjQz/NwDaG4mGXf22ZroOP8bQYgvHNzaQ5tylsVbAcAS2oDjXBwpu8qH2I/654QFS2rDpw==
"@babel/helper-define-polyfill-provider@^0.1.4":
version "0.1.4"
resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.4.tgz#b618b087c6a0328127e5d53576df818bcee2b15f"
integrity sha512-K5V2GaQZ1gpB+FTXM4AFVG2p1zzhm67n9wrQCJYNzvuLzQybhJyftW7qeDd2uUxPDNdl5Rkon1rOAeUeNDZ28Q==
dependencies:
"@babel/helper-compilation-targets" "^7.13.0"
"@babel/helper-module-imports" "^7.12.13"
@ -865,9 +865,9 @@
integrity sha512-h0lY7g36rhjNV8KVHKS3/BEOgfsxu0AiRI8+ry5IFBGEsQFkpjxtcpVc9ndN8zrKUeMZXAWMc7eQMepfgykpxQ==
"@types/chart.js@^2.7.55":
version "2.9.30"
resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.9.30.tgz#34b99897f4f5ef0f74c8fe4ced70ac52b4d752dd"
integrity sha512-EgjxUUZFvf6ls3kW2CwyrnSJhgyKxgwrlp/W5G9wqyPEO9iFatO63zAA7L24YqgMxiDjQ+tG7ODU+2yWH91lPg==
version "2.9.31"
resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.9.31.tgz#e8ebc7ed18eb0e5114c69bd46ef8e0037c89d39d"
integrity sha512-hzS6phN/kx3jClk3iYqEHNnYIRSi4RZrIGJ8CDLjgatpHoftCezvC44uqB3o3OUm9ftU1m7sHG8+RLyPTlACrA==
dependencies:
moment "^2.10.2"
@ -1369,28 +1369,28 @@ babel-plugin-dynamic-import-node@^2.3.3:
object.assign "^4.1.0"
babel-plugin-polyfill-corejs2@^0.1.4:
version "0.1.6"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.6.tgz#947a1227efa1a14ce09ac5fafc66ce8e039071e2"
integrity sha512-1PfghLDuzX5lFY6XXO0hrfxwYf0LD9YajMWeQBGNaPNLQ35paV7YB4hlFW+HfwFS5kcp4rtPI/237xLfQ1ah8A==
version "0.1.8"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.8.tgz#54ef37b1c4b2311e515029e8f1f07bbd4d7a5321"
integrity sha512-kB5/xNR9GYDuRmVlL9EGfdKBSUVI/9xAU7PCahA/1hbC2Jbmks9dlBBYjHF9IHMNY2jV/G2lIG7z0tJIW27Rog==
dependencies:
"@babel/compat-data" "^7.13.0"
"@babel/helper-define-polyfill-provider" "^0.1.2"
"@babel/helper-define-polyfill-provider" "^0.1.4"
semver "^6.1.1"
babel-plugin-polyfill-corejs3@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.4.tgz#2ae290200e953bade30907b7a3bebcb696e6c59d"
integrity sha512-ysSzFn/qM8bvcDAn4mC7pKk85Y5dVaoa9h4u0mHxOEpDzabsseONhUpR7kHxpUinfj1bjU7mUZqD23rMZBoeSg==
version "0.1.6"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.6.tgz#ed1b02fba4885e0892e06094e27865f499758d27"
integrity sha512-IkYhCxPrjrUWigEmkMDXYzM5iblzKCdCD8cZrSAkQOyhhJm26DcG+Mxbx13QT//Olkpkg/AlRdT2L+Ww4Ciphw==
dependencies:
"@babel/helper-define-polyfill-provider" "^0.1.2"
"@babel/helper-define-polyfill-provider" "^0.1.4"
core-js-compat "^3.8.1"
babel-plugin-polyfill-regenerator@^0.1.2:
version "0.1.3"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.3.tgz#350f857225fc640ae1ec78d1536afcbb457db841"
integrity sha512-hRjTJQiOYt/wBKEc+8V8p9OJ9799blAJcuKzn1JXh3pApHoWl1Emxh2BHc6MC7Qt6bbr3uDpNxaYQnATLIudEg==
version "0.1.5"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.5.tgz#f42a58fd86a1c97fbe3a2752d80a4a3e017203e1"
integrity sha512-EyhBA6uN94W97lR7ecQVTvH9F5tIIdEw3ZqHuU4zekMlW82k5cXNXniiB7PRxQm06BqAjVr4sDT1mOy4RcphIA==
dependencies:
"@babel/helper-define-polyfill-provider" "^0.1.2"
"@babel/helper-define-polyfill-provider" "^0.1.4"
balanced-match@^1.0.0:
version "1.0.0"
@ -1768,9 +1768,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181:
version "1.0.30001191"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001191.tgz#bacb432b6701f690c8c5f7c680166b9a9f0843d9"
integrity sha512-xJJqzyd+7GCJXkcoBiQ1GuxEiOBCLQ0aVW9HMekifZsAVGdj5eJ4mFB9fEhSHipq9IOk/QXFJUiIr9lZT+EsGw==
version "1.0.30001192"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001192.tgz#b848ebc0ab230cf313d194a4775a30155d50ae40"
integrity sha512-63OrUnwJj5T1rUmoyqYTdRWBqFFxZFlyZnRRjDR8NSUQFB6A+j/uBORU/SyJ5WzDLg4SPiZH40hQCBNdZ/jmAw==
chalk@^1.1.3:
version "1.1.3"
@ -1982,9 +1982,9 @@ color@^3.0.0:
color-string "^1.5.4"
colorette@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
version "1.2.2"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
commander@2.17.x:
version "2.17.1"
@ -2671,9 +2671,9 @@ ejs@^2.6.1:
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
electron-to-chromium@^1.3.649:
version "1.3.673"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.673.tgz#b4f81c930b388f962b7eba20d0483299aaa40913"
integrity sha512-ms+QR2ckfrrpEAjXweLx6kNCbpAl66DcW//3BZD4BV5KhUgr0RZRce1ON/9J3QyA3JO28nzgb5Xv8DnPr05ILg==
version "1.3.674"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.674.tgz#d97feefdf1d9411fdc9d56d17e1b9d67b818e710"
integrity sha512-DBmEKRVYLZAoQSW+AmLcTF5Bpwhk4RUkobtzXVDlfPPYIlbsH3Jfg3QbBjAfFcRARzMIo4YiMhp3N+RnMuo1Eg==
elliptic@^6.5.3:
version "6.5.4"

View File

@ -1,2 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{297:function(t,s,a){t.exports=a(424)},424: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(15);var i=a(18),r={};new Vue({i18n:i,render:function(t){return t(n,{props:r})}}).$mount("#accounts")}},[[297,0,1]]]);
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{297:function(t,s,a){t.exports=a(424)},424: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:{name:"table_search",placeholder:"Search",type:"text"}}),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,"3bbb2516",null).exports;a(15);var i=a(18),r={};new Vue({i18n:i,render:function(t){return t(n,{props:r})}}).$mount("#accounts")}},[[297,0,1]]]);
//# sourceMappingURL=index.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{298:function(n,e,t){n.exports=t(425)},425: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(15);var c=t(18),u={};new Vue({i18n:c,render:function(n){return n(s,{props:u})}}).$mount("#accounts_show")}},[[298,0,1]]]);
(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{298:function(n,e,t){n.exports=t(425)},425: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,"321a1058",null).exports;t(15);var u=t(18),a={};new Vue({i18n:u,render:function(n){return n(s,{props:a})}}).$mount("#accounts_show")}},[[298,0,1]]]);
//# sourceMappingURL=show.js.map

View File

@ -1 +1 @@
{"version":3,"sources":["webpack:///./src/components/accounts/Show.vue?b4b4","webpack:///./src/components/accounts/Show.vue?4c02","webpack:///src/components/accounts/Show.vue","webpack:///./src/components/accounts/Show.vue","webpack:///./src/pages/accounts/show.js"],"names":["_h","this","$createElement","_self","_c","_v","require","i18n","props","Vue","render","createElement","Show","$mount"],"mappings":"uIAAA,ICAoM,EC2BpM,CACE,KAAF,Q,OCVe,EAXC,YACd,GHRW,WAAa,IAAiBA,EAATC,KAAgBC,eAAuC,OAAvDD,KAA0CE,MAAMC,IAAIJ,GAAa,MAAM,CAAvEC,KAA4EI,GAAG,2BAC3F,IGUpB,EACA,KACA,WACA,M,QCOFC,EAAQ,IAKR,IAAIC,EAAOD,EAAQ,IAKfE,EAAQ,GAGZ,IAAIC,IAAI,CACIF,OACAG,OAFJ,SAEWC,GACH,OAAOA,EAAcC,EAAM,CAACJ,MAAOA,OAExCK,OAAO,oB","file":"/public/js/accounts/show.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\"\\n I am a show\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??ref--4-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Show.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??ref--4-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Show.vue?vue&type=script&lang=js&\"","<!--\n - Show.vue\n - Copyright (c) 2020 james@firefly-iii.org\n -\n - This file is part of Firefly III (https://github.com/firefly-iii).\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <https://www.gnu.org/licenses/>.\n -->\n\n<template>\n <div>\n I am a show\n </div>\n</template>\n\n<script>\n export default {\n name: \"Show\"\n }\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./Show.vue?vue&type=template&id=dcd61a50&scoped=true&\"\nimport script from \"./Show.vue?vue&type=script&lang=js&\"\nexport * from \"./Show.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dcd61a50\",\n null\n \n)\n\nexport default component.exports","/*\n * index.js\n * Copyright (c) 2020 james@firefly-iii.org\n *\n * This file is part of Firefly III (https://github.com/firefly-iii).\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\n\nrequire('../../bootstrap');\n\nimport Show from \"../../components/accounts/Show\";\n\n// i18n\nlet i18n = require('../../i18n');\n\n// get page name?\n\n\nlet props = {\n\n};\nnew Vue({\n i18n,\n render(createElement) {\n return createElement(Show, {props: props});\n }\n }).$mount('#accounts_show');\n"],"sourceRoot":""}
{"version":3,"sources":["webpack:///./src/components/accounts/Show.vue?4a89","webpack:///./src/components/accounts/Show.vue?4c02","webpack:///src/components/accounts/Show.vue","webpack:///./src/components/accounts/Show.vue","webpack:///./src/pages/accounts/show.js"],"names":["name","_h","this","$createElement","_self","_c","_v","require","i18n","props","Vue","render","createElement","Show","$mount"],"mappings":"uIAAA,ICAoM,EC2BpM,CACEA,KAAM,Q,OCVO,EAXC,YACd,GHRW,WAAa,IAAiBC,EAATC,KAAgBC,eAAuC,OAAvDD,KAA0CE,MAAMC,IAAIJ,GAAa,MAAM,CAAvEC,KAA4EI,GAAG,yBAC3F,IGUpB,EACA,KACA,WACA,M,QCOFC,EAAQ,IAKR,IAAIC,EAAOD,EAAQ,IAKfE,EAAQ,GAGZ,IAAIC,IAAI,CACIF,OACAG,OAFJ,SAEWC,GACH,OAAOA,EAAcC,EAAM,CAACJ,MAAOA,OAExCK,OAAO,oB","file":"/public/js/accounts/show.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\"\\n I am a show\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??ref--4-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Show.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??ref--4-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Show.vue?vue&type=script&lang=js&\"","<!--\n - Show.vue\n - Copyright (c) 2020 james@firefly-iii.org\n -\n - This file is part of Firefly III (https://github.com/firefly-iii).\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <https://www.gnu.org/licenses/>.\n -->\n\n<template>\n <div>\n I am a show\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Show\"\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./Show.vue?vue&type=template&id=321a1058&scoped=true&\"\nimport script from \"./Show.vue?vue&type=script&lang=js&\"\nexport * from \"./Show.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"321a1058\",\n null\n \n)\n\nexport default component.exports","/*\n * index.js\n * Copyright (c) 2020 james@firefly-iii.org\n *\n * This file is part of Firefly III (https://github.com/firefly-iii).\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\n\nrequire('../../bootstrap');\n\nimport Show from \"../../components/accounts/Show\";\n\n// i18n\nlet i18n = require('../../i18n');\n\n// get page name?\n\n\nlet props = {\n\n};\nnew Vue({\n i18n,\n render(createElement) {\n return createElement(Show, {props: props});\n }\n }).$mount('#accounts_show');\n"],"sourceRoot":""}

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([[6],{296:function(a,e,t){a.exports=t(423)},423: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(15);var c=t(18),r={};new Vue({i18n:c,render:function(a){return a(i,{props:r})}}).$mount("#newuser")}},[[296,0,1]]]);
(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{296:function(a,e,t){a.exports=t(423)},423: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-parent":"#accordion","data-toggle":"collapse",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-parent":"#accordion","data-toggle":"collapse",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-parent":"#accordion","data-toggle":"collapse",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,"2d2bc9db",null).exports;t(15);var c=t(18),r={};new Vue({i18n:c,render:function(a){return a(i,{props:r})}}).$mount("#newuser")}},[[296,0,1]]]);
//# sourceMappingURL=index.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

View File

@ -1,2 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{417:function(e,t,s){e.exports=s(426)},426:function(e,t,s){"use strict";s.r(t);var r=s(16),n={name:"Edit",data:function(){return{successMessage:"",errorMessage:""}}},a=s(1),i=Object(a.a)(n,(function(){var e=this.$createElement,t=this._self._c||e;return t("div",[t("alert",{attrs:{message:this.errorMessage,type:"danger"}}),this._v(" "),t("alert",{attrs:{message:this.successMessage,type:"success"}})],1)}),[],!1,null,"7a362243",null).exports,o=s(3),c=s.n(o);s(15),c.a.config.productionTip=!1;var u=s(18),p={};new c.a({i18n:u,store:r.a,render:function(e){return e(i,{props:p})},beforeCreate:function(){this.$store.commit("initialiseStore"),this.$store.dispatch("updateCurrencyPreference")}}).$mount("#transactions_edit")}},[[417,0,1]]]);
(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{417:function(e,t,s){e.exports=s(426)},426:function(e,t,s){"use strict";s.r(t);var r=s(16),n={name:"Edit",data:function(){return{successMessage:"",errorMessage:""}}},a=s(1),i=Object(a.a)(n,(function(){var e=this.$createElement,t=this._self._c||e;return t("div",[t("alert",{attrs:{message:this.errorMessage,type:"danger"}}),this._v(" "),t("alert",{attrs:{message:this.successMessage,type:"success"}})],1)}),[],!1,null,"7a362243",null).exports,o=s(2),c=s.n(o);s(15),c.a.config.productionTip=!1;var u=s(18),p={};new c.a({i18n:u,store:r.a,render:function(e){return e(i,{props:p})},beforeCreate:function(){this.$store.commit("initialiseStore"),this.$store.dispatch("updateCurrencyPreference")}}).$mount("#transactions_edit")}},[[417,0,1]]]);
//# sourceMappingURL=edit.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long