mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-29 18:20:01 +00:00
New frontend.
This commit is contained in:
@@ -24,6 +24,7 @@ const lodashClonedeep = require('lodash.clonedeep');
|
||||
const state = () => ({
|
||||
transactionType: 'any',
|
||||
date: new Date,
|
||||
groupTitle: '',
|
||||
transactions: [],
|
||||
allowedOpposingTypes: {},
|
||||
accountToTransaction: {},
|
||||
@@ -37,6 +38,22 @@ const state = () => ({
|
||||
payment_date: false,
|
||||
invoice_date: false,
|
||||
},
|
||||
defaultErrors: {
|
||||
description: [],
|
||||
amount: [],
|
||||
source: [],
|
||||
destination: [],
|
||||
currency: [],
|
||||
foreign_currency: [],
|
||||
foreign_amount: [],
|
||||
date: [],
|
||||
custom_dates: [],
|
||||
budget: [],
|
||||
category: [],
|
||||
bill: [],
|
||||
tags: [],
|
||||
piggy_bank: []
|
||||
},
|
||||
defaultTransaction: {
|
||||
// basic
|
||||
description: '',
|
||||
@@ -94,9 +111,7 @@ const state = () => ({
|
||||
attachments: [],
|
||||
|
||||
// error handling
|
||||
errors: {
|
||||
description: []
|
||||
},
|
||||
errors: {},
|
||||
},
|
||||
}
|
||||
)
|
||||
@@ -110,6 +125,9 @@ const getters = {
|
||||
date: state => {
|
||||
return state.date;
|
||||
},
|
||||
groupTitle: state => {
|
||||
return state.groupTitle;
|
||||
},
|
||||
transactionType: state => {
|
||||
return state.transactionType;
|
||||
},
|
||||
@@ -185,11 +203,19 @@ const actions = {
|
||||
const mutations = {
|
||||
addTransaction(state) {
|
||||
let newTransaction = lodashClonedeep(state.defaultTransaction);
|
||||
newTransaction.errors = lodashClonedeep(state.defaultErrors);
|
||||
state.transactions.push(newTransaction);
|
||||
},
|
||||
resetErrors(state, payload) {
|
||||
console.log('resetErrors for index ' + payload.index);
|
||||
state.transactions[payload.index].errors = lodashClonedeep(state.defaultErrors);
|
||||
},
|
||||
setDate(state, payload) {
|
||||
state.date = payload.date;
|
||||
},
|
||||
setGroupTitle(state, payload) {
|
||||
state.groupTitle = payload.groupTitle;
|
||||
},
|
||||
setCustomDateFields(state, payload) {
|
||||
state.customDateFields = payload;
|
||||
},
|
||||
@@ -208,6 +234,11 @@ const mutations = {
|
||||
updateField(state, payload) {
|
||||
state.transactions[payload.index][payload.field] = payload.value;
|
||||
},
|
||||
setTransactionError(state, payload) {
|
||||
console.log('Will set transactions[' + payload.index + '][errors][' + payload.field + '] to ');
|
||||
console.log(payload.errors);
|
||||
state.transactions[payload.index].errors[payload.field] = payload.errors;
|
||||
},
|
||||
setDestinationAllowedTypes(state, payload) {
|
||||
// console.log('Destination allowed types was changed!');
|
||||
state.destinationAllowedTypes = payload;
|
||||
|
@@ -20,182 +20,251 @@
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row" v-for="(transaction, index) in this.transactions">
|
||||
<div class="alert alert-danger alert-dismissible" v-if="this.errorMessage.length > 0">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<h5><i class="icon fas fa-ban"></i> {{ $t("firefly.flash_error") }}</h5>
|
||||
{{ errorMessage }}
|
||||
</div>
|
||||
|
||||
<div class="row" v-if="transactions.length > 1">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<!-- tabs -->
|
||||
<ul class="nav nav-pills ml-auto p-2">
|
||||
<li v-for="(transaction, index) in this.transactions" class="nav-item"><a :class="'nav-link' + (0===index ? ' active' : '')" :href="'#split_' + index"
|
||||
data-toggle="tab">
|
||||
<span v-if="'' !== transaction.description">{{ transaction.description }}</span>
|
||||
<span v-if="'' === transaction.description">Split {{ index + 1 }}</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-content">
|
||||
<div v-for="(transaction, index) in this.transactions" :class="'tab-pane' + (0===index ? ' active' : '')" :id="'split_' + index">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
{{ $t('firefly.basic_journal_information') }}
|
||||
<span v-if="transactions.length > 1">({{ index + 1 }} / {{ transactions.length }}) </span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- start of body -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<TransactionDescription
|
||||
v-model="transaction.description"
|
||||
:index="index"
|
||||
:errors="transaction.errors.description"
|
||||
></TransactionDescription>
|
||||
</div>
|
||||
</div>
|
||||
<!-- source and destination -->
|
||||
<div class="row">
|
||||
<div class="col-xl-5 col-lg-5 col-md-10 col-sm-12 col-xs-12">
|
||||
<!-- SOURCE -->
|
||||
<TransactionAccount
|
||||
v-model="transaction.source_account"
|
||||
direction="source"
|
||||
:index="index"
|
||||
:errors="transaction.errors.source"
|
||||
/>
|
||||
</div>
|
||||
<!-- switcharoo! -->
|
||||
<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 text-center d-none d-sm-block">
|
||||
<SwitchAccount
|
||||
:index="index"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- destination -->
|
||||
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
|
||||
<!-- DESTINATION -->
|
||||
<TransactionAccount
|
||||
v-model="transaction.destination_account"
|
||||
direction="destination"
|
||||
:index="index"
|
||||
:errors="transaction.errors.destination"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- amount -->
|
||||
<div class="row">
|
||||
<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"/>
|
||||
<!--
|
||||
|
||||
-->
|
||||
</div>
|
||||
<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 text-center d-none d-sm-block">
|
||||
<TransactionForeignCurrency :index="index"/>
|
||||
</div>
|
||||
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
|
||||
<TransactionForeignAmount :index="index" :errors="transaction.errors.foreign_amount"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- dates -->
|
||||
<div class="row">
|
||||
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
|
||||
<TransactionDate
|
||||
:index="index"
|
||||
:errors="transaction.errors.date"
|
||||
/>
|
||||
</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" :enabled-dates="customDateFields" :errors="transaction.errors.custom_dates"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- end of body -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- end of basic card -->
|
||||
|
||||
<!-- card for meta -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
{{ $t('firefly.transaction_journal_meta') }}
|
||||
<span v-if="transactions.length > 1">({{ index + 1 }} / {{ transactions.length }}) </span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- start of body -->
|
||||
<!-- meta -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<TransactionBudget
|
||||
v-model="transaction.budget_id"
|
||||
:index="index"
|
||||
:errors="transaction.errors.budget"
|
||||
/>
|
||||
<TransactionCategory
|
||||
v-model="transaction.category"
|
||||
:index="index"
|
||||
:errors="transaction.errors.category"
|
||||
/>
|
||||
</div>
|
||||
<div class="col">
|
||||
<TransactionBill
|
||||
v-model="transaction.bill_id"
|
||||
:index="index"
|
||||
:errors="transaction.errors.bill"
|
||||
/>
|
||||
<TransactionTags
|
||||
:index="index"
|
||||
v-model="transaction.tags"
|
||||
:errors="transaction.errors.tags"
|
||||
/>
|
||||
<TransactionPiggyBank
|
||||
:index="index"
|
||||
v-model="transaction.piggy_bank_id"
|
||||
:errors="transaction.errors.piggy_bank"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end card for meta -->
|
||||
<!-- card for extra -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
{{ $t('firefly.transaction_journal_meta') }}
|
||||
<span v-if="transactions.length > 1">({{ index + 1 }} / {{ transactions.length }}) </span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- start of body -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<TransactionInternalReference
|
||||
:index="index"
|
||||
v-model="transaction.internal_reference"
|
||||
/>
|
||||
|
||||
<TransactionExternalUrl
|
||||
:index="index"
|
||||
v-model="transaction.external_url"
|
||||
/>
|
||||
<TransactionNotes
|
||||
:index="index"
|
||||
v-model="transaction.notes"
|
||||
/>
|
||||
</div>
|
||||
<div class="col">
|
||||
|
||||
<TransactionAttachments
|
||||
:index="index"
|
||||
v-model="transaction.attachments"
|
||||
/>
|
||||
|
||||
<TransactionLinks :index="index"
|
||||
v-model="transaction.links"
|
||||
/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- end of body -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end card for extra -->
|
||||
<!-- end of card -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<!-- group title -->
|
||||
<div class="col">
|
||||
<div class="card" v-if="transactions.length > 1">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
<span v-if="1 === transactions.length">{{ $t('firefly.create_new_transaction') }}</span>
|
||||
<span v-if="transactions.length > 1">{{ $t('firefly.single_split') }} {{ index + 1 }} / {{ transactions.length }}</span>
|
||||
{{ $t('firefly.split_transaction_title') }}
|
||||
</h3>
|
||||
<div v-if="transactions.length > 1" class="card-tools">
|
||||
<button class="btn btn-xs btn-danger" type="button" v-on:click="removeTransaction(index)"><i
|
||||
class="fa fa-trash"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.card-header -->
|
||||
<div class="card-body">
|
||||
<h5>{{ $t('firefly.basic_journal_information') }}</h5>
|
||||
<!-- description etc, 3 rows -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<TransactionDescription
|
||||
v-model="transaction.description"
|
||||
:index="index"
|
||||
></TransactionDescription>
|
||||
<TransactionGroupTitle v-model="this.groupTitle"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- source and destination -->
|
||||
<div class="row">
|
||||
<div class="col-xl-5 col-lg-5 col-md-10 col-sm-12 col-xs-12">
|
||||
<!-- SOURCE -->
|
||||
<TransactionAccount
|
||||
v-model="transaction.source_account"
|
||||
direction="source"
|
||||
:index="index"
|
||||
/>
|
||||
</div>
|
||||
<!-- switcharoo! -->
|
||||
<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 text-center d-none d-sm-block">
|
||||
<SwitchAccount
|
||||
:index="index"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- destination -->
|
||||
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
|
||||
<!-- DESTINATION -->
|
||||
<TransactionAccount
|
||||
v-model="transaction.destination_account"
|
||||
direction="destination"
|
||||
:index="index"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- amount -->
|
||||
<div class="row">
|
||||
<div class="col-xl-5 col-lg-5 col-md-10 col-sm-12 col-xs-12">
|
||||
<!-- AMOUNT -->
|
||||
<TransactionAmount :index="index"/>
|
||||
<!--
|
||||
|
||||
-->
|
||||
</div>
|
||||
<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 text-center d-none d-sm-block">
|
||||
<TransactionForeignCurrency :index="index"/>
|
||||
</div>
|
||||
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
|
||||
<TransactionForeignAmount :index="index"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- dates -->
|
||||
<div class="row">
|
||||
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12">
|
||||
<TransactionDate
|
||||
:index="index"
|
||||
/>
|
||||
</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" :enabled-dates="customDateFields"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4>{{ $t('firefly.transaction_journal_meta') }}</h4>
|
||||
|
||||
<!-- meta -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<TransactionBudget
|
||||
v-model="transaction.budget_id"
|
||||
:index="index"
|
||||
/>
|
||||
<TransactionCategory
|
||||
v-model="transaction.category"
|
||||
:index="index"
|
||||
/>
|
||||
</div>
|
||||
<div class="col">
|
||||
<TransactionBill
|
||||
v-model="transaction.bill_id"
|
||||
:index="index"
|
||||
/>
|
||||
<TransactionTags
|
||||
:index="index"
|
||||
v-model="transaction.tags"
|
||||
/>
|
||||
<TransactionPiggyBank
|
||||
:index="index"
|
||||
v-model="transaction.piggy_bank_id"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4>{{ $t('firefly.transaction_journal_extra') }}</h4>
|
||||
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<TransactionInternalReference
|
||||
:index="index"
|
||||
v-model="transaction.internal_reference"
|
||||
/>
|
||||
|
||||
<TransactionExternalUrl
|
||||
:index="index"
|
||||
v-model="transaction.external_url"
|
||||
/>
|
||||
<TransactionNotes
|
||||
:index="index"
|
||||
v-model="transaction.notes"
|
||||
/>
|
||||
</div>
|
||||
<div class="col">
|
||||
|
||||
<TransactionAttachments
|
||||
:index="index"
|
||||
v-model="transaction.attachments"
|
||||
/>
|
||||
|
||||
<TransactionLinks :index="index"
|
||||
v-model="transaction.links"
|
||||
/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- /.card-body -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<!-- buttons! -->
|
||||
<div class="col">
|
||||
<p>
|
||||
<button @click="addTransaction" class="btn btn-primary"><i class="far fa-clone"></i> {{ $t('firefly.add_another_split') }}</button>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<p class="float-right">
|
||||
<button @click="submitTransaction" :disabled="isSubmitting" class="btn btn-success"><i class="far fa-save"></i> Store transaction</button>
|
||||
<br/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- buttons -->
|
||||
<!-- button -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<button @click="addTransaction" class="btn btn-primary">{{ $t('firefly.add_another_split') }}</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<p class="float-right">
|
||||
<button @click="submitTransaction" :disabled="isSubmitting" class="btn btn-success">Store transaction</button>
|
||||
<br/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col float-right">
|
||||
<p class="text-right">
|
||||
<small class="text-muted">Create another another another <input type="checkbox"/></small><br/>
|
||||
<small class="text-muted">Return here <input type="checkbox"/></small><br/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
@@ -219,17 +288,17 @@ import TransactionExternalUrl from "./TransactionExternalUrl";
|
||||
import TransactionNotes from "./TransactionNotes";
|
||||
import TransactionLinks from "./TransactionLinks";
|
||||
import TransactionAttachments from "./TransactionAttachments";
|
||||
|
||||
import TransactionGroupTitle from "./TransactionGroupTitle";
|
||||
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
|
||||
export default {
|
||||
name: "Create",
|
||||
components: {
|
||||
TransactionAttachments,
|
||||
TransactionNotes,
|
||||
TransactionExternalUrl,
|
||||
TransactionGroupTitle,
|
||||
TransactionInternalReference,
|
||||
TransactionPiggyBank,
|
||||
TransactionTags,
|
||||
@@ -248,10 +317,9 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
groupTitle: '',
|
||||
isSubmitting: false,
|
||||
linkSearchResults: [],
|
||||
errorMessage: null,
|
||||
errorMessage: '',
|
||||
successMessage: null,
|
||||
}
|
||||
},
|
||||
@@ -260,7 +328,8 @@ export default {
|
||||
'transactionType', // -> this.someGetter
|
||||
'transactions', // -> this.someOtherGetter
|
||||
'customDateFields',
|
||||
'date'
|
||||
'date',
|
||||
'groupTitle'
|
||||
])
|
||||
},
|
||||
methods: {
|
||||
@@ -270,10 +339,11 @@ export default {
|
||||
'deleteTransaction',
|
||||
'setAllowedOpposingTypes',
|
||||
'setAccountToTransaction',
|
||||
'setTransactionError',
|
||||
'resetErrors'
|
||||
],
|
||||
),
|
||||
removeTransaction: function (index) {
|
||||
// store.commit('addCustomer'
|
||||
this.$store.commit('transactions/create/deleteTransaction', {index: index});
|
||||
},
|
||||
storeCustomDateFields: function () {
|
||||
@@ -322,17 +392,27 @@ export default {
|
||||
|
||||
axios.post(url, data)
|
||||
.then(response => {
|
||||
console.log('Axios post OK');
|
||||
console.log('Axios post OK!');
|
||||
console.log(response);
|
||||
})
|
||||
.catch(error => {
|
||||
console.log('Error in transaction submission.');
|
||||
//console.log('Error in transaction submission.');
|
||||
this.parseErrors(error.response.data);
|
||||
});
|
||||
this.isSubmitting = false;
|
||||
},
|
||||
|
||||
parseErrors: function(errors) {
|
||||
// set the error message:
|
||||
parseErrors: function (errors) {
|
||||
console.log('parseErrors()');
|
||||
console.log(errors.errors);
|
||||
//this.setTransactionError({index: 0, field: 'date', errors: ['I AM ERRROR']});
|
||||
|
||||
// reset errors
|
||||
for (let i in this.transactions) {
|
||||
console.log('reset errors for index ' + i);
|
||||
this.resetErrors({index: i});
|
||||
}
|
||||
|
||||
this.successMessage = null;
|
||||
this.errorMessage = this.$t('firefly.errors_submission');
|
||||
if (typeof errors.errors === 'undefined') {
|
||||
@@ -347,40 +427,63 @@ export default {
|
||||
for (const key in errors.errors) {
|
||||
if (errors.errors.hasOwnProperty(key)) {
|
||||
if (key === 'group_title') {
|
||||
this.group_title_errors = errors.errors[key];
|
||||
console.log('cant handle "group_title".');
|
||||
//this.group_title_errors = errors.errors[key];
|
||||
}
|
||||
if (key !== 'group_title') {
|
||||
// lol dumbest way to explode "transactions.0.something" ever.
|
||||
transactionIndex = parseInt(key.split('.')[1]);
|
||||
|
||||
fieldName = key.split('.')[2];
|
||||
// set error in this object thing.
|
||||
console.log('Found an error for transactions[' + transactionIndex + '][' + fieldName + ']');
|
||||
let payload;
|
||||
switch (fieldName) {
|
||||
case 'amount':
|
||||
case 'date':
|
||||
case 'budget_id':
|
||||
case 'bill_id':
|
||||
case 'description':
|
||||
case 'date':
|
||||
case 'tags':
|
||||
//this.transactions[transactionIndex].errors[fieldName] = errors.errors[key];
|
||||
payload = {index: transactionIndex, field: fieldName, errors: errors.errors[key]};
|
||||
this.setTransactionError(payload);
|
||||
break;
|
||||
case 'budget_id':
|
||||
payload = {index: transactionIndex, field: 'budget', errors: errors.errors[key]};
|
||||
this.setTransactionError(payload);
|
||||
break;
|
||||
case 'bill_id':
|
||||
payload = {index: transactionIndex, field: 'bill', errors: errors.errors[key]};
|
||||
this.setTransactionError(payload);
|
||||
break;
|
||||
case 'piggy_bank_id':
|
||||
payload = {index: transactionIndex, field: 'piggy_bank', errors: errors.errors[key]};
|
||||
this.setTransactionError(payload);
|
||||
break;
|
||||
case 'category_name':
|
||||
payload = {index: transactionIndex, field: 'category', errors: errors.errors[key]};
|
||||
this.setTransactionError(payload);
|
||||
break;
|
||||
case 'source_name':
|
||||
case 'source_id':
|
||||
//this.transactions[transactionIndex].errors.source_account = this.transactions[transactionIndex].errors.source_account.concat(errors.errors[key]);
|
||||
payload = {index: transactionIndex, field: 'source', errors: errors.errors[key]};
|
||||
this.setTransactionError(payload);
|
||||
break;
|
||||
case 'destination_name':
|
||||
case 'destination_id':
|
||||
//this.transactions[transactionIndex].errors.destination_account = this.transactions[transactionIndex].errors.destination_account.concat(errors.errors[key]);
|
||||
payload = {index: transactionIndex, field: 'destination', errors: errors.errors[key]};
|
||||
this.setTransactionError(payload);
|
||||
break;
|
||||
case 'foreign_amount':
|
||||
case 'foreign_currency_id':
|
||||
//this.transactions[transactionIndex].errors.foreign_amount = this.transactions[transactionIndex].errors.foreign_amount.concat(errors.errors[key]);
|
||||
case 'foreign_currency':
|
||||
payload = {index: transactionIndex, field: 'foreign_amount', errors: errors.errors[key]};
|
||||
this.setTransactionError(payload);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// unique some things
|
||||
if (typeof this.transactions[transactionIndex] !== 'undefined') {
|
||||
//this.transactions[transactionIndex].errors.source_account = Array.from(new Set(this.transactions[transactionIndex].errors.source_account));
|
||||
//this.transactions[transactionIndex].errors.destination_account = Array.from(new Set(this.transactions[transactionIndex].errors.destination_account));
|
||||
// TODO
|
||||
//this.transactions[transactionIndex].errors.source = Array.from(new Set(this.transactions[transactionIndex].errors.source));
|
||||
//this.transactions[transactionIndex].errors.destination = Array.from(new Set(this.transactions[transactionIndex].errors.destination));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -394,9 +497,11 @@ export default {
|
||||
convertData: function () {
|
||||
console.log('now in convertData');
|
||||
let data = {
|
||||
//'group_title': null,
|
||||
'transactions': []
|
||||
};
|
||||
if (this.groupTitle.length > 0) {
|
||||
data.group_title = this.groupTitle;
|
||||
}
|
||||
for (let key in this.transactions) {
|
||||
if (this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
data.transactions.push(this.convertSplit(key, this.transactions[key]));
|
||||
@@ -404,18 +509,20 @@ export default {
|
||||
}
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* @param key
|
||||
* @param array
|
||||
*/
|
||||
convertSplit: function (key, array) {
|
||||
console.log('now in convertSplit');
|
||||
let dateStr = 'invalid';
|
||||
if (this.date instanceof Date && !isNaN(this.date)) {
|
||||
dateStr = this.toW3CString(this.date);
|
||||
}
|
||||
let currentSplit = {
|
||||
// basic
|
||||
description: array.description,
|
||||
date: this.toW3CString(this.date),
|
||||
date: dateStr,
|
||||
type: this.transactionType,
|
||||
|
||||
// account
|
||||
@@ -427,16 +534,11 @@ export default {
|
||||
// amount:
|
||||
currency_id: array.currency_id,
|
||||
amount: array.amount,
|
||||
foreign_currency_id: array.foreign_currency_id,
|
||||
foreign_amount: array.foreign_amount,
|
||||
|
||||
|
||||
// meta data
|
||||
budget_id: array.budget_id,
|
||||
category_name: array.category,
|
||||
bill_id: array.bill_id,
|
||||
tags: array.tags,
|
||||
piggy_bank_id: array.piggy_bank_id,
|
||||
|
||||
// optional date fields (6x):
|
||||
interest_date: array.interest_date,
|
||||
@@ -456,6 +558,21 @@ export default {
|
||||
order: 0,
|
||||
reconciled: false,
|
||||
};
|
||||
// bills and piggy banks
|
||||
if (0 !== array.piggy_bank_id) {
|
||||
currentSplit.piggy_bank_id = array.piggy_bank_id;
|
||||
}
|
||||
if (0 !== array.bill_id) {
|
||||
currentSplit.bill_id = array.bill_id;
|
||||
}
|
||||
|
||||
// foreign amount:
|
||||
if (0 !== array.foreign_currency_id) {
|
||||
currentSplit.foreign_currency_id = array.foreign_currency_id;
|
||||
}
|
||||
if ('' !== array.foreign_amount) {
|
||||
currentSplit.foreign_amount = array.foreign_amount;
|
||||
}
|
||||
|
||||
// do transaction type
|
||||
let transactionType;
|
||||
@@ -463,22 +580,26 @@ export default {
|
||||
let firstDestination;
|
||||
|
||||
// get transaction type from first transaction
|
||||
transactionType = this.transactionType ? this.transactionType.toLowerCase() : 'invalid';
|
||||
|
||||
transactionType = this.transactionType ? this.transactionType.toLowerCase() : 'any';
|
||||
console.log('Transaction type is now ' + transactionType);
|
||||
// if the transaction type is invalid, might just be that we can deduce it from
|
||||
// the presence of a source or destination account
|
||||
firstSource = this.transactions[0].source_account.type;
|
||||
firstDestination = this.transactions[0].destination_account.type;
|
||||
// console.log('Type of first source is ' + firstSource);
|
||||
console.log(this.transactions[0].source_account);
|
||||
console.log(this.transactions[0].destination_account);
|
||||
console.log('Type of first source is ' + firstSource);
|
||||
console.log('Type of first destination is ' + firstDestination);
|
||||
|
||||
if ('invalid' === transactionType && ['asset', 'Asset account', 'Loan', 'Debt', 'Mortgage'].includes(firstSource)) {
|
||||
if ('any' === transactionType && ['asset', 'Asset account', 'Loan', 'Debt', 'Mortgage'].includes(firstSource)) {
|
||||
transactionType = 'withdrawal';
|
||||
}
|
||||
|
||||
if ('invalid' === transactionType && ['asset', 'Asset account', 'Loan', 'Debt', 'Mortgage'].includes(firstDestination)) {
|
||||
if ('any' === transactionType && ['asset', 'Asset account', 'Loan', 'Debt', 'Mortgage'].includes(firstDestination)) {
|
||||
transactionType = 'deposit';
|
||||
}
|
||||
currentSplit.type = transactionType;
|
||||
console.log('Final type is ' + transactionType);
|
||||
|
||||
let links = [];
|
||||
for (let i in array.links) {
|
||||
@@ -542,16 +663,6 @@ export default {
|
||||
offsetSign + offsetHours + ':' + offsetMinutes;
|
||||
}
|
||||
|
||||
// addTransactionToArray: function (e) {
|
||||
// console.log('Now in addTransactionToArray()');
|
||||
// this.$store.
|
||||
//
|
||||
// this.transactions.push({
|
||||
// description: '',
|
||||
// });
|
||||
// if (e) {
|
||||
// e.preventDefault();
|
||||
// }
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
@@ -27,6 +27,7 @@
|
||||
v-model="value.name"
|
||||
:data="accounts"
|
||||
:showOnFocus=true
|
||||
:inputClass="errors.length > 0 ? 'is-invalid' : ''"
|
||||
:inputName="direction + '[]'"
|
||||
:serializer="item => item.name_with_balance"
|
||||
:minMatchingChars="3"
|
||||
@@ -39,9 +40,10 @@
|
||||
<button class="btn btn-outline-secondary" v-on:click="clearAccount" type="button"><i class="far fa-trash-alt"></i></button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
</vue-typeahead-bootstrap>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -56,7 +58,7 @@ const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers
|
||||
export default {
|
||||
name: "TransactionAccount",
|
||||
components: {VueTypeaheadBootstrap},
|
||||
props: ['index', 'direction', 'value'],
|
||||
props: ['index', 'direction', 'value', 'errors'],
|
||||
data() {
|
||||
return {
|
||||
query: '',
|
||||
|
@@ -29,13 +29,16 @@
|
||||
<input
|
||||
:title="$t('firefly.amount')"
|
||||
autocomplete="off"
|
||||
class="form-control"
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
name="amount[]"
|
||||
type="number"
|
||||
v-model="amount"
|
||||
:placeholder="$t('firefly.amount')"
|
||||
>
|
||||
</div>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -49,7 +52,7 @@ const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers
|
||||
|
||||
export default {
|
||||
name: "TransactionAmount",
|
||||
props: ['index'],
|
||||
props: ['index', 'errors'],
|
||||
data() {
|
||||
return {
|
||||
currencySymbol: ''
|
||||
|
@@ -28,7 +28,6 @@
|
||||
type="file"
|
||||
multiple
|
||||
name="attachments[]"
|
||||
:placeholder="$t('firefly.attachment')"
|
||||
class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -29,7 +29,7 @@
|
||||
:title="$t('firefly.bill')"
|
||||
v-model="value"
|
||||
autocomplete="off"
|
||||
class="form-control"
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
name="bill_id[]"
|
||||
v-on:submit.prevent
|
||||
>
|
||||
@@ -37,6 +37,9 @@
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -47,7 +50,7 @@ import {createNamespacedHelpers} from "vuex";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['value', 'index'],
|
||||
props: ['value', 'index', 'errors'],
|
||||
name: "TransactionBill",
|
||||
data() {
|
||||
return {
|
||||
@@ -94,16 +97,16 @@ export default {
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
value: function(value) {
|
||||
value: function (value) {
|
||||
this.updateField({field: 'bill_id', index: this.index, value: value});
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(
|
||||
[
|
||||
'transactionType',
|
||||
'transactions',
|
||||
]
|
||||
'transactionType',
|
||||
'transactions',
|
||||
]
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@@ -29,13 +29,16 @@
|
||||
:title="$t('firefly.budget')"
|
||||
v-model="value"
|
||||
autocomplete="off"
|
||||
class="form-control"
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
name="budget_id[]"
|
||||
v-on:submit.prevent
|
||||
>
|
||||
<option v-for="budget in this.budgetList" :value="budget.id" :label="budget.name">{{ budget.name }}</option>
|
||||
</select>
|
||||
</div>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -46,7 +49,7 @@ import {createNamespacedHelpers} from "vuex";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['index', 'value'],
|
||||
props: ['index', 'value', 'errors'],
|
||||
name: "TransactionBudget",
|
||||
data() {
|
||||
return {
|
||||
|
@@ -30,6 +30,7 @@
|
||||
:data="categories"
|
||||
:placeholder="$t('firefly.category')"
|
||||
:showOnFocus=true
|
||||
:inputClass="errors.length > 0 ? 'is-invalid' : ''"
|
||||
:minMatchingChars="3"
|
||||
:serializer="item => item.name"
|
||||
@hit="selectedCategory = $event"
|
||||
@@ -41,7 +42,9 @@
|
||||
</div>
|
||||
</template>
|
||||
</vue-typeahead-bootstrap>
|
||||
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -54,7 +57,7 @@ import {debounce} from "lodash";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['value', 'index'],
|
||||
props: ['value', 'index', 'errors'],
|
||||
components: {VueTypeaheadBootstrap},
|
||||
name: "TransactionCategory",
|
||||
data() {
|
||||
|
@@ -43,12 +43,13 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// TODO: error handling
|
||||
import {createNamespacedHelpers} from "vuex";
|
||||
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
export default {
|
||||
name: "TransactionCustomDates",
|
||||
props: ['enabledDates', 'index'],
|
||||
props: ['enabledDates', 'index', 'errors'],
|
||||
methods: {
|
||||
...mapGetters(
|
||||
[
|
||||
|
@@ -25,7 +25,7 @@
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<input
|
||||
class="form-control"
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
type="date"
|
||||
ref="date"
|
||||
:title="$t('firefly.date')"
|
||||
@@ -34,10 +34,9 @@
|
||||
autocomplete="off"
|
||||
name="date[]"
|
||||
:placeholder="localDate"
|
||||
v-on:submit.prevent
|
||||
>
|
||||
<input
|
||||
class="form-control"
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
type="time"
|
||||
ref="time"
|
||||
:title="$t('firefly.time')"
|
||||
@@ -46,9 +45,11 @@
|
||||
autocomplete="off"
|
||||
name="time[]"
|
||||
:placeholder="localTime"
|
||||
v-on:submit.prevent
|
||||
>
|
||||
</div>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -59,8 +60,8 @@ import {createNamespacedHelpers} from "vuex";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['index', 'errors'],
|
||||
name: "TransactionDate",
|
||||
props: ['index'],
|
||||
methods: {
|
||||
...mapMutations(
|
||||
[
|
||||
@@ -70,13 +71,19 @@ export default {
|
||||
),
|
||||
},
|
||||
computed: {
|
||||
...mapGetters([
|
||||
'transactionType',
|
||||
'date'
|
||||
]),
|
||||
...mapGetters(
|
||||
[
|
||||
'transactionType',
|
||||
'date',
|
||||
'transactions'
|
||||
]
|
||||
),
|
||||
localDate: {
|
||||
get() {
|
||||
return this.date.toISOString().split('T')[0];
|
||||
if (this.date instanceof Date && !isNaN(this.date)) {
|
||||
return this.date.toISOString().split('T')[0];
|
||||
}
|
||||
return '';
|
||||
},
|
||||
set(value) {
|
||||
// bit of a hack but meh.
|
||||
@@ -90,7 +97,10 @@ export default {
|
||||
},
|
||||
localTime: {
|
||||
get() {
|
||||
return ('0' + this.date.getHours()).slice(-2) + ':' + ('0' + this.date.getMinutes()).slice(-2) + ':' + ('0' + this.date.getSeconds()).slice(-2);
|
||||
if (this.date instanceof Date && !isNaN(this.date)) {
|
||||
return ('0' + this.date.getHours()).slice(-2) + ':' + ('0' + this.date.getMinutes()).slice(-2) + ':' + ('0' + this.date.getSeconds()).slice(-2);
|
||||
}
|
||||
return '';
|
||||
},
|
||||
set(value) {
|
||||
// bit of a hack but meh.
|
||||
@@ -105,7 +115,3 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@@ -20,9 +20,6 @@
|
||||
|
||||
<template>
|
||||
<div class="form-group">
|
||||
<div class="text-xs d-none d-lg-block d-xl-block">
|
||||
{{ $t('firefly.description') }}
|
||||
</div>
|
||||
<vue-typeahead-bootstrap
|
||||
inputName="description[]"
|
||||
v-model="value"
|
||||
@@ -30,6 +27,7 @@
|
||||
:placeholder="$t('firefly.description')"
|
||||
:showOnFocus=true
|
||||
autofocus
|
||||
:inputClass="errors.length > 0 ? 'is-invalid' : ''"
|
||||
:minMatchingChars="3"
|
||||
:serializer="item => item.description"
|
||||
@input="lookupDescription"
|
||||
@@ -40,13 +38,14 @@
|
||||
</div>
|
||||
</template>
|
||||
</vue-typeahead-bootstrap>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
import {createNamespacedHelpers} from "vuex";
|
||||
import VueTypeaheadBootstrap from 'vue-typeahead-bootstrap';
|
||||
import {debounce} from "lodash";
|
||||
@@ -54,7 +53,7 @@ import {debounce} from "lodash";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['index', 'value'],
|
||||
props: ['index', 'value', 'errors'],
|
||||
components: {VueTypeaheadBootstrap},
|
||||
name: "TransactionDescription",
|
||||
data() {
|
||||
@@ -63,7 +62,6 @@ export default {
|
||||
initialSet: []
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
axios.get(this.getACURL(''))
|
||||
.then(response => {
|
||||
|
@@ -29,7 +29,8 @@
|
||||
name="external_url[]"
|
||||
:placeholder="$t('firefly.external_url')"
|
||||
v-model="value"
|
||||
class="form-control"/>
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
/>
|
||||
<div class="input-group-append">
|
||||
<button type="button" class="btn btn-outline-secondary"><i class="far fa-trash-alt"></i></button>
|
||||
</div>
|
||||
@@ -43,7 +44,7 @@ import {createNamespacedHelpers} from "vuex";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['index', 'value'],
|
||||
props: ['index', 'value', 'errors'],
|
||||
name: "TransactionExternalUrl",
|
||||
methods: {
|
||||
...mapMutations(
|
||||
|
@@ -27,7 +27,7 @@
|
||||
<input
|
||||
:title="$t('form.foreign_amount')"
|
||||
autocomplete="off"
|
||||
class="form-control"
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
:disabled="0===currencyId"
|
||||
name="foreign_amount[]"
|
||||
type="number"
|
||||
@@ -35,6 +35,9 @@
|
||||
:placeholder="$t('form.foreign_amount')"
|
||||
>
|
||||
</div>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -48,7 +51,7 @@ const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers
|
||||
|
||||
export default {
|
||||
name: "TransactionForeignAmount",
|
||||
props: ['index'],
|
||||
props: ['index','errors'],
|
||||
data() {
|
||||
return {
|
||||
currencySymbol: '',
|
||||
|
109
frontend/src/components/transactions/TransactionGroupTitle.vue
Normal file
109
frontend/src/components/transactions/TransactionGroupTitle.vue
Normal file
@@ -0,0 +1,109 @@
|
||||
<!--
|
||||
- TransactionGroupTitle.vue
|
||||
- Copyright (c) 2021 james@firefly-iii.org
|
||||
-
|
||||
- This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
-
|
||||
- This program is free software: you can redistribute it and/or modify
|
||||
- it under the terms of the GNU Affero General Public License as
|
||||
- published by the Free Software Foundation, either version 3 of the
|
||||
- License, or (at your option) any later version.
|
||||
-
|
||||
- This program is distributed in the hope that it will be useful,
|
||||
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
- GNU Affero General Public License for more details.
|
||||
-
|
||||
- You should have received a copy of the GNU Affero General Public License
|
||||
- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div class="form-group">
|
||||
<div class="text-xs d-none d-lg-block d-xl-block">
|
||||
{{ $t('firefly.split_transaction_title') }}
|
||||
</div>
|
||||
<vue-typeahead-bootstrap
|
||||
inputName="group_title"
|
||||
v-model="value"
|
||||
:data="descriptions"
|
||||
:placeholder="$t('firefly.split_transaction_title')"
|
||||
:showOnFocus=true
|
||||
:minMatchingChars="3"
|
||||
:serializer="item => item.description"
|
||||
@input="lookupDescription"
|
||||
:inputClass="errors.length > 0 ? 'is-invalid' : ''"
|
||||
>
|
||||
<template slot="append">
|
||||
<div class="input-group-append">
|
||||
<button v-on:click="clearDescription" class="btn btn-outline-secondary" type="button"><i class="far fa-trash-alt"></i></button>
|
||||
</div>
|
||||
</template>
|
||||
</vue-typeahead-bootstrap>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import VueTypeaheadBootstrap from 'vue-typeahead-bootstrap';
|
||||
import {debounce} from "lodash";
|
||||
import {createNamespacedHelpers} from "vuex";
|
||||
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
export default {
|
||||
props: ['value', 'errors'],
|
||||
name: "TransactionGroupTitle",
|
||||
components: {VueTypeaheadBootstrap},
|
||||
data() {
|
||||
return {
|
||||
descriptions: [],
|
||||
initialSet: []
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
axios.get(this.getACURL(''))
|
||||
.then(response => {
|
||||
this.descriptions = response.data;
|
||||
this.initialSet = response.data;
|
||||
});
|
||||
},
|
||||
watch: {
|
||||
value: function (value) {
|
||||
console.log('set');
|
||||
this.setGroupTitle({groupTitle: value});
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(
|
||||
[
|
||||
'setGroupTitle'
|
||||
],
|
||||
),
|
||||
...mapGetters(
|
||||
[
|
||||
'groupTitle'
|
||||
]
|
||||
),
|
||||
clearDescription: function () {
|
||||
console.log('cear');
|
||||
this.setGroupTitle({groupTitle: ''});
|
||||
this.value = '';
|
||||
},
|
||||
getACURL: function (query) {
|
||||
// update autocomplete URL:
|
||||
return document.getElementsByTagName('base')[0].href + 'api/v1/autocomplete/transactions?query=' + query;
|
||||
},
|
||||
lookupDescription: debounce(function () {
|
||||
// update autocomplete URL:
|
||||
axios.get(this.getACURL(this.value))
|
||||
.then(response => {
|
||||
this.descriptions = response.data;
|
||||
})
|
||||
}, 300)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@@ -29,7 +29,8 @@
|
||||
name="internal_reference[]"
|
||||
v-model="value"
|
||||
:placeholder="$t('firefly.internal_reference')"
|
||||
class="form-control"/>
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
/>
|
||||
<div class="input-group-append">
|
||||
<button type="button" class="btn btn-outline-secondary"><i class="far fa-trash-alt"></i></button>
|
||||
</div>
|
||||
@@ -43,7 +44,7 @@ import {createNamespacedHelpers} from "vuex";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['index', 'value'],
|
||||
props: ['index', 'value', 'errors'],
|
||||
name: "TransactionInternalReference",
|
||||
methods: {
|
||||
...mapMutations(
|
||||
|
@@ -184,8 +184,9 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// TODO error handling
|
||||
export default {
|
||||
props: ['index', 'value'],
|
||||
props: ['index', 'value', 'errors'],
|
||||
name: "TransactionLinks",
|
||||
data() {
|
||||
return {
|
||||
|
@@ -25,7 +25,11 @@
|
||||
{{ $t('firefly.notes') }}
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<textarea v-model="value" class="form-control" :placeholder="$t('firefly.notes')"></textarea>
|
||||
<textarea
|
||||
v-model="value"
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
:placeholder="$t('firefly.notes')"
|
||||
></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -37,7 +41,7 @@ import {createNamespacedHelpers} from "vuex";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['index', 'value'],
|
||||
props: ['index', 'value', 'errors'],
|
||||
name: "TransactionNotes",
|
||||
methods: {
|
||||
...mapMutations(
|
||||
|
@@ -29,7 +29,7 @@
|
||||
:title="$t('firefly.piggy_bank')"
|
||||
v-model="value"
|
||||
autocomplete="off"
|
||||
class="form-control"
|
||||
:class="errors.length > 0 ? 'form-control is-invalid' : 'form-control'"
|
||||
name="piggy_bank_id[]"
|
||||
v-on:submit.prevent
|
||||
>
|
||||
@@ -37,6 +37,9 @@
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -47,7 +50,7 @@ import {createNamespacedHelpers} from "vuex";
|
||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||
|
||||
export default {
|
||||
props: ['index', 'value'],
|
||||
props: ['index', 'value', 'errors'],
|
||||
name: "TransactionPiggyBank",
|
||||
data() {
|
||||
return {
|
||||
|
@@ -34,6 +34,9 @@
|
||||
@tags-changed="newTags => this.tags = newTags"
|
||||
/>
|
||||
</div>
|
||||
<span v-if="errors.length > 0">
|
||||
<span v-for="error in errors" class="text-danger small">{{ error }}<br/></span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -49,7 +52,7 @@ export default {
|
||||
components: {
|
||||
VueTagsInput
|
||||
},
|
||||
props: ['value', 'index'],
|
||||
props: ['value', 'index', 'errors'],
|
||||
data() {
|
||||
return {
|
||||
autocompleteItems: [],
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "\u0422\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u043d\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0438",
|
||||
"half_year_budgets": "\u0428\u0435\u0441\u0442\u043c\u0435\u0441\u0435\u0447\u043d\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0438",
|
||||
"yearly_budgets": "\u0413\u043e\u0434\u0438\u0448\u043d\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0438",
|
||||
"split_transaction_title": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f",
|
||||
"errors_submission": "\u0418\u043c\u0430\u0448\u0435 \u043d\u0435\u0449\u043e \u043d\u0435\u0440\u0435\u0434\u043d\u043e \u0441 \u0432\u0430\u0448\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0433\u0440\u0435\u0448\u043a\u0438\u0442\u0435.",
|
||||
"flash_error": "\u0413\u0440\u0435\u0448\u043a\u0430!",
|
||||
"other_budgets": "\u0412\u0440\u0435\u043c\u0435\u0432\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0438",
|
||||
"journal_links": "\u0412\u0440\u044a\u0437\u043a\u0438 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f",
|
||||
"go_to_withdrawals": "\u0412\u0438\u0436\u0442\u0435 \u0442\u0435\u0433\u043b\u0435\u043d\u0438\u044f\u0442\u0430 \u0441\u0438",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "Popis roz\u00fa\u010dtov\u00e1n\u00ed",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "Chyba!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Transaction links",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quartalsbudgets",
|
||||
"half_year_budgets": "Halbjahresbudgets",
|
||||
"yearly_budgets": "Jahresbudgets",
|
||||
"split_transaction_title": "Beschreibung der Splittbuchung",
|
||||
"errors_submission": "Ihre \u00dcbermittlung ist fehlgeschlagen. Bitte \u00fcberpr\u00fcfen Sie die Fehler.",
|
||||
"flash_error": "Fehler!",
|
||||
"other_budgets": "Zeitlich befristete Budgets",
|
||||
"journal_links": "Buchungsverkn\u00fcpfungen",
|
||||
"go_to_withdrawals": "Ausgaben anzeigen",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "\u03a4\u03c1\u03b9\u03bc\u03b7\u03bd\u03b9\u03b1\u03af\u03bf\u03b9 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03af",
|
||||
"half_year_budgets": "\u0395\u03be\u03b1\u03bc\u03b7\u03bd\u03b9\u03b1\u03af\u03bf\u03b9 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03af",
|
||||
"yearly_budgets": "\u0395\u03c4\u03ae\u03c3\u03b9\u03bf\u03b9 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03af",
|
||||
"split_transaction_title": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc",
|
||||
"errors_submission": "\u03a5\u03c0\u03ae\u03c1\u03be\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf \u03bb\u03ac\u03b8\u03bf\u03c2 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03c3\u03b1\u03c2. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b5\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03c4\u03b1 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03b1.",
|
||||
"flash_error": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1!",
|
||||
"other_budgets": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03af \u03bc\u03b5 \u03c7\u03c1\u03bf\u03bd\u03b9\u03ba\u03ae \u03c0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae",
|
||||
"journal_links": "\u03a3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd",
|
||||
"go_to_withdrawals": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bd\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b9\u03c2 \u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03b9\u03c2 \u03c3\u03b1\u03c2",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "Description of the split transaction",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "Error!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Transaction links",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "Description of the split transaction",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "Error!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Transaction links",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Presupuestos trimestrales",
|
||||
"half_year_budgets": "Presupuestos semestrales",
|
||||
"yearly_budgets": "Presupuestos anuales",
|
||||
"split_transaction_title": "Descripci\u00f3n de la transacci\u00f3n dividida",
|
||||
"errors_submission": "Hubo un problema con su env\u00edo. Por favor, compruebe los errores.",
|
||||
"flash_error": "\u00a1Error!",
|
||||
"other_budgets": "Presupuestos de tiempo personalizado",
|
||||
"journal_links": "Enlaces de transacciones",
|
||||
"go_to_withdrawals": "Ir a tus retiradas",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "Jaetun tapahtuman kuvaus",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "Virhe!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Tapahtuman linkit",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Budgets trimestriels",
|
||||
"half_year_budgets": "Budgets semestriels",
|
||||
"yearly_budgets": "Budgets annuels",
|
||||
"split_transaction_title": "Description de l'op\u00e9ration ventil\u00e9e",
|
||||
"errors_submission": "Certaines informations ne sont pas correctes dans votre formulaire. Veuillez v\u00e9rifier les erreurs.",
|
||||
"flash_error": "Erreur !",
|
||||
"other_budgets": "Budgets \u00e0 p\u00e9riode personnalis\u00e9e",
|
||||
"journal_links": "Liens d'op\u00e9ration",
|
||||
"go_to_withdrawals": "Acc\u00e9der \u00e0 vos retraits",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "Felosztott tranzakci\u00f3 le\u00edr\u00e1sa",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "Hiba!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Tranzakci\u00f3 \u00f6sszekapcsol\u00e1sok",
|
||||
"go_to_withdrawals": "Ugr\u00e1s a k\u00f6lts\u00e9gekhez",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Bilanci trimestrali",
|
||||
"half_year_budgets": "Bilanci semestrali",
|
||||
"yearly_budgets": "Budget annuali",
|
||||
"split_transaction_title": "Descrizione della transazione suddivisa",
|
||||
"errors_submission": "Errore durante l'invio. Controlla gli errori segnalati qui sotto.",
|
||||
"flash_error": "Errore!",
|
||||
"other_budgets": "Budget a periodi personalizzati",
|
||||
"journal_links": "Collegamenti della transazione",
|
||||
"go_to_withdrawals": "Vai ai tuoi prelievi",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "Description of the split transaction",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "Feil!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Transaksjonskoblinger",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Driemaandelijkse budgetten",
|
||||
"half_year_budgets": "Halfjaarlijkse budgetten",
|
||||
"yearly_budgets": "Jaarlijkse budgetten",
|
||||
"split_transaction_title": "Beschrijving van de gesplitste transactie",
|
||||
"errors_submission": "Er ging iets mis. Check de errors.",
|
||||
"flash_error": "Fout!",
|
||||
"other_budgets": "Aangepaste budgetten",
|
||||
"journal_links": "Transactiekoppelingen",
|
||||
"go_to_withdrawals": "Ga naar je uitgaven",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Bud\u017cety kwartalne",
|
||||
"half_year_budgets": "Bud\u017cety p\u00f3\u0142roczne",
|
||||
"yearly_budgets": "Bud\u017cety roczne",
|
||||
"split_transaction_title": "Opis podzielonej transakcji",
|
||||
"errors_submission": "Co\u015b posz\u0142o nie tak w czasie zapisu. Prosz\u0119 sprawd\u017a b\u0142\u0119dy.",
|
||||
"flash_error": "B\u0142\u0105d!",
|
||||
"other_budgets": "Bud\u017cety niestandardowe",
|
||||
"journal_links": "Powi\u0105zane transakcje",
|
||||
"go_to_withdrawals": "Przejd\u017a do swoich wydatk\u00f3w",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Or\u00e7amentos trimestrais",
|
||||
"half_year_budgets": "Or\u00e7amentos semestrais",
|
||||
"yearly_budgets": "Or\u00e7amentos anuais",
|
||||
"split_transaction_title": "Descri\u00e7\u00e3o da transa\u00e7\u00e3o dividida",
|
||||
"errors_submission": "H\u00e1 algo de errado com o seu envio. Por favor, verifique os erros abaixo.",
|
||||
"flash_error": "Erro!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Transa\u00e7\u00f5es ligadas",
|
||||
"go_to_withdrawals": "V\u00e1 para seus saques",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "Descrierea tranzac\u021biei divizate",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "Eroare!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Link-uri de tranzac\u021bii",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u044b \u043d\u0430 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
|
||||
"half_year_budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u044b \u043d\u0430 \u043f\u043e\u043b\u0433\u043e\u0434\u0430",
|
||||
"yearly_budgets": "\u0413\u043e\u0434\u043e\u0432\u044b\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u044b",
|
||||
"split_transaction_title": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "\u041e\u0448\u0438\u0431\u043a\u0430!",
|
||||
"other_budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u044b \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0440\u0435\u0437\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438",
|
||||
"journal_links": "\u0421\u0432\u044f\u0437\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438",
|
||||
"go_to_withdrawals": "\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0432\u0430\u0448\u0438\u043c \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "\u0160tvr\u0165ro\u010dn\u00e9 rozpo\u010dty",
|
||||
"half_year_budgets": "Polro\u010dn\u00e9 rozpo\u010dty",
|
||||
"yearly_budgets": "Ro\u010dn\u00e9 rozpo\u010dty",
|
||||
"split_transaction_title": "Popis roz\u00fa\u010dtovania",
|
||||
"errors_submission": "Pri odosielan\u00ed sa nie\u010do nepodarilo. Skontrolujte pros\u00edm chyby.",
|
||||
"flash_error": "Chyba!",
|
||||
"other_budgets": "\u0160pecifick\u00e9 \u010dasovan\u00e9 rozpo\u010dty",
|
||||
"journal_links": "Prepojenia transakcie",
|
||||
"go_to_withdrawals": "Zobrazi\u0165 v\u00fdbery",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Kvartalsbudgetar",
|
||||
"half_year_budgets": "Halv\u00e5rsbudgetar",
|
||||
"yearly_budgets": "\u00c5rliga budgetar",
|
||||
"split_transaction_title": "Beskrivning av delad transaktion",
|
||||
"errors_submission": "N\u00e5got fel uppstod med inskickningen. V\u00e4nligen kontrollera felen nedan.",
|
||||
"flash_error": "Fel!",
|
||||
"other_budgets": "Anpassade tidsinst\u00e4llda budgetar",
|
||||
"journal_links": "Transaktionsl\u00e4nkar",
|
||||
"go_to_withdrawals": "G\u00e5 till dina uttag",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "M\u00f4 t\u1ea3 giao d\u1ecbch t\u00e1ch",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "L\u1ed7i!",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "Li\u00ean k\u1ebft giao d\u1ecbch",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "\u9519\u8bef\uff01",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "\u4ea4\u6613\u8fde\u7ed3",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -64,6 +64,9 @@
|
||||
"quarterly_budgets": "Quarterly budgets",
|
||||
"half_year_budgets": "Half-yearly budgets",
|
||||
"yearly_budgets": "Yearly budgets",
|
||||
"split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0",
|
||||
"errors_submission": "There was something wrong with your submission. Please check out the errors.",
|
||||
"flash_error": "\u932f\u8aa4\uff01",
|
||||
"other_budgets": "Custom timed budgets",
|
||||
"journal_links": "\u4ea4\u6613\u9023\u7d50",
|
||||
"go_to_withdrawals": "Go to your withdrawals",
|
||||
|
@@ -2385,9 +2385,9 @@ d@1, d@^1.0.1:
|
||||
type "^1.0.1"
|
||||
|
||||
date-fns-tz@^1.0.12:
|
||||
version "1.0.12"
|
||||
resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.0.12.tgz#2d680e1099767775cff7a30eac34362d52639fed"
|
||||
integrity sha512-Ca+9pjGkU90XDHnclfSjz9o7g/ZqyYyYI0aCYmbf65P75oy8gktuaRslO3UPXl3ADgAnF9/KCykQkpU3/xvtWQ==
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.1.1.tgz#2e0dfcc62cc5b7b5fa7ea620f11a5e7f63a7ed75"
|
||||
integrity sha512-5PR604TlyvpiNXtvn+PZCcCazsI8fI1am3/aimNFN8CMqHQ0KRl+6hB46y4mDbB7bk3+caEx3qHhS7Ewac/FIg==
|
||||
|
||||
date-fns@^2.8.1:
|
||||
version "2.16.1"
|
||||
@@ -2636,9 +2636,9 @@ ejs@^2.6.1:
|
||||
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
||||
|
||||
electron-to-chromium@^1.3.634:
|
||||
version "1.3.648"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.648.tgz#b05926eca1843c04b283e682a1fc6c10af7e9dda"
|
||||
integrity sha512-4POzwyQ80tkDiBwkxn7IpfzioimrjRSFX1sCQ3pLZsYJ5ERYmwzdq0hZZ3nFP7Z6GtmnSn3xwWDm8FPlMeOoEQ==
|
||||
version "1.3.649"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.649.tgz#3aa8be052d4d268ede45d8e98d0cd60ffefad607"
|
||||
integrity sha512-ojGDupQ3UMkvPWcTICe4JYe17+o9OLiFMPoduoR72Zp2ILt1mRVeqnxBEd6s/ptekrnsFU+0A4lStfBe/wyG/A==
|
||||
|
||||
elliptic@^6.5.3:
|
||||
version "6.5.3"
|
||||
@@ -5778,9 +5778,9 @@ regjsgen@^0.5.1:
|
||||
integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
|
||||
|
||||
regjsparser@^0.6.4:
|
||||
version "0.6.6"
|
||||
resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.6.tgz#6d8c939d1a654f78859b08ddcc4aa777f3fa800a"
|
||||
integrity sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ==
|
||||
version "0.6.7"
|
||||
resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c"
|
||||
integrity sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==
|
||||
dependencies:
|
||||
jsesc "~0.5.0"
|
||||
|
||||
|
Reference in New Issue
Block a user