mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-06 04:34:00 +00:00
Update frontend.
This commit is contained in:
@@ -49,7 +49,7 @@ class PreferencesController extends Controller
|
|||||||
|
|
||||||
$this->middleware(
|
$this->middleware(
|
||||||
function ($request, $next) {
|
function ($request, $next) {
|
||||||
app('view')->share('title', (string) trans('firefly.preferences'));
|
app('view')->share('title', (string)trans('firefly.preferences'));
|
||||||
app('view')->share('mainTitleIcon', 'fa-gear');
|
app('view')->share('mainTitleIcon', 'fa-gear');
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
@@ -111,7 +111,7 @@ class PreferencesController extends Controller
|
|||||||
Log::error($e->getMessage());
|
Log::error($e->getMessage());
|
||||||
$locales = [];
|
$locales = [];
|
||||||
}
|
}
|
||||||
$locales = ['equal' => (string) trans('firefly.equal_to_language')] + $locales;
|
$locales = ['equal' => (string)trans('firefly.equal_to_language')] + $locales;
|
||||||
// an important fallback is that the frontPageAccount array gets refilled automatically
|
// an important fallback is that the frontPageAccount array gets refilled automatically
|
||||||
// when it turns up empty.
|
// when it turns up empty.
|
||||||
if (0 === count($frontPageAccounts->data)) {
|
if (0 === count($frontPageAccounts->data)) {
|
||||||
@@ -151,7 +151,7 @@ class PreferencesController extends Controller
|
|||||||
$frontPageAccounts = [];
|
$frontPageAccounts = [];
|
||||||
if (is_array($request->get('frontPageAccounts')) && count($request->get('frontPageAccounts')) > 0) {
|
if (is_array($request->get('frontPageAccounts')) && count($request->get('frontPageAccounts')) > 0) {
|
||||||
foreach ($request->get('frontPageAccounts') as $id) {
|
foreach ($request->get('frontPageAccounts') as $id) {
|
||||||
$frontPageAccounts[] = (int) $id;
|
$frontPageAccounts[] = (int)$id;
|
||||||
}
|
}
|
||||||
app('preferences')->set('frontPageAccounts', $frontPageAccounts);
|
app('preferences')->set('frontPageAccounts', $frontPageAccounts);
|
||||||
}
|
}
|
||||||
@@ -164,14 +164,14 @@ class PreferencesController extends Controller
|
|||||||
session()->forget('range');
|
session()->forget('range');
|
||||||
|
|
||||||
// custom fiscal year
|
// custom fiscal year
|
||||||
$customFiscalYear = 1 === (int) $request->get('customFiscalYear');
|
$customFiscalYear = 1 === (int)$request->get('customFiscalYear');
|
||||||
$fiscalYearStart = date('m-d', strtotime((string) $request->get('fiscalYearStart')));
|
$fiscalYearStart = date('m-d', strtotime((string)$request->get('fiscalYearStart')));
|
||||||
app('preferences')->set('customFiscalYear', $customFiscalYear);
|
app('preferences')->set('customFiscalYear', $customFiscalYear);
|
||||||
app('preferences')->set('fiscalYearStart', $fiscalYearStart);
|
app('preferences')->set('fiscalYearStart', $fiscalYearStart);
|
||||||
|
|
||||||
// save page size:
|
// save page size:
|
||||||
app('preferences')->set('listPageSize', 50);
|
app('preferences')->set('listPageSize', 50);
|
||||||
$listPageSize = (int) $request->get('listPageSize');
|
$listPageSize = (int)$request->get('listPageSize');
|
||||||
if ($listPageSize > 0 && $listPageSize < 1337) {
|
if ($listPageSize > 0 && $listPageSize < 1337) {
|
||||||
app('preferences')->set('listPageSize', $listPageSize);
|
app('preferences')->set('listPageSize', $listPageSize);
|
||||||
}
|
}
|
||||||
@@ -207,10 +207,12 @@ class PreferencesController extends Controller
|
|||||||
'notes' => isset($setOptions['notes']),
|
'notes' => isset($setOptions['notes']),
|
||||||
'attachments' => isset($setOptions['attachments']),
|
'attachments' => isset($setOptions['attachments']),
|
||||||
'external_uri' => isset($setOptions['external_uri']),
|
'external_uri' => isset($setOptions['external_uri']),
|
||||||
|
'location' => isset($setOptions['location']),
|
||||||
|
'links' => isset($setOptions['links']),
|
||||||
];
|
];
|
||||||
app('preferences')->set('transaction_journal_optional_fields', $optionalTj);
|
app('preferences')->set('transaction_journal_optional_fields', $optionalTj);
|
||||||
|
|
||||||
session()->flash('success', (string) trans('firefly.saved_preferences'));
|
session()->flash('success', (string)trans('firefly.saved_preferences'));
|
||||||
app('preferences')->mark();
|
app('preferences')->mark();
|
||||||
|
|
||||||
// telemetry: user language preference + default language.
|
// telemetry: user language preference + default language.
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
"node-forge": ">=0.10.0",
|
"node-forge": ">=0.10.0",
|
||||||
"resolve-url-loader": "^3.1.2",
|
"resolve-url-loader": "^3.1.2",
|
||||||
"sass": "^1.32.2",
|
"sass": "^1.32.2",
|
||||||
"sass-loader": "^11.0.1",
|
"sass-loader": "^10.1.1",
|
||||||
"vue": "^2.6.12",
|
"vue": "^2.6.12",
|
||||||
"vue-i18n": "^8.22.2",
|
"vue-i18n": "^8.22.2",
|
||||||
"vue-template-compiler": "^2.6.12"
|
"vue-template-compiler": "^2.6.12"
|
||||||
|
@@ -55,7 +55,8 @@ const state = () => ({
|
|||||||
piggy_bank: [],
|
piggy_bank: [],
|
||||||
internal_reference: [],
|
internal_reference: [],
|
||||||
external_url: [],
|
external_url: [],
|
||||||
notes: []
|
notes: [],
|
||||||
|
location: []
|
||||||
},
|
},
|
||||||
defaultTransaction: {
|
defaultTransaction: {
|
||||||
// basic
|
// basic
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<alert :message="errorMessage" type="danger"/>
|
<alert :message="errorMessage" type="danger"/>
|
||||||
<alert :message="successMessage" type="success"/>
|
<alert :message="successMessage" type="success"/>
|
||||||
<SplitPills :transactions="transactions" />
|
<SplitPills :transactions="transactions"/>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<SplitForm
|
<SplitForm
|
||||||
v-for="(transaction, index) in this.transactions"
|
v-for="(transaction, index) in this.transactions"
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
:transaction="transaction"
|
:transaction="transaction"
|
||||||
:index="index"
|
:index="index"
|
||||||
:count="transactions.length"
|
:count="transactions.length"
|
||||||
|
:custom-fields="customFields"
|
||||||
:submitted-transaction="submittedTransaction"
|
:submitted-transaction="submittedTransaction"
|
||||||
v-on:uploaded-attachments="uploadedAttachment($event)"
|
v-on:uploaded-attachments="uploadedAttachment($event)"
|
||||||
/>
|
/>
|
||||||
@@ -116,7 +117,7 @@ export default {
|
|||||||
created() {
|
created() {
|
||||||
this.storeAllowedOpposingTypes();
|
this.storeAllowedOpposingTypes();
|
||||||
this.storeAccountToTransaction();
|
this.storeAccountToTransaction();
|
||||||
this.storeCustomDateFields();
|
this.storeCustomFields();
|
||||||
this.addTransaction();
|
this.addTransaction();
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -125,6 +126,9 @@ export default {
|
|||||||
errorMessage: '',
|
errorMessage: '',
|
||||||
successMessage: '',
|
successMessage: '',
|
||||||
|
|
||||||
|
// custom fields, useful for components:
|
||||||
|
customFields: [],
|
||||||
|
|
||||||
// states for the form (makes sense right)
|
// states for the form (makes sense right)
|
||||||
enableSubmit: true,
|
enableSubmit: true,
|
||||||
createAnother: false,
|
createAnother: false,
|
||||||
@@ -155,7 +159,6 @@ export default {
|
|||||||
...mapGetters([
|
...mapGetters([
|
||||||
'transactionType',
|
'transactionType',
|
||||||
'transactions',
|
'transactions',
|
||||||
'customDateFields',
|
|
||||||
'date',
|
'date',
|
||||||
'groupTitle'
|
'groupTitle'
|
||||||
])
|
])
|
||||||
@@ -203,27 +206,9 @@ export default {
|
|||||||
* it should be done via the create.js Vue store because multiple components are interested in the
|
* it should be done via the create.js Vue store because multiple components are interested in the
|
||||||
* user's custom transaction fields.
|
* user's custom transaction fields.
|
||||||
*/
|
*/
|
||||||
storeCustomDateFields: function () {
|
storeCustomFields: function () {
|
||||||
axios.get('./api/v1/preferences/transaction_journal_optional_fields').then(response => {
|
axios.get('./api/v1/preferences/transaction_journal_optional_fields').then(response => {
|
||||||
let fields = response.data.data.attributes.data;
|
this.customFields = response.data.data.attributes.data;
|
||||||
let allDateFields = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date'];
|
|
||||||
let selectedDateFields = {
|
|
||||||
interest_date: false,
|
|
||||||
book_date: false,
|
|
||||||
process_date: false,
|
|
||||||
due_date: false,
|
|
||||||
payment_date: false,
|
|
||||||
invoice_date: false,
|
|
||||||
};
|
|
||||||
for (let key in fields) {
|
|
||||||
if (fields.hasOwnProperty(key)) {
|
|
||||||
if (-1 !== allDateFields.indexOf(key)) {
|
|
||||||
selectedDateFields[key] = fields[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// see we already store it in the store, so this would be an easy change.
|
|
||||||
this.$store.commit('transactions/create/setCustomDateFields', selectedDateFields);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
@@ -100,6 +100,7 @@
|
|||||||
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12 offset-xl-2 offset-lg-2">
|
<div class="col-xl-5 col-lg-5 col-md-12 col-sm-12 col-xs-12 offset-xl-2 offset-lg-2">
|
||||||
<TransactionCustomDates
|
<TransactionCustomDates
|
||||||
:index="index"
|
:index="index"
|
||||||
|
:custom-fields.sync="customFields"
|
||||||
:errors="transaction.errors.custom_dates"
|
:errors="transaction.errors.custom_dates"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -164,12 +165,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- end card for meta -->
|
<!-- end card for meta -->
|
||||||
<!-- card for extra -->
|
<!-- card for extra -->
|
||||||
<div class="row">
|
<div class="row" v-if="hasMetaFields">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title">
|
<h3 class="card-title">
|
||||||
{{ $t('firefly.transaction_journal_meta') }}
|
{{ $t('firefly.transaction_journal_extra') }}
|
||||||
<span v-if="count > 1">({{ index + 1 }} / {{ count }}) </span>
|
<span v-if="count > 1">({{ index + 1 }} / {{ count }}) </span>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
@@ -182,17 +183,20 @@
|
|||||||
:index="index"
|
:index="index"
|
||||||
v-model="transaction.internal_reference"
|
v-model="transaction.internal_reference"
|
||||||
:errors="transaction.errors.internal_reference"
|
:errors="transaction.errors.internal_reference"
|
||||||
|
:custom-fields.sync="customFields"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TransactionExternalUrl
|
<TransactionExternalUrl
|
||||||
:index="index"
|
:index="index"
|
||||||
v-model="transaction.external_url"
|
v-model="transaction.external_url"
|
||||||
:errors="transaction.errors.external_url"
|
:errors="transaction.errors.external_url"
|
||||||
|
:custom-fields.sync="customFields"
|
||||||
/>
|
/>
|
||||||
<TransactionNotes
|
<TransactionNotes
|
||||||
:index="index"
|
:index="index"
|
||||||
v-model="transaction.notes"
|
v-model="transaction.notes"
|
||||||
:errors="transaction.errors.notes"
|
:errors="transaction.errors.notes"
|
||||||
|
:custom-fields.sync="customFields"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12">
|
<div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12">
|
||||||
@@ -204,9 +208,20 @@
|
|||||||
:transaction_journal_id="transaction.transaction_journal_id"
|
:transaction_journal_id="transaction.transaction_journal_id"
|
||||||
:submitted_transaction="submittedTransaction"
|
:submitted_transaction="submittedTransaction"
|
||||||
v-model="transaction.attachments"
|
v-model="transaction.attachments"
|
||||||
|
:custom-fields.sync="customFields"
|
||||||
|
/>
|
||||||
|
<TransactionLocation
|
||||||
|
:index="index"
|
||||||
|
v-model="transaction.notes"
|
||||||
|
:errors="transaction.errors.location"
|
||||||
|
:custom-fields.sync="customFields"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TransactionLinks :index="index" v-model="transaction.links" />
|
<TransactionLinks
|
||||||
|
:index="index"
|
||||||
|
v-model="transaction.links"
|
||||||
|
:custom-fields.sync="customFields"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -242,6 +257,7 @@ import TransactionLinks from "./TransactionLinks";
|
|||||||
import TransactionAttachments from "./TransactionAttachments";
|
import TransactionAttachments from "./TransactionAttachments";
|
||||||
import SplitPills from "./SplitPills";
|
import SplitPills from "./SplitPills";
|
||||||
import {createNamespacedHelpers} from "vuex";
|
import {createNamespacedHelpers} from "vuex";
|
||||||
|
import TransactionLocation from "./TransactionLocation";
|
||||||
|
|
||||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||||
|
|
||||||
@@ -251,13 +267,35 @@ export default {
|
|||||||
'transaction',
|
'transaction',
|
||||||
'split',
|
'split',
|
||||||
'count',
|
'count',
|
||||||
|
'customFields', // for custom transaction form fields.
|
||||||
'index',
|
'index',
|
||||||
'submittedTransaction' // need to know if transaction is submitted.
|
'submittedTransaction' // need to know if transaction is submitted.
|
||||||
],
|
],
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters(['transactionType',])
|
...mapGetters(['transactionType',]),
|
||||||
|
hasMetaFields: function () {
|
||||||
|
let requiredFields = [
|
||||||
|
'internal_reference',
|
||||||
|
'notes',
|
||||||
|
'attachments',
|
||||||
|
'external_uri',
|
||||||
|
'location',
|
||||||
|
'links',
|
||||||
|
];
|
||||||
|
for (let field in this.customFields) {
|
||||||
|
if (this.customFields.hasOwnProperty(field)) {
|
||||||
|
if (requiredFields.includes(field)) {
|
||||||
|
if (true === this.customFields[field]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
|
TransactionLocation,
|
||||||
SplitPills,
|
SplitPills,
|
||||||
TransactionAttachments,
|
TransactionAttachments,
|
||||||
TransactionNotes,
|
TransactionNotes,
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="form-group">
|
<div class="form-group" v-if="showField">
|
||||||
<div class="text-xs d-none d-lg-block d-xl-block">
|
<div class="text-xs d-none d-lg-block d-xl-block">
|
||||||
{{ $t('firefly.attachments') }}
|
{{ $t('firefly.attachments') }}
|
||||||
</div>
|
</div>
|
||||||
@@ -38,16 +38,35 @@
|
|||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "TransactionAttachments",
|
name: "TransactionAttachments",
|
||||||
props: ['transaction_journal_id'],
|
props: ['transaction_journal_id', 'customFields'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
availableFields: this.customFields
|
||||||
|
}
|
||||||
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
customFields: function (value) {
|
||||||
|
this.availableFields = value;
|
||||||
|
},
|
||||||
transaction_journal_id: function (value) {
|
transaction_journal_id: function (value) {
|
||||||
console.log('transaction_journal_id changed to ' + value);
|
if (!this.showField) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// console.log('transaction_journal_id changed to ' + value);
|
||||||
// do upload!
|
// do upload!
|
||||||
if (0 !== value) {
|
if (0 !== value) {
|
||||||
this.doUpload();
|
this.doUpload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
showField: function () {
|
||||||
|
if ('attachments' in this.availableFields) {
|
||||||
|
return this.availableFields.attachments;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
doUpload: function () {
|
doUpload: function () {
|
||||||
console.log('Now in doUpload() for ' + this.$refs.att.files.length + ' files.');
|
console.log('Now in doUpload() for ' + this.$refs.att.files.length + ' files.');
|
||||||
|
@@ -20,11 +20,11 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="form-group" v-for="(enabled, name) in enabledDates">
|
<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">
|
<div class="text-xs d-none d-lg-block d-xl-block" v-if="enabled && isDateField(name)">
|
||||||
{{ $t('form.' + name) }}
|
{{ $t('form.' + name) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group" v-if="enabled">
|
<div class="input-group" v-if="enabled && isDateField(name)">
|
||||||
<input
|
<input
|
||||||
class="form-control"
|
class="form-control"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -44,52 +44,37 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
// TODO: error handling
|
// TODO: error handling
|
||||||
|
// TODO dont use store?
|
||||||
import {createNamespacedHelpers} from "vuex";
|
import {createNamespacedHelpers} from "vuex";
|
||||||
|
|
||||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||||
export default {
|
export default {
|
||||||
name: "TransactionCustomDates",
|
name: "TransactionCustomDates",
|
||||||
props: ['index', 'errors'],
|
props: ['index', 'errors', 'customFields'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
enabledDates: {},
|
dateFields: ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date'],
|
||||||
|
availableFields: this.customFields
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
watch: {
|
||||||
this.getCustomDates();
|
customFields: function(value) {
|
||||||
|
this.availableFields = value;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapGetters(['transactions']),
|
...mapGetters(['transactions']),
|
||||||
...mapMutations(['updateField',],
|
...mapMutations(['updateField',],
|
||||||
),
|
),
|
||||||
|
isDateField: function (name) {
|
||||||
|
return this.dateFields.includes(name)
|
||||||
|
},
|
||||||
getFieldValue(field) {
|
getFieldValue(field) {
|
||||||
return this.transactions()[parseInt(this.index)][field] ?? '';
|
return this.transactions()[parseInt(this.index)][field] ?? '';
|
||||||
},
|
},
|
||||||
setFieldValue(event, field) {
|
setFieldValue(event, field) {
|
||||||
this.updateField({index: this.index, field: field, value: event.target.value});
|
this.updateField({index: this.index, field: field, value: event.target.value});
|
||||||
},
|
},
|
||||||
getCustomDates: function () {
|
|
||||||
axios.get('./api/v1/preferences/transaction_journal_optional_fields').then(response => {
|
|
||||||
let fields = response.data.data.attributes.data;
|
|
||||||
let allDateFields = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date'];
|
|
||||||
let selectedDateFields = {
|
|
||||||
interest_date: false,
|
|
||||||
book_date: false,
|
|
||||||
process_date: false,
|
|
||||||
due_date: false,
|
|
||||||
payment_date: false,
|
|
||||||
invoice_date: false,
|
|
||||||
};
|
|
||||||
for (let key in fields) {
|
|
||||||
if (fields.hasOwnProperty(key)) {
|
|
||||||
if (-1 !== allDateFields.indexOf(key)) {
|
|
||||||
selectedDateFields[key] = fields[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.enabledDates = selectedDateFields;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="form-group">
|
<div class="form-group" v-if="showField">
|
||||||
<div class="text-xs d-none d-lg-block d-xl-block">
|
<div class="text-xs d-none d-lg-block d-xl-block">
|
||||||
{{ $t('firefly.external_url') }}
|
{{ $t('firefly.external_url') }}
|
||||||
</div>
|
</div>
|
||||||
@@ -44,11 +44,20 @@ import {createNamespacedHelpers} from "vuex";
|
|||||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: ['index', 'value', 'errors'],
|
props: ['index', 'value', 'errors', 'customFields'],
|
||||||
name: "TransactionExternalUrl",
|
name: "TransactionExternalUrl",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
url: this.value
|
url: this.value,
|
||||||
|
availableFields: this.customFields
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
showField: function () {
|
||||||
|
if ('external_uri' in this.availableFields) {
|
||||||
|
return this.availableFields.external_uri;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -59,6 +68,9 @@ export default {
|
|||||||
),
|
),
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
customFields: function (value) {
|
||||||
|
this.availableFields = value;
|
||||||
|
},
|
||||||
url: function (value) {
|
url: function (value) {
|
||||||
this.updateField({field: 'external_url', index: this.index, value: value});
|
this.updateField({field: 'external_url', index: this.index, value: value});
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="form-group">
|
<div class="form-group" v-if="showField">
|
||||||
<div class="text-xs d-none d-lg-block d-xl-block">
|
<div class="text-xs d-none d-lg-block d-xl-block">
|
||||||
{{ $t('firefly.internal_reference') }}
|
{{ $t('firefly.internal_reference') }}
|
||||||
</div>
|
</div>
|
||||||
@@ -44,11 +44,20 @@ import {createNamespacedHelpers} from "vuex";
|
|||||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: ['index', 'value', 'errors'],
|
props: ['index', 'value', 'errors', 'customFields'],
|
||||||
name: "TransactionInternalReference",
|
name: "TransactionInternalReference",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
reference: this.value
|
reference: this.value,
|
||||||
|
availableFields: this.customFields
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
showField: function () {
|
||||||
|
if ('internal_reference' in this.availableFields) {
|
||||||
|
return this.availableFields.internal_reference;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -59,6 +68,9 @@ export default {
|
|||||||
),
|
),
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
customFields: function (value) {
|
||||||
|
this.availableFields = value;
|
||||||
|
},
|
||||||
reference: function (value) {
|
reference: function (value) {
|
||||||
this.updateField({field: 'internal_reference', index: this.index, value: value});
|
this.updateField({field: 'internal_reference', index: this.index, value: value});
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div v-if="showField">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="text-xs d-none d-lg-block d-xl-block">
|
<div class="text-xs d-none d-lg-block d-xl-block">
|
||||||
{{ $t('firefly.journal_links') }}
|
{{ $t('firefly.journal_links') }}
|
||||||
@@ -191,7 +191,7 @@ const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers
|
|||||||
const lodashClonedeep = require('lodash.clonedeep');
|
const lodashClonedeep = require('lodash.clonedeep');
|
||||||
// TODO error handling
|
// TODO error handling
|
||||||
export default {
|
export default {
|
||||||
props: ['index', 'value', 'errors'],
|
props: ['index', 'value', 'errors', 'customFields'],
|
||||||
name: "TransactionLinks",
|
name: "TransactionLinks",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -202,6 +202,7 @@ export default {
|
|||||||
query: '',
|
query: '',
|
||||||
searching: false,
|
searching: false,
|
||||||
links: [],
|
links: [],
|
||||||
|
availableFields: this.customFields
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@@ -209,9 +210,20 @@ export default {
|
|||||||
this.links = lodashClonedeep(this.value);
|
this.links = lodashClonedeep(this.value);
|
||||||
this.getLinkTypes();
|
this.getLinkTypes();
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
showField: function () {
|
||||||
|
if ('links' in this.availableFields) {
|
||||||
|
return this.availableFields.links;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
watch: {
|
watch: {
|
||||||
links: function (value) {
|
links: function (value) {
|
||||||
this.updateField({index: this.index, field: 'links', value: lodashClonedeep(value)});
|
this.updateField({index: this.index, field: 'links', value: lodashClonedeep(value)});
|
||||||
|
},
|
||||||
|
customFields: function (value) {
|
||||||
|
this.availableFields = value;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
59
frontend/src/components/transactions/TransactionLocation.vue
Normal file
59
frontend/src/components/transactions/TransactionLocation.vue
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
<!--
|
||||||
|
- TransactionLocation.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" v-if="showField">
|
||||||
|
<div class="text-xs d-none d-lg-block d-xl-block">
|
||||||
|
{{ $t('firefly.location') }}
|
||||||
|
</div>
|
||||||
|
<div class="input-group">
|
||||||
|
(TODO)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "TransactionLocation",
|
||||||
|
props: ['index', 'value', 'errors', 'customFields'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
availableFields: this.customFields
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
showField: function () {
|
||||||
|
if ('location' in this.availableFields) {
|
||||||
|
return this.availableFields.location;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
customFields: function (value) {
|
||||||
|
this.availableFields = value;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group" v-if="showField">
|
||||||
<div class="text-xs d-none d-lg-block d-xl-block">
|
<div class="text-xs d-none d-lg-block d-xl-block">
|
||||||
{{ $t('firefly.notes') }}
|
{{ $t('firefly.notes') }}
|
||||||
</div>
|
</div>
|
||||||
@@ -41,11 +41,20 @@ import {createNamespacedHelpers} from "vuex";
|
|||||||
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
const {mapState, mapGetters, mapActions, mapMutations} = createNamespacedHelpers('transactions/create')
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: ['index', 'value', 'errors'],
|
props: ['index', 'value', 'errors', 'customFields'],
|
||||||
name: "TransactionNotes",
|
name: "TransactionNotes",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
notes: this.value
|
notes: this.value,
|
||||||
|
availableFields: this.customFields
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
showField: function () {
|
||||||
|
if ('notes' in this.availableFields) {
|
||||||
|
return this.availableFields.notes;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -56,6 +65,9 @@ export default {
|
|||||||
),
|
),
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
customFields: function (value) {
|
||||||
|
this.availableFields = value;
|
||||||
|
},
|
||||||
notes: function (value) {
|
notes: function (value) {
|
||||||
this.updateField({field: 'notes', index: this.index, value: value});
|
this.updateField({field: 'notes', index: this.index, value: value});
|
||||||
}
|
}
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435",
|
||||||
"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",
|
"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",
|
"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",
|
"go_to_withdrawals": "\u0412\u0438\u0436\u0442\u0435 \u0442\u0435\u0433\u043b\u0435\u043d\u0438\u044f\u0442\u0430 \u0441\u0438",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Um\u00edst\u011bn\u00ed",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Transaction links",
|
"journal_links": "Transaction links",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Standort",
|
||||||
"other_budgets": "Zeitlich befristete Budgets",
|
"other_budgets": "Zeitlich befristete Budgets",
|
||||||
"journal_links": "Buchungsverkn\u00fcpfungen",
|
"journal_links": "Buchungsverkn\u00fcpfungen",
|
||||||
"go_to_withdrawals": "Ausgaben anzeigen",
|
"go_to_withdrawals": "Ausgaben anzeigen",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "\u03a4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\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",
|
"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",
|
"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",
|
"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",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Location",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Transaction links",
|
"journal_links": "Transaction links",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Location",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Transaction links",
|
"journal_links": "Transaction links",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Ubicaci\u00f3n",
|
||||||
"other_budgets": "Presupuestos de tiempo personalizado",
|
"other_budgets": "Presupuestos de tiempo personalizado",
|
||||||
"journal_links": "Enlaces de transacciones",
|
"journal_links": "Enlaces de transacciones",
|
||||||
"go_to_withdrawals": "Ir a tus retiradas",
|
"go_to_withdrawals": "Ir a tus retiradas",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Sijainti",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Tapahtuman linkit",
|
"journal_links": "Tapahtuman linkit",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Emplacement",
|
||||||
"other_budgets": "Budgets \u00e0 p\u00e9riode personnalis\u00e9e",
|
"other_budgets": "Budgets \u00e0 p\u00e9riode personnalis\u00e9e",
|
||||||
"journal_links": "Liens d'op\u00e9ration",
|
"journal_links": "Liens d'op\u00e9ration",
|
||||||
"go_to_withdrawals": "Acc\u00e9der \u00e0 vos retraits",
|
"go_to_withdrawals": "Acc\u00e9der \u00e0 vos retraits",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Hely",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Tranzakci\u00f3 \u00f6sszekapcsol\u00e1sok",
|
"journal_links": "Tranzakci\u00f3 \u00f6sszekapcsol\u00e1sok",
|
||||||
"go_to_withdrawals": "Ugr\u00e1s a k\u00f6lts\u00e9gekhez",
|
"go_to_withdrawals": "Ugr\u00e1s a k\u00f6lts\u00e9gekhez",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Posizione",
|
||||||
"other_budgets": "Budget a periodi personalizzati",
|
"other_budgets": "Budget a periodi personalizzati",
|
||||||
"journal_links": "Collegamenti della transazione",
|
"journal_links": "Collegamenti della transazione",
|
||||||
"go_to_withdrawals": "Vai ai tuoi prelievi",
|
"go_to_withdrawals": "Vai ai tuoi prelievi",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Sted",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Transaksjonskoblinger",
|
"journal_links": "Transaksjonskoblinger",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Plaats",
|
||||||
"other_budgets": "Aangepaste budgetten",
|
"other_budgets": "Aangepaste budgetten",
|
||||||
"journal_links": "Transactiekoppelingen",
|
"journal_links": "Transactiekoppelingen",
|
||||||
"go_to_withdrawals": "Ga naar je uitgaven",
|
"go_to_withdrawals": "Ga naar je uitgaven",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Lokalizacja",
|
||||||
"other_budgets": "Bud\u017cety niestandardowe",
|
"other_budgets": "Bud\u017cety niestandardowe",
|
||||||
"journal_links": "Powi\u0105zane transakcje",
|
"journal_links": "Powi\u0105zane transakcje",
|
||||||
"go_to_withdrawals": "Przejd\u017a do swoich wydatk\u00f3w",
|
"go_to_withdrawals": "Przejd\u017a do swoich wydatk\u00f3w",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Localiza\u00e7\u00e3o",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Transa\u00e7\u00f5es ligadas",
|
"journal_links": "Transa\u00e7\u00f5es ligadas",
|
||||||
"go_to_withdrawals": "V\u00e1 para seus saques",
|
"go_to_withdrawals": "V\u00e1 para seus saques",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Localiza\u00e7\u00e3o",
|
||||||
"other_budgets": "Or\u00e7amentos de tempo personalizado",
|
"other_budgets": "Or\u00e7amentos de tempo personalizado",
|
||||||
"journal_links": "Liga\u00e7\u00f5es de transac\u00e7\u00e3o",
|
"journal_links": "Liga\u00e7\u00f5es de transac\u00e7\u00e3o",
|
||||||
"go_to_withdrawals": "Ir para os seus levantamentos",
|
"go_to_withdrawals": "Ir para os seus levantamentos",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Loca\u021bie",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Link-uri de tranzac\u021bii",
|
"journal_links": "Link-uri de tranzac\u021bii",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435",
|
||||||
"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",
|
"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",
|
"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",
|
"go_to_withdrawals": "\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0432\u0430\u0448\u0438\u043c \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Poloha",
|
||||||
"other_budgets": "\u0160pecifick\u00e9 \u010dasovan\u00e9 rozpo\u010dty",
|
"other_budgets": "\u0160pecifick\u00e9 \u010dasovan\u00e9 rozpo\u010dty",
|
||||||
"journal_links": "Prepojenia transakcie",
|
"journal_links": "Prepojenia transakcie",
|
||||||
"go_to_withdrawals": "Zobrazi\u0165 v\u00fdbery",
|
"go_to_withdrawals": "Zobrazi\u0165 v\u00fdbery",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "Plats",
|
||||||
"other_budgets": "Anpassade tidsinst\u00e4llda budgetar",
|
"other_budgets": "Anpassade tidsinst\u00e4llda budgetar",
|
||||||
"journal_links": "Transaktionsl\u00e4nkar",
|
"journal_links": "Transaktionsl\u00e4nkar",
|
||||||
"go_to_withdrawals": "G\u00e5 till dina uttag",
|
"go_to_withdrawals": "G\u00e5 till dina uttag",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "V\u1ecb tr\u00ed",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "Li\u00ean k\u1ebft giao d\u1ecbch",
|
"journal_links": "Li\u00ean k\u1ebft giao d\u1ecbch",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "\u4f4d\u7f6e",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "\u4ea4\u6613\u8fde\u7ed3",
|
"journal_links": "\u4ea4\u6613\u8fde\u7ed3",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
"custom_period": "Custom period",
|
"custom_period": "Custom period",
|
||||||
"reset_to_current": "Reset to current period",
|
"reset_to_current": "Reset to current period",
|
||||||
"select_period": "Select a period",
|
"select_period": "Select a period",
|
||||||
|
"location": "\u4f4d\u7f6e",
|
||||||
"other_budgets": "Custom timed budgets",
|
"other_budgets": "Custom timed budgets",
|
||||||
"journal_links": "\u4ea4\u6613\u9023\u7d50",
|
"journal_links": "\u4ea4\u6613\u9023\u7d50",
|
||||||
"go_to_withdrawals": "Go to your withdrawals",
|
"go_to_withdrawals": "Go to your withdrawals",
|
||||||
|
@@ -858,7 +858,7 @@
|
|||||||
"@types/minimatch" "*"
|
"@types/minimatch" "*"
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/json-schema@^7.0.5":
|
"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
|
||||||
version "7.0.7"
|
version "7.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
|
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
|
||||||
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
|
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
|
||||||
@@ -869,9 +869,9 @@
|
|||||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "14.14.27"
|
version "14.14.28"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.27.tgz#c7127f8da0498993e13b1a42faf1303d3110d2f2"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.28.tgz#cade4b64f8438f588951a6b35843ce536853f25b"
|
||||||
integrity sha512-Ecfmo4YDQPwuqTCl1yBxLV5ihKfRlkBmzUEDcfIRvDxOTGQEeikr317Ln7Gcv0tjA8dVgKI3rniqW2G1OyKDng==
|
integrity sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g==
|
||||||
|
|
||||||
"@types/q@^1.5.1":
|
"@types/q@^1.5.1":
|
||||||
version "1.5.4"
|
version "1.5.4"
|
||||||
@@ -1098,7 +1098,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
|
|||||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
||||||
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
||||||
|
|
||||||
ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4:
|
ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5:
|
||||||
version "6.12.6"
|
version "6.12.6"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||||
@@ -2626,9 +2626,9 @@ ejs@^2.6.1:
|
|||||||
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
||||||
|
|
||||||
electron-to-chromium@^1.3.649:
|
electron-to-chromium@^1.3.649:
|
||||||
version "1.3.664"
|
version "1.3.665"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.664.tgz#8fb039e2fa8ef3ab2568308464a28425d4f6e2a3"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.665.tgz#6d0937376f6a919c0f289202c4be77790a6175e5"
|
||||||
integrity sha512-yb8LrTQXQnh9yhnaIHLk6CYugF/An50T20+X0h++hjjhVfgSp1DGoMSYycF8/aD5eiqS4QwaNhiduFvK8rifRg==
|
integrity sha512-LIjx1JheOz7LM8DMEQ2tPnbBzJ4nVG1MKutsbEMLnJfwfVdPIsyagqfLp56bOWhdBrYGXWHaTayYkllIU2TauA==
|
||||||
|
|
||||||
elliptic@^6.5.3:
|
elliptic@^6.5.3:
|
||||||
version "6.5.4"
|
version "6.5.4"
|
||||||
@@ -5943,13 +5943,16 @@ safe-regex@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
sass-loader@^11.0.1:
|
sass-loader@^10.1.1:
|
||||||
version "11.0.1"
|
version "10.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-11.0.1.tgz#8672f896593466573b904f47693e0695368e38c9"
|
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d"
|
||||||
integrity sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw==
|
integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw==
|
||||||
dependencies:
|
dependencies:
|
||||||
klona "^2.0.4"
|
klona "^2.0.4"
|
||||||
|
loader-utils "^2.0.0"
|
||||||
neo-async "^2.6.2"
|
neo-async "^2.6.2"
|
||||||
|
schema-utils "^3.0.0"
|
||||||
|
semver "^7.3.2"
|
||||||
|
|
||||||
sass@^1.32.2:
|
sass@^1.32.2:
|
||||||
version "1.32.7"
|
version "1.32.7"
|
||||||
@@ -5989,6 +5992,15 @@ schema-utils@^2.6.5, schema-utils@^2.6.6:
|
|||||||
ajv "^6.12.4"
|
ajv "^6.12.4"
|
||||||
ajv-keywords "^3.5.2"
|
ajv-keywords "^3.5.2"
|
||||||
|
|
||||||
|
schema-utils@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
|
||||||
|
integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
|
||||||
|
dependencies:
|
||||||
|
"@types/json-schema" "^7.0.6"
|
||||||
|
ajv "^6.12.5"
|
||||||
|
ajv-keywords "^3.5.2"
|
||||||
|
|
||||||
select-hose@^2.0.0:
|
select-hose@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
||||||
|
2
public/v2/js/transactions/create.js
vendored
2
public/v2/js/transactions/create.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
public/v2/js/vendor.js
vendored
2
public/v2/js/vendor.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -678,7 +678,7 @@ return [
|
|||||||
'pref_optional_fields_transaction' => 'Optional fields for transactions',
|
'pref_optional_fields_transaction' => 'Optional fields for transactions',
|
||||||
'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.',
|
'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.',
|
||||||
'optional_tj_date_fields' => 'Date fields',
|
'optional_tj_date_fields' => 'Date fields',
|
||||||
'optional_tj_business_fields' => 'Business fields',
|
'optional_tj_other_fields' => 'Other fields',
|
||||||
'optional_tj_attachment_fields' => 'Attachment fields',
|
'optional_tj_attachment_fields' => 'Attachment fields',
|
||||||
'pref_optional_tj_interest_date' => 'Interest date',
|
'pref_optional_tj_interest_date' => 'Interest date',
|
||||||
'pref_optional_tj_book_date' => 'Book date',
|
'pref_optional_tj_book_date' => 'Book date',
|
||||||
@@ -689,12 +689,14 @@ return [
|
|||||||
'pref_optional_tj_internal_reference' => 'Internal reference',
|
'pref_optional_tj_internal_reference' => 'Internal reference',
|
||||||
'pref_optional_tj_notes' => 'Notes',
|
'pref_optional_tj_notes' => 'Notes',
|
||||||
'pref_optional_tj_attachments' => 'Attachments',
|
'pref_optional_tj_attachments' => 'Attachments',
|
||||||
'pref_optional_tj_external_uri' => 'External URI',
|
'pref_optional_tj_external_uri' => 'External URL',
|
||||||
|
'pref_optional_tj_location' => 'Location',
|
||||||
|
'pref_optional_tj_links' => 'Transaction links',
|
||||||
'optional_field_meta_dates' => 'Dates',
|
'optional_field_meta_dates' => 'Dates',
|
||||||
'optional_field_meta_business' => 'Business',
|
'optional_field_meta_business' => 'Business',
|
||||||
'optional_field_attachments' => 'Attachments',
|
'optional_field_attachments' => 'Attachments',
|
||||||
'optional_field_meta_data' => 'Optional meta data',
|
'optional_field_meta_data' => 'Optional meta data',
|
||||||
'external_uri' => 'External URI',
|
'external_uri' => 'External URL',
|
||||||
|
|
||||||
// profile:
|
// profile:
|
||||||
'delete_stuff_header' => 'Delete data',
|
'delete_stuff_header' => 'Delete data',
|
||||||
|
@@ -107,10 +107,12 @@
|
|||||||
{{ ExpandedForm.checkbox('tj[payment_date]','1', tjOptionalFields.payment_date,{ 'label' : 'pref_optional_tj_payment_date'|_ }) }}
|
{{ ExpandedForm.checkbox('tj[payment_date]','1', tjOptionalFields.payment_date,{ 'label' : 'pref_optional_tj_payment_date'|_ }) }}
|
||||||
{{ ExpandedForm.checkbox('tj[invoice_date]','1', tjOptionalFields.invoice_date,{ 'label' : 'pref_optional_tj_invoice_date'|_ }) }}
|
{{ ExpandedForm.checkbox('tj[invoice_date]','1', tjOptionalFields.invoice_date,{ 'label' : 'pref_optional_tj_invoice_date'|_ }) }}
|
||||||
|
|
||||||
<h4>{{ 'optional_tj_business_fields'|_ }}</h4>
|
<h4>{{ 'optional_tj_other_fields'|_ }}</h4>
|
||||||
{{ ExpandedForm.checkbox('tj[internal_reference]','1', tjOptionalFields.internal_reference,{ 'label' : 'pref_optional_tj_internal_reference'|_ }) }}
|
{{ ExpandedForm.checkbox('tj[internal_reference]','1', tjOptionalFields.internal_reference,{ 'label' : 'pref_optional_tj_internal_reference'|_ }) }}
|
||||||
{{ ExpandedForm.checkbox('tj[external_uri]','1', tjOptionalFields.external_uri,{ 'label' : 'pref_optional_tj_external_uri'|_ }) }}
|
{{ ExpandedForm.checkbox('tj[external_uri]','1', tjOptionalFields.external_uri,{ 'label' : 'pref_optional_tj_external_uri'|_ }) }}
|
||||||
{{ ExpandedForm.checkbox('tj[notes]','1', tjOptionalFields.notes,{ 'label' : 'pref_optional_tj_notes'|_ }) }}
|
{{ ExpandedForm.checkbox('tj[notes]','1', tjOptionalFields.notes,{ 'label' : 'pref_optional_tj_notes'|_ }) }}
|
||||||
|
{{ ExpandedForm.checkbox('tj[location]','1', tjOptionalFields.location,{ 'label' : 'pref_optional_tj_location'|_ }) }}
|
||||||
|
{{ ExpandedForm.checkbox('tj[links]','1', tjOptionalFields.links,{ 'label' : 'pref_optional_tj_links'|_ }) }}
|
||||||
|
|
||||||
<h4>{{ 'optional_tj_attachment_fields'|_ }}</h4>
|
<h4>{{ 'optional_tj_attachment_fields'|_ }}</h4>
|
||||||
{{ ExpandedForm.checkbox('tj[attachments]','1', tjOptionalFields.attachments,{ 'label' : 'pref_optional_tj_attachments'|_ }) }}
|
{{ ExpandedForm.checkbox('tj[attachments]','1', tjOptionalFields.attachments,{ 'label' : 'pref_optional_tj_attachments'|_ }) }}
|
||||||
|
Reference in New Issue
Block a user