mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-29 18:20:01 +00:00
Update boxes.
This commit is contained in:
64
app/Api/V2/Controllers/NetWorthController.php
Normal file
64
app/Api/V2/Controllers/NetWorthController.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/*
|
||||
* NetWorthController.php
|
||||
* Copyright (c) 2022 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/>.
|
||||
*/
|
||||
|
||||
namespace FireflyIII\Api\V2\Controllers;
|
||||
|
||||
use FireflyIII\Api\V2\Request\Generic\SingleDateRequest;
|
||||
use FireflyIII\Helpers\Report\NetWorthInterface;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Support\Http\Api\ConvertsExchangeRates;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
/**
|
||||
* Class NetWorthController
|
||||
*/
|
||||
class NetWorthController extends Controller
|
||||
{
|
||||
use ConvertsExchangeRates;
|
||||
|
||||
private NetWorthInterface $netWorth;
|
||||
private AccountRepositoryInterface $repository;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
$this->repository = app(AccountRepositoryInterface::class);
|
||||
$this->netWorth = app(NetWorthInterface::class);
|
||||
$this->netWorth->setUser(auth()->user());
|
||||
return $next($request);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public function get(SingleDateRequest $request): JsonResponse
|
||||
{
|
||||
$date = $request->getDate();
|
||||
$result = $this->netWorth->sumNetWorthByCurrency($date);
|
||||
$converted = $this->cerSum($result);
|
||||
|
||||
return response()->json($converted);
|
||||
}
|
||||
|
||||
}
|
@@ -24,7 +24,9 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Helpers\Report;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||
use FireflyIII\Support\CacheProperties;
|
||||
@@ -38,9 +40,7 @@ use JsonException;
|
||||
*/
|
||||
class NetWorth implements NetWorthInterface
|
||||
{
|
||||
|
||||
/** @var AccountRepositoryInterface */
|
||||
private $accountRepository;
|
||||
private AccountRepositoryInterface $accountRepository;
|
||||
|
||||
/** @var CurrencyRepositoryInterface */
|
||||
private $currencyRepos;
|
||||
@@ -63,11 +63,10 @@ class NetWorth implements NetWorthInterface
|
||||
*
|
||||
* @return array
|
||||
* @throws JsonException
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function getNetWorthByCurrency(Collection $accounts, Carbon $date): array
|
||||
{
|
||||
|
||||
// start in the past, end in the future? use $date
|
||||
$cache = new CacheProperties;
|
||||
$cache->addProperty($date);
|
||||
@@ -144,4 +143,55 @@ class NetWorth implements NetWorthInterface
|
||||
$this->currencyRepos = app(CurrencyRepositoryInterface::class);
|
||||
$this->currencyRepos->setUser($this->user);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function sumNetWorthByCurrency(Carbon $date): array
|
||||
{
|
||||
/**
|
||||
* Collect accounts
|
||||
*/
|
||||
$accounts = $this->getAccounts();
|
||||
$return = [];
|
||||
$balances = app('steam')->balancesByAccounts($accounts, $date);
|
||||
foreach ($accounts as $account) {
|
||||
$currency = $this->accountRepository->getAccountCurrency($account);
|
||||
$balance = $balances[$account->id] ?? '0';
|
||||
|
||||
// always subtract virtual balance.
|
||||
$virtualBalance = (string) $account->virtual_balance;
|
||||
if ('' !== $virtualBalance) {
|
||||
$balance = bcsub($balance, $virtualBalance);
|
||||
}
|
||||
|
||||
$return[$currency->id] = $return[$currency->id] ?? [
|
||||
'id' => (string) $currency->id,
|
||||
'name' => $currency->name,
|
||||
'symbol' => $currency->symbol,
|
||||
'code' => $currency->code,
|
||||
'decimal_places' => $currency->decimal_places,
|
||||
'sum' => '0',
|
||||
];
|
||||
$return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], $balance);
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
private function getAccounts(): Collection
|
||||
{
|
||||
$accounts = $this->accountRepository->getAccountsByType([AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE, AccountType::DEFAULT, AccountType::CREDITCARD]);
|
||||
$filtered = new Collection;
|
||||
/** @var Account $account */
|
||||
foreach ($accounts as $account) {
|
||||
if (1 === (int) $this->accountRepository->getMetaValue($account, 'include_net_worth')) {
|
||||
$filtered->push($account);
|
||||
}
|
||||
}
|
||||
return $filtered;
|
||||
}
|
||||
}
|
||||
|
@@ -46,8 +46,8 @@ interface NetWorthInterface
|
||||
*
|
||||
* @param Collection $accounts
|
||||
* @param Carbon $date
|
||||
*
|
||||
* @return array
|
||||
* @deprecated
|
||||
*/
|
||||
public function getNetWorthByCurrency(Collection $accounts, Carbon $date): array;
|
||||
|
||||
@@ -56,4 +56,15 @@ interface NetWorthInterface
|
||||
*/
|
||||
public function setUser(User $user): void;
|
||||
|
||||
/**
|
||||
* TODO move to repository
|
||||
*
|
||||
* Same as above but cleaner function with less dependencies.
|
||||
*
|
||||
* @param Carbon $date
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function sumNetWorthByCurrency(Carbon $date): array;
|
||||
|
||||
}
|
||||
|
29
frontend/src/api/v2/net-worth/index.js
vendored
Normal file
29
frontend/src/api/v2/net-worth/index.js
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* basic.js
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
import {api} from "boot/axios";
|
||||
import {format} from "date-fns";
|
||||
|
||||
export default class NetWorth {
|
||||
get(date) {
|
||||
let dateStr = format(date, 'y-MM-dd');
|
||||
return api.get('/api/v2/net-worth', {params: {date: dateStr}});
|
||||
}
|
||||
}
|
@@ -36,25 +36,28 @@
|
||||
:value="percentage"
|
||||
size="50px"
|
||||
:thickness="0.22"
|
||||
color="green"
|
||||
track-color="grey-3"
|
||||
color="positive"
|
||||
track-color="negative"
|
||||
/>
|
||||
</q-card-section>
|
||||
<q-separator vertical/>
|
||||
<q-card-section v-if="0 === unpaid.length && 0 === paid.length">
|
||||
You have no bills
|
||||
{{ $t('firefly.no_bill') }}
|
||||
</q-card-section>
|
||||
<q-card-section v-if="unpaid.length > 0 || paid.length > 0">
|
||||
<span :title="formatAmount(this.currency, this.unpaidAmount)">{{ $t('firefly.bills_to_pay') }}</span>:
|
||||
<span v-for="(bill, index) in unpaid">
|
||||
<span v-if="bill.native">(</span>{{ formatAmount(bill.code, bill.sum) }}<span
|
||||
v-if="bill.native">)</span><span v-if="index+1 !== unpaid.length">, </span></span>
|
||||
<!-- loop bills to pay -->
|
||||
<span v-for="(item, index) in unpaid">
|
||||
<span :title="formatAmount(item.native_code, item.native_sum)">
|
||||
{{ formatAmount(item.code, item.sum) }}<span v-if="index+1 !== unpaid.length"> + </span></span>
|
||||
</span>
|
||||
<br/>
|
||||
<span :title="formatAmount(this.currency, this.paidAmount)">{{ $t('firefly.bills_paid') }}</span>:
|
||||
<span v-for="(bill, index) in paid"><span v-if="bill.native">(</span>{{
|
||||
formatAmount(bill.code, bill.sum)
|
||||
}}<span v-if="bill.native">)</span><span
|
||||
v-if="index+1 !== paid.length">, </span></span>
|
||||
<span v-if="paid.length > 0" :title="formatAmount(this.currency, this.paidAmount)">{{ $t('firefly.bills_paid') }}:</span>
|
||||
<span v-for="(item, index) in paid">
|
||||
<span :title="formatAmount(item.native_code, item.native_sum)">
|
||||
{{formatAmount(item.code, item.sum) }}
|
||||
</span>
|
||||
<span v-if="index+1 !== paid.length"> + </span></span>
|
||||
</q-card-section>
|
||||
</q-card-section>
|
||||
</q-card>
|
||||
@@ -74,10 +77,6 @@ export default {
|
||||
currency: 'EUR',
|
||||
unpaidAmount: 0.0,
|
||||
paidAmount: 0.0,
|
||||
range: {
|
||||
start: null,
|
||||
end: null,
|
||||
},
|
||||
}
|
||||
},
|
||||
name: "BillInsightBox",
|
||||
@@ -99,19 +98,16 @@ export default {
|
||||
mounted() {
|
||||
this.store = useFireflyIIIStore();
|
||||
// TODO this code snippet is recycled a lot.
|
||||
if (null === this.range.start || null === this.range.end) {
|
||||
// subscribe, then update:
|
||||
this.store.$onAction(
|
||||
({name, $store, args, after, onError,}) => {
|
||||
after((result) => {
|
||||
if (name === 'setRange') {
|
||||
this.range = result;
|
||||
this.triggerUpdate();
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
// subscribe, then update:
|
||||
this.store.$onAction(
|
||||
({name, $store, args, after, onError,}) => {
|
||||
after((result) => {
|
||||
if (name === 'setRange') {
|
||||
this.triggerUpdate();
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
this.triggerUpdate();
|
||||
},
|
||||
methods: {
|
||||
@@ -139,6 +135,8 @@ export default {
|
||||
{
|
||||
sum: current.sum,
|
||||
code: current.code,
|
||||
native_sum: current.native_sum,
|
||||
native_code: current.native_code,
|
||||
native: hasNative,
|
||||
}
|
||||
);
|
||||
@@ -157,6 +155,8 @@ export default {
|
||||
{
|
||||
sum: current.sum,
|
||||
code: current.code,
|
||||
native_sum: current.native_sum,
|
||||
native_code: current.native_code,
|
||||
native: hasNative,
|
||||
}
|
||||
);
|
||||
|
125
frontend/src/components/dashboard/NetWorthInsightBox.vue
Normal file
125
frontend/src/components/dashboard/NetWorthInsightBox.vue
Normal file
@@ -0,0 +1,125 @@
|
||||
<!--
|
||||
- NetWorthInsightBox.vue
|
||||
- Copyright (c) 2022 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>
|
||||
<!-- TODO most left? q-mr-sm -->
|
||||
<!-- TODO middle? dan q-mx-sm -->
|
||||
<!-- TODO right? dan q-ml-sm -->
|
||||
<div class="q-ml-sm">
|
||||
<q-card bordered>
|
||||
<q-item>
|
||||
<q-item-section>
|
||||
<q-item-label><strong>{{ $t('firefly.net_worth') }}</strong></q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-separator/>
|
||||
<q-card-section horizontal>
|
||||
<q-card-section>
|
||||
<q-icon name="fas fa-chart-line" size="50px" :color="primary > 0 ? 'positive' : 'negative'"/>
|
||||
</q-card-section>
|
||||
<q-separator vertical/>
|
||||
<q-card-section>
|
||||
<strong>{{ formatAmount(currency, primary) }}</strong><br/>
|
||||
<small>
|
||||
<span v-for="(item, index) in netWorth">
|
||||
<span :title="formatAmount(item.native_code, item.native_sum)">{{ formatAmount(item.code, item.sum) }}</span>
|
||||
<span v-if="index+1 !== netWorth.length"> + </span></span>
|
||||
</small>
|
||||
</q-card-section>
|
||||
</q-card-section>
|
||||
</q-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {useFireflyIIIStore} from "../../stores/fireflyiii";
|
||||
import NetWorth from "../../api/v2/net-worth";
|
||||
|
||||
export default {
|
||||
name: "NetWorthInsightBox",
|
||||
data() {
|
||||
return {
|
||||
netWorth: [],
|
||||
primary: 0,
|
||||
currency: 'EUR',
|
||||
store: null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.store = useFireflyIIIStore();
|
||||
// TODO this code snippet is recycled a lot.
|
||||
// subscribe, then update:
|
||||
this.store.$onAction(
|
||||
({name, $store, args, after, onError,}) => {
|
||||
after((result) => {
|
||||
if (name === 'setRange') {
|
||||
this.triggerUpdate();
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
this.triggerUpdate();
|
||||
},
|
||||
methods: {
|
||||
triggerUpdate: function () {
|
||||
if (null !== this.store.getRange.start && null !== this.store.getRange.end) {
|
||||
this.unpaid = [];
|
||||
const start = new Date(this.store.getRange.start);
|
||||
const end = new Date(this.store.getRange.end);
|
||||
const now = new Date;
|
||||
let date = end;
|
||||
if (now >= start && now <= end) {
|
||||
date = now;
|
||||
}
|
||||
this.currency = this.store.getCurrencyCode;
|
||||
(new NetWorth).get(date).then((response) => this.parseResponse(response.data));
|
||||
}
|
||||
},
|
||||
parseResponse(data) {
|
||||
for (let i in data) {
|
||||
if (data.hasOwnProperty(i)) {
|
||||
const current = data[i];
|
||||
const hasNative = current.native_id !== current.id && current.native_sum !== '0';
|
||||
if (hasNative || current.native_id === current.id) {
|
||||
this.primary = this.primary + parseFloat(current.native_sum);
|
||||
}
|
||||
this.netWorth.push(
|
||||
{
|
||||
sum: current.sum,
|
||||
code: current.code,
|
||||
native_sum: current.native_sum,
|
||||
native_code: current.native_code,
|
||||
native: hasNative,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
// TODO this method is recycled a lot.
|
||||
formatAmount: function (currencyCode, amount) {
|
||||
return Intl.NumberFormat(this.store?.getLocale ?? 'en-US', {style: 'currency', currency: currencyCode}).format(amount);
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@@ -26,7 +26,7 @@
|
||||
<q-card bordered>
|
||||
<q-item>
|
||||
<q-item-section>
|
||||
<q-item-label><strong>To spend and left</strong></q-item-label>
|
||||
<q-item-label><strong>{{ $t('firefly.left_to_spend') }}</strong></q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-separator/>
|
||||
@@ -36,22 +36,27 @@
|
||||
:value="percentage"
|
||||
size="50px"
|
||||
:thickness="0.22"
|
||||
color="green"
|
||||
track-color="grey-3"
|
||||
color="negative"
|
||||
track-color="positive"
|
||||
/>
|
||||
</q-card-section>
|
||||
<q-separator vertical/>
|
||||
<q-card-section v-if="0 === budgeted.length && 0 === spent.length">
|
||||
You have no budgets set
|
||||
{{ $t('firefly.no_budget') }}
|
||||
</q-card-section>
|
||||
<q-card-section v-if="budgeted.length > 0 || spent.length > 0">
|
||||
<span :title="formatAmount(this.currency, this.budgetedAmount)">Budgeted</span>:
|
||||
<span v-for="(budget, index) in budgeted"><span v-if="budget.native">(</span>{{ formatAmount(budget.code, budget.sum) }}<span v-if="budget.native">)</span><span
|
||||
v-if="index+1 !== budgeted.length">, </span></span>
|
||||
<br>
|
||||
<span :title="formatAmount(this.currency, this.spentAmount)">Spent</span>:
|
||||
<span v-for="(budget, index) in spent"><span v-if="budget.native">(</span>{{ formatAmount(budget.code, budget.sum) }}<span v-if="budget.native">)</span><span
|
||||
v-if="index+1 !== budgeted.length">, </span></span>
|
||||
<span :title="formatAmount(this.currency, this.budgetedAmount)">{{ $t('firefly.budgeted') }}</span>:
|
||||
<!-- list budgeted -->
|
||||
<span v-for="(item, index) in budgeted">
|
||||
<span :title="formatAmount(item.native_code, item.native_sum)">{{ formatAmount(item.code, item.sum) }}</span>
|
||||
<span v-if="index+1 !== budgeted.length"> + </span>
|
||||
</span>
|
||||
<br />
|
||||
<span v-if="spent.length > 0" :title="formatAmount(this.currency, this.spentAmount)">{{ $t('firefly.spent') }}: </span>
|
||||
<!-- list spent -->
|
||||
<span v-for="(item, index) in spent">
|
||||
<span :title="formatAmount(item.native_code, item.native_sum)">{{ formatAmount(item.code, item.sum) }}</span>
|
||||
<span v-if="index+1 !== spent.length"> + </span></span>
|
||||
</q-card-section>
|
||||
</q-card-section>
|
||||
</q-card>
|
||||
@@ -72,10 +77,6 @@ export default {
|
||||
//percentage: 0,
|
||||
budgetedAmount: 0.0,
|
||||
spentAmount: 0.0,
|
||||
range: {
|
||||
start: null,
|
||||
end: null,
|
||||
},
|
||||
}
|
||||
},
|
||||
name: "SpendInsightBox",
|
||||
@@ -98,19 +99,16 @@ export default {
|
||||
this.store = useFireflyIIIStore();
|
||||
|
||||
// TODO this code snippet is recycled a lot.
|
||||
if (null === this.range.start || null === this.range.end) {
|
||||
// subscribe, then update:
|
||||
this.store.$onAction(
|
||||
({name, $store, args, after, onError,}) => {
|
||||
after((result) => {
|
||||
if (name === 'setRange') {
|
||||
this.range = result;
|
||||
this.triggerUpdate();
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
// subscribe, then update:
|
||||
this.store.$onAction(
|
||||
({name, $store, args, after, onError,}) => {
|
||||
after((result) => {
|
||||
if (name === 'setRange') {
|
||||
this.triggerUpdate();
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
this.triggerUpdate();
|
||||
},
|
||||
methods: {
|
||||
@@ -138,6 +136,8 @@ export default {
|
||||
{
|
||||
sum: current.sum,
|
||||
code: current.code,
|
||||
native_sum: current.native_sum,
|
||||
native_code: current.native_code,
|
||||
native: hasNative
|
||||
}
|
||||
);
|
||||
@@ -156,6 +156,8 @@ export default {
|
||||
{
|
||||
sum: current.sum,
|
||||
code: current.code,
|
||||
native_sum: current.native_sum,
|
||||
native_code: current.native_code,
|
||||
native: hasNative
|
||||
}
|
||||
);
|
||||
|
6
frontend/src/i18n/bg_BG/index.js
vendored
6
frontend/src/i18n/bg_BG/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "\u041d\u043e\u0432 \u0434\u0435\u043f\u043e\u0437\u0438\u0442",
|
||||
"newWithdrawal": "\u041d\u043e\u0432 \u0440\u0430\u0437\u0445\u043e\u0434",
|
||||
"bills_paid": "\u041f\u043b\u0430\u0442\u0435\u043d\u0438 \u0441\u043c\u0435\u0442\u043a\u0438",
|
||||
"left_to_spend": "\u041e\u0441\u0442\u0430\u043d\u0430\u043b\u0438 \u0437\u0430 \u0445\u0430\u0440\u0447\u0435\u043d\u0435",
|
||||
"no_budget": "(\u0431\u0435\u0437 \u0431\u044e\u0434\u0436\u0435\u0442)",
|
||||
"budgeted": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438\u0440\u0430\u043d\u0438",
|
||||
"spent": "\u041f\u043e\u0445\u0430\u0440\u0447\u0435\u043d\u0438",
|
||||
"no_bill": "(\u043d\u044f\u043c\u0430 \u0441\u043c\u0435\u0442\u043a\u0430)",
|
||||
"rule_trigger_source_account_starts_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..",
|
||||
"rule_trigger_source_account_ends_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..",
|
||||
"rule_trigger_source_account_is_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438",
|
||||
"welcome_back": "\u041a\u0430\u043a\u0432\u043e \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430?",
|
||||
"bills_to_pay": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u043f\u043b\u0430\u0449\u0430\u043d\u0435",
|
||||
"left_to_spend": "\u041e\u0441\u0442\u0430\u043d\u0430\u043b\u0438 \u0437\u0430 \u0445\u0430\u0440\u0447\u0435\u043d\u0435",
|
||||
"net_worth": "\u041d\u0435\u0442\u043d\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/cs_CZ/index.js
vendored
6
frontend/src/i18n/cs_CZ/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Nov\u00fd vklad",
|
||||
"newWithdrawal": "Nov\u00fd v\u00fddaj",
|
||||
"bills_paid": "Zaplacen\u00e9 \u00fa\u010dty",
|
||||
"left_to_spend": "Zb\u00fdv\u00e1 k utracen\u00ed",
|
||||
"no_budget": "(\u017e\u00e1dn\u00fd rozpo\u010det)",
|
||||
"budgeted": "Rozpo\u010det",
|
||||
"spent": "Utraceno",
|
||||
"no_bill": "(no bill)",
|
||||
"rule_trigger_source_account_starts_choice": "Source account name starts with..",
|
||||
"rule_trigger_source_account_ends_choice": "Source account name ends with..",
|
||||
"rule_trigger_source_account_is_choice": "Source account name is..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "Jak to jde?",
|
||||
"bills_to_pay": "Faktury k zaplacen\u00ed",
|
||||
"left_to_spend": "Zb\u00fdv\u00e1 k utracen\u00ed",
|
||||
"net_worth": "\u010cist\u00e9 jm\u011bn\u00ed",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/de_DE/index.js
vendored
6
frontend/src/i18n/de_DE/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Neue Einnahme",
|
||||
"newWithdrawal": "Neue Ausgabe",
|
||||
"bills_paid": "Rechnungen bezahlt",
|
||||
"left_to_spend": "Verbleibend zum Ausgeben",
|
||||
"no_budget": "(kein Budget)",
|
||||
"budgeted": "Vorgesehen",
|
||||
"spent": "Ausgegeben",
|
||||
"no_bill": "(keine Belege)",
|
||||
"rule_trigger_source_account_starts_choice": "Name des Quellkontos beginnt mit..",
|
||||
"rule_trigger_source_account_ends_choice": "Quellkonto-Name endet mit..",
|
||||
"rule_trigger_source_account_is_choice": "Quellkonto-Name lautet..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Abonnements",
|
||||
"welcome_back": "\u00dcberblick",
|
||||
"bills_to_pay": "Unbezahlte Rechnungen",
|
||||
"left_to_spend": "Verbleibend zum Ausgeben",
|
||||
"net_worth": "Eigenkapital",
|
||||
"pref_last365": "Letztes Jahr",
|
||||
"pref_last90": "Letzte 90 Tage",
|
||||
|
6
frontend/src/i18n/el_GR/index.js
vendored
6
frontend/src/i18n/el_GR/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "\u039d\u03ad\u03b1 \u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7",
|
||||
"newWithdrawal": "\u039d\u03ad\u03b1 \u03b4\u03b1\u03c0\u03ac\u03bd\u03b7",
|
||||
"bills_paid": "\u03a0\u03bb\u03b7\u03c1\u03c9\u03bc\u03ad\u03bd\u03b1 \u03c0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1",
|
||||
"left_to_spend": "\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b1 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ce\u03bd",
|
||||
"no_budget": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc)",
|
||||
"budgeted": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf",
|
||||
"spent": "\u0394\u03b1\u03c0\u03b1\u03bd\u03ae\u03b8\u03b7\u03ba\u03b1\u03bd",
|
||||
"no_bill": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf)",
|
||||
"rule_trigger_source_account_starts_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..",
|
||||
"rule_trigger_source_account_ends_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..",
|
||||
"rule_trigger_source_account_is_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "\u03a3\u03c5\u03bd\u03b4\u03c1\u03bf\u03bc\u03ad\u03c2",
|
||||
"welcome_back": "\u03a4\u03b9 \u03c0\u03b1\u03af\u03b6\u03b5\u03b9;",
|
||||
"bills_to_pay": "\u03a0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1 \u03c0\u03c1\u03bf\u03c2 \u03c0\u03bb\u03b7\u03c1\u03c9\u03bc\u03ae",
|
||||
"left_to_spend": "\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b1 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ce\u03bd",
|
||||
"net_worth": "\u039a\u03b1\u03b8\u03b1\u03c1\u03ae \u03b1\u03be\u03af\u03b1",
|
||||
"pref_last365": "\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ad\u03c4\u03bf\u03c2",
|
||||
"pref_last90": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 90 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2",
|
||||
|
6
frontend/src/i18n/en_GB/index.js
vendored
6
frontend/src/i18n/en_GB/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "New deposit",
|
||||
"newWithdrawal": "New expense",
|
||||
"bills_paid": "Bills paid",
|
||||
"left_to_spend": "Left to spend",
|
||||
"no_budget": "(no budget)",
|
||||
"budgeted": "Budgeted",
|
||||
"spent": "Spent",
|
||||
"no_bill": "(no bill)",
|
||||
"rule_trigger_source_account_starts_choice": "Source account name starts with..",
|
||||
"rule_trigger_source_account_ends_choice": "Source account name ends with..",
|
||||
"rule_trigger_source_account_is_choice": "Source account name is..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "What's playing?",
|
||||
"bills_to_pay": "Bills to pay",
|
||||
"left_to_spend": "Left to spend",
|
||||
"net_worth": "Net worth",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/en_US/index.js
vendored
6
frontend/src/i18n/en_US/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "New deposit",
|
||||
"newWithdrawal": "New expense",
|
||||
"bills_paid": "Bills paid",
|
||||
"left_to_spend": "Left to spend",
|
||||
"no_budget": "(no budget)",
|
||||
"budgeted": "Budgeted",
|
||||
"spent": "Spent",
|
||||
"no_bill": "(no bill)",
|
||||
"rule_trigger_source_account_starts_choice": "Source account name starts with..",
|
||||
"rule_trigger_source_account_ends_choice": "Source account name ends with..",
|
||||
"rule_trigger_source_account_is_choice": "Source account name is..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "What's playing?",
|
||||
"bills_to_pay": "Bills to pay",
|
||||
"left_to_spend": "Left to spend",
|
||||
"net_worth": "Net worth",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/es_ES/index.js
vendored
6
frontend/src/i18n/es_ES/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Nuevo deposito",
|
||||
"newWithdrawal": "Nuevo gasto",
|
||||
"bills_paid": "Facturas pagadas",
|
||||
"left_to_spend": "Disponible para gastar",
|
||||
"no_budget": "(sin presupuesto)",
|
||||
"budgeted": "Presupuestado",
|
||||
"spent": "Gastado",
|
||||
"no_bill": "(sin factura)",
|
||||
"rule_trigger_source_account_starts_choice": "El nombre de la cuenta de origen comienza con..",
|
||||
"rule_trigger_source_account_ends_choice": "El nombre de la cuenta de origen termina con..",
|
||||
"rule_trigger_source_account_is_choice": "El nombre de la cuenta origen es..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Suscripciones",
|
||||
"welcome_back": "\u00bfQu\u00e9 est\u00e1 pasando?",
|
||||
"bills_to_pay": "Facturas por pagar",
|
||||
"left_to_spend": "Disponible para gastar",
|
||||
"net_worth": "Valor Neto",
|
||||
"pref_last365": "A\u00f1o pasado",
|
||||
"pref_last90": "\u00daltimos 90 d\u00edas",
|
||||
|
6
frontend/src/i18n/fi_FI/index.js
vendored
6
frontend/src/i18n/fi_FI/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Uusi talletus",
|
||||
"newWithdrawal": "Uusi kustannus",
|
||||
"bills_paid": "Maksetut laskut",
|
||||
"left_to_spend": "K\u00e4ytett\u00e4viss\u00e4",
|
||||
"no_budget": "(ei budjettia)",
|
||||
"budgeted": "Budjetoitu",
|
||||
"spent": "K\u00e4ytetty",
|
||||
"no_bill": "(ei laskua)",
|
||||
"rule_trigger_source_account_starts_choice": "L\u00e4hdetilin nimi alkaa ...",
|
||||
"rule_trigger_source_account_ends_choice": "L\u00e4hdetilin nimi p\u00e4\u00e4ttyy..",
|
||||
"rule_trigger_source_account_is_choice": "L\u00e4hdetilin nimi on..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Tilaukset",
|
||||
"welcome_back": "Mit\u00e4 kuuluu?",
|
||||
"bills_to_pay": "Laskuja maksettavana",
|
||||
"left_to_spend": "K\u00e4ytett\u00e4viss\u00e4",
|
||||
"net_worth": "Varallisuus",
|
||||
"pref_last365": "Edellinen vuosi",
|
||||
"pref_last90": "Viimeiset 90 p\u00e4iv\u00e4\u00e4",
|
||||
|
6
frontend/src/i18n/fr_FR/index.js
vendored
6
frontend/src/i18n/fr_FR/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Nouveau d\u00e9p\u00f4t",
|
||||
"newWithdrawal": "Nouvelle d\u00e9pense",
|
||||
"bills_paid": "Factures pay\u00e9es",
|
||||
"left_to_spend": "Reste \u00e0 d\u00e9penser",
|
||||
"no_budget": "(pas de budget)",
|
||||
"budgeted": "Budg\u00e9tis\u00e9",
|
||||
"spent": "D\u00e9pens\u00e9",
|
||||
"no_bill": "(aucune facture)",
|
||||
"rule_trigger_source_account_starts_choice": "Le nom du compte source commence par..",
|
||||
"rule_trigger_source_account_ends_choice": "Le nom du compte source se termine par..",
|
||||
"rule_trigger_source_account_is_choice": "Le nom du compte source est..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Abonnements",
|
||||
"welcome_back": "Quoi de neuf ?",
|
||||
"bills_to_pay": "Factures \u00e0 payer",
|
||||
"left_to_spend": "Reste \u00e0 d\u00e9penser",
|
||||
"net_worth": "Avoir net",
|
||||
"pref_last365": "L'ann\u00e9e derni\u00e8re",
|
||||
"pref_last90": "Les 90 derniers jours",
|
||||
|
6
frontend/src/i18n/hu_HU/index.js
vendored
6
frontend/src/i18n/hu_HU/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "\u00daj bev\u00e9tel",
|
||||
"newWithdrawal": "\u00daj k\u00f6lts\u00e9g",
|
||||
"bills_paid": "Befizetett sz\u00e1ml\u00e1k",
|
||||
"left_to_spend": "Elk\u00f6lthet\u0151",
|
||||
"no_budget": "(nincs k\u00f6lts\u00e9gkeret)",
|
||||
"budgeted": "Betervezett",
|
||||
"spent": "Elk\u00f6lt\u00f6tt",
|
||||
"no_bill": "(no bill)",
|
||||
"rule_trigger_source_account_starts_choice": "Forr\u00e1ssz\u00e1mla nev\u00e9nek eleje..",
|
||||
"rule_trigger_source_account_ends_choice": "Forr\u00e1ssz\u00e1mla nev\u00e9nek v\u00e9ge..",
|
||||
"rule_trigger_source_account_is_choice": "A forr\u00e1ssz\u00e1mla neve..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "Mi a helyzet?",
|
||||
"bills_to_pay": "Fizetend\u0151 sz\u00e1ml\u00e1k",
|
||||
"left_to_spend": "Elk\u00f6lthet\u0151",
|
||||
"net_worth": "Nett\u00f3 \u00e9rt\u00e9k",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/it_IT/index.js
vendored
6
frontend/src/i18n/it_IT/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Nuova entrata",
|
||||
"newWithdrawal": "Nuova uscita",
|
||||
"bills_paid": "Bollette pagate",
|
||||
"left_to_spend": "Altro da spendere",
|
||||
"no_budget": "(nessun budget)",
|
||||
"budgeted": "Preventivato",
|
||||
"spent": "Speso",
|
||||
"no_bill": "(nessuna bolletta)",
|
||||
"rule_trigger_source_account_starts_choice": "Il nome del conto di origine inizia con..",
|
||||
"rule_trigger_source_account_ends_choice": "Il nome del conto di origine termina con..",
|
||||
"rule_trigger_source_account_is_choice": "Il nome del conto di origine \u00e8..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Abbonamenti",
|
||||
"welcome_back": "La tua situazione finanziaria",
|
||||
"bills_to_pay": "Bollette da pagare",
|
||||
"left_to_spend": "Altro da spendere",
|
||||
"net_worth": "Patrimonio",
|
||||
"pref_last365": "Anno scorso",
|
||||
"pref_last90": "Ultimi 90 giorni",
|
||||
|
6
frontend/src/i18n/ja_JP/index.js
vendored
6
frontend/src/i18n/ja_JP/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "\u65b0\u3057\u3044\u5165\u91d1",
|
||||
"newWithdrawal": "\u65b0\u3057\u3044\u652f\u51fa",
|
||||
"bills_paid": "\u652f\u6255\u3044\u6e08\u307f\u8acb\u6c42",
|
||||
"left_to_spend": "\u652f\u51fa\u3067\u304d\u308b\u6b8b\u308a",
|
||||
"no_budget": "(\u4e88\u7b97\u306a\u3057)",
|
||||
"budgeted": "\u8a08\u4e0a\u4e88\u7b97",
|
||||
"spent": "\u652f\u51fa",
|
||||
"no_bill": "(\u8acb\u6c42\u306a\u3057)",
|
||||
"rule_trigger_source_account_starts_choice": "\u51fa\u91d1\u5143\u53e3\u5ea7\u540d\u304c...\u3067\u59cb\u307e\u308b",
|
||||
"rule_trigger_source_account_ends_choice": "\u51fa\u91d1\u5143\u53e3\u5ea7\u540d\u304c\u2026\u3067\u7d42\u308f\u308b",
|
||||
"rule_trigger_source_account_is_choice": "\u51fa\u91d1\u5143\u53e3\u5ea7\u540d\u304c...",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "\u8b1b\u8aad",
|
||||
"welcome_back": "\u6982\u8981",
|
||||
"bills_to_pay": "\u8acb\u6c42\u66f8",
|
||||
"left_to_spend": "\u652f\u51fa\u3067\u304d\u308b\u6b8b\u308a",
|
||||
"net_worth": "\u7d14\u8cc7\u7523",
|
||||
"pref_last365": "\u6628\u5e74",
|
||||
"pref_last90": "\u904e\u53bb 90 \u65e5\u9593",
|
||||
|
6
frontend/src/i18n/nb_NO/index.js
vendored
6
frontend/src/i18n/nb_NO/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Nytt innskudd",
|
||||
"newWithdrawal": "Ny utgift",
|
||||
"bills_paid": "Regninger betalt",
|
||||
"left_to_spend": "Igjen \u00e5 bruke",
|
||||
"no_budget": "(ingen budsjett)",
|
||||
"budgeted": "Budsjettert",
|
||||
"spent": "Brukt",
|
||||
"no_bill": "(no bill)",
|
||||
"rule_trigger_source_account_starts_choice": "Source account name starts with..",
|
||||
"rule_trigger_source_account_ends_choice": "Source account name ends with..",
|
||||
"rule_trigger_source_account_is_choice": "Source account name is..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "What's playing?",
|
||||
"bills_to_pay": "Regninger \u00e5 betale",
|
||||
"left_to_spend": "Igjen \u00e5 bruke",
|
||||
"net_worth": "Formue",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/nl_NL/index.js
vendored
6
frontend/src/i18n/nl_NL/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Nieuwe inkomsten",
|
||||
"newWithdrawal": "Nieuwe uitgave",
|
||||
"bills_paid": "Betaalde contracten",
|
||||
"left_to_spend": "Over om uit te geven",
|
||||
"no_budget": "(geen budget)",
|
||||
"budgeted": "Gebudgetteerd",
|
||||
"spent": "Uitgegeven",
|
||||
"no_bill": "(geen contract)",
|
||||
"rule_trigger_source_account_starts_choice": "Bronrekeningnaam begint met..",
|
||||
"rule_trigger_source_account_ends_choice": "Bronrekeningnaam eindigt op..",
|
||||
"rule_trigger_source_account_is_choice": "Bronrekeningnaam is..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Abonnementen",
|
||||
"welcome_back": "Hoe staat het er voor?",
|
||||
"bills_to_pay": "Openstaande contracten",
|
||||
"left_to_spend": "Over om uit te geven",
|
||||
"net_worth": "Kapitaal",
|
||||
"pref_last365": "Afgelopen jaar",
|
||||
"pref_last90": "Afgelopen 90 dagen",
|
||||
|
6
frontend/src/i18n/pl_PL/index.js
vendored
6
frontend/src/i18n/pl_PL/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Nowa wp\u0142ata",
|
||||
"newWithdrawal": "Nowy wydatek",
|
||||
"bills_paid": "Zap\u0142acone rachunki",
|
||||
"left_to_spend": "Pozosta\u0142o do wydania",
|
||||
"no_budget": "(brak bud\u017cetu)",
|
||||
"budgeted": "Zabud\u017cetowano",
|
||||
"spent": "Wydano",
|
||||
"no_bill": "(brak rachunku)",
|
||||
"rule_trigger_source_account_starts_choice": "Konto \u017ar\u00f3d\u0142owe si\u0119 zaczyna od..",
|
||||
"rule_trigger_source_account_ends_choice": "Konto \u017ar\u00f3d\u0142owe ko\u0144czy si\u0119 na..",
|
||||
"rule_trigger_source_account_is_choice": "Kontem \u017ar\u00f3d\u0142owym jest..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subskrypcje",
|
||||
"welcome_back": "Co jest grane?",
|
||||
"bills_to_pay": "Rachunki do zap\u0142acenia",
|
||||
"left_to_spend": "Pozosta\u0142o do wydania",
|
||||
"net_worth": "Warto\u015b\u0107 netto",
|
||||
"pref_last365": "Ostatni rok",
|
||||
"pref_last90": "Ostatnie 90 dni",
|
||||
|
6
frontend/src/i18n/pt_BR/index.js
vendored
6
frontend/src/i18n/pt_BR/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Novo dep\u00f3sito",
|
||||
"newWithdrawal": "Nova despesa",
|
||||
"bills_paid": "Contas pagas",
|
||||
"left_to_spend": "Restante para gastar",
|
||||
"no_budget": "(sem or\u00e7amento)",
|
||||
"budgeted": "Or\u00e7ado",
|
||||
"spent": "Gasto",
|
||||
"no_bill": "(sem conta)",
|
||||
"rule_trigger_source_account_starts_choice": "Nome da conta de origem come\u00e7a com..",
|
||||
"rule_trigger_source_account_ends_choice": "O nome da conta de origem termina com..",
|
||||
"rule_trigger_source_account_is_choice": "Nome da conta de origem \u00e9..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Assinaturas",
|
||||
"welcome_back": "O que est\u00e1 acontecendo?",
|
||||
"bills_to_pay": "Contas a pagar",
|
||||
"left_to_spend": "Restante para gastar",
|
||||
"net_worth": "Valor L\u00edquido",
|
||||
"pref_last365": "Ano passado",
|
||||
"pref_last90": "\u00daltimos 90 dias",
|
||||
|
6
frontend/src/i18n/pt_PT/index.js
vendored
6
frontend/src/i18n/pt_PT/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Novo dep\u00f3sito",
|
||||
"newWithdrawal": "Nova despesa",
|
||||
"bills_paid": "Fatura pagas",
|
||||
"left_to_spend": "Restante para gastar",
|
||||
"no_budget": "(sem or\u00e7amento)",
|
||||
"budgeted": "Or\u00e7amentado",
|
||||
"spent": "Gasto",
|
||||
"no_bill": "(sem fatura)",
|
||||
"rule_trigger_source_account_starts_choice": "O nome da conta de origem come\u00e7a com..",
|
||||
"rule_trigger_source_account_ends_choice": "O nome da conta de origem acaba com..",
|
||||
"rule_trigger_source_account_is_choice": "O nome da conta de origem \u00e9..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscri\u00e7\u00f5es",
|
||||
"welcome_back": "Tudo bem?",
|
||||
"bills_to_pay": "Faturas a pagar",
|
||||
"left_to_spend": "Restante para gastar",
|
||||
"net_worth": "Patrim\u00f3nio liquido",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "\u00daltimos 90 dias",
|
||||
|
6
frontend/src/i18n/ro_RO/index.js
vendored
6
frontend/src/i18n/ro_RO/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Depozit nou",
|
||||
"newWithdrawal": "Cheltuieli noi",
|
||||
"bills_paid": "Facturile pl\u0103tite",
|
||||
"left_to_spend": "Ramas de cheltuit",
|
||||
"no_budget": "(nici un buget)",
|
||||
"budgeted": "Bugetat",
|
||||
"spent": "Cheltuit",
|
||||
"no_bill": "(f\u0103r\u0103 factur\u0103)",
|
||||
"rule_trigger_source_account_starts_choice": "Numele contului surs\u0103 \u00eencepe cu..",
|
||||
"rule_trigger_source_account_ends_choice": "Numele contului surs\u0103 se termin\u0103 cu..",
|
||||
"rule_trigger_source_account_is_choice": "Numele contului surs\u0103 este..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "Ce se red\u0103?",
|
||||
"bills_to_pay": "Facturile de plat\u0103",
|
||||
"left_to_spend": "Ramas de cheltuit",
|
||||
"net_worth": "Valoarea net\u0103",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/ru_RU/index.js
vendored
6
frontend/src/i18n/ru_RU/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u0445\u043e\u0434",
|
||||
"newWithdrawal": "\u041d\u043e\u0432\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434",
|
||||
"bills_paid": "\u041e\u043f\u043b\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0447\u0435\u0442\u0430",
|
||||
"left_to_spend": "\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c",
|
||||
"no_budget": "(\u0432\u043d\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u0430)",
|
||||
"budgeted": "\u0417\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0431\u044e\u0434\u0436\u0435\u0442\u0435",
|
||||
"spent": "\u0420\u0430\u0441\u0445\u043e\u0434",
|
||||
"no_bill": "(\u043d\u0435\u0442 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443)",
|
||||
"rule_trigger_source_account_starts_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..",
|
||||
"rule_trigger_source_account_ends_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..",
|
||||
"rule_trigger_source_account_is_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0438\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438?",
|
||||
"bills_to_pay": "\u0421\u0447\u0435\u0442\u0430 \u043a \u043e\u043f\u043b\u0430\u0442\u0435",
|
||||
"left_to_spend": "\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c",
|
||||
"net_worth": "\u041c\u043e\u0438 \u0441\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u044f",
|
||||
"pref_last365": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0433\u043e\u0434",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/sk_SK/index.js
vendored
6
frontend/src/i18n/sk_SK/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Nov\u00fd vklad",
|
||||
"newWithdrawal": "Nov\u00fd v\u00fddavok",
|
||||
"bills_paid": "Zaplaten\u00e9 \u00fa\u010dty",
|
||||
"left_to_spend": "Zost\u00e1va k \u00fatrate",
|
||||
"no_budget": "(\u017eiadny rozpo\u010det)",
|
||||
"budgeted": "Rozpo\u010dtovan\u00e9",
|
||||
"spent": "Utraten\u00e9",
|
||||
"no_bill": "(\u017eiadny \u00fa\u010det)",
|
||||
"rule_trigger_source_account_starts_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu za\u010d\u00edna..",
|
||||
"rule_trigger_source_account_ends_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu kon\u010d\u00ed..",
|
||||
"rule_trigger_source_account_is_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu je..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "Ako to ide?",
|
||||
"bills_to_pay": "\u00da\u010dty na \u00fahradu",
|
||||
"left_to_spend": "Zost\u00e1va k \u00fatrate",
|
||||
"net_worth": "\u010cist\u00e9 imanie",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
6
frontend/src/i18n/sv_SE/index.js
vendored
6
frontend/src/i18n/sv_SE/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Ny ins\u00e4ttning",
|
||||
"newWithdrawal": "Ny utgift",
|
||||
"bills_paid": "Notor betalda",
|
||||
"left_to_spend": "\u00c5terst\u00e5r att spendera",
|
||||
"no_budget": "(ingen budget)",
|
||||
"budgeted": "Budgeterat",
|
||||
"spent": "Spenderat",
|
||||
"no_bill": "(ingen r\u00e4kning)",
|
||||
"rule_trigger_source_account_starts_choice": "K\u00e4llkontonamn b\u00f6rjar med..",
|
||||
"rule_trigger_source_account_ends_choice": "K\u00e4llkontonamn slutar med..",
|
||||
"rule_trigger_source_account_is_choice": "K\u00e4llkontonamn \u00e4r..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Prenumerationer",
|
||||
"welcome_back": "Vad spelas?",
|
||||
"bills_to_pay": "Notor att betala",
|
||||
"left_to_spend": "\u00c5terst\u00e5r att spendera",
|
||||
"net_worth": "Nettof\u00f6rm\u00f6genhet",
|
||||
"pref_last365": "F\u00f6reg\u00e5ende \u00e5r",
|
||||
"pref_last90": "Senaste 90 dagarna",
|
||||
|
6
frontend/src/i18n/vi_VN/index.js
vendored
6
frontend/src/i18n/vi_VN/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "Ti\u1ec1n g\u1eedi m\u1edbi",
|
||||
"newWithdrawal": "Chi ph\u00ed m\u1edbi",
|
||||
"bills_paid": "H\u00f3a \u0111\u01a1n thanh to\u00e1n",
|
||||
"left_to_spend": "C\u00f2n l\u1ea1i \u0111\u1ec3 chi ti\u00eau",
|
||||
"no_budget": "(kh\u00f4ng c\u00f3 ng\u00e2n s\u00e1ch)",
|
||||
"budgeted": "Ng\u00e2n s\u00e1ch",
|
||||
"spent": "\u0110\u00e3 chi",
|
||||
"no_bill": "(no bill)",
|
||||
"rule_trigger_source_account_starts_choice": "Source account name starts with..",
|
||||
"rule_trigger_source_account_ends_choice": "Source account name ends with..",
|
||||
"rule_trigger_source_account_is_choice": "Source account name is..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "Ch\u00e0o m\u1eebng tr\u1edf l\u1ea1i?",
|
||||
"bills_to_pay": "H\u00f3a \u0111\u01a1n ph\u1ea3i tr\u1ea3",
|
||||
"left_to_spend": "C\u00f2n l\u1ea1i \u0111\u1ec3 chi ti\u00eau",
|
||||
"net_worth": "T\u00e0i s\u1ea3n th\u1ef1c",
|
||||
"pref_last365": "N\u0103m tr\u01b0\u1edbc",
|
||||
"pref_last90": "90 ng\u00e0y cu\u1ed1i",
|
||||
|
6
frontend/src/i18n/zh_CN/index.js
vendored
6
frontend/src/i18n/zh_CN/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "\u65b0\u6536\u5165",
|
||||
"newWithdrawal": "\u65b0\u652f\u51fa",
|
||||
"bills_paid": "\u5df2\u4ed8\u8d26\u5355",
|
||||
"left_to_spend": "\u5269\u4f59\u652f\u51fa",
|
||||
"no_budget": "(\u65e0\u9884\u7b97)",
|
||||
"budgeted": "\u9884\u7b97\u4e0a\u9650",
|
||||
"spent": "\u652f\u51fa",
|
||||
"no_bill": "(\u65e0\u8d26\u5355)",
|
||||
"rule_trigger_source_account_starts_choice": "\u6765\u6e90\u8d26\u6237\u540d\u79f0\u5f00\u5934\u4e3a...",
|
||||
"rule_trigger_source_account_ends_choice": "\u6765\u6e90\u8d26\u6237\u7ed3\u5c3e\u4e3a\u2026",
|
||||
"rule_trigger_source_account_is_choice": "\u6765\u6e90\u8d26\u6237\u540d\u79f0\u4e3a...",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "\u4eca\u5929\u7406\u8d22\u4e86\u5417\uff1f",
|
||||
"bills_to_pay": "\u5f85\u4ed8\u8d26\u5355",
|
||||
"left_to_spend": "\u5269\u4f59\u652f\u51fa",
|
||||
"net_worth": "\u51c0\u8d44\u4ea7",
|
||||
"pref_last365": "\u6700\u8fd1\u4e00\u5e74",
|
||||
"pref_last90": "\u6700\u8fd190\u5929",
|
||||
|
6
frontend/src/i18n/zh_TW/index.js
vendored
6
frontend/src/i18n/zh_TW/index.js
vendored
@@ -52,6 +52,11 @@ export default {
|
||||
"newDeposit": "\u65b0\u5b58\u6b3e",
|
||||
"newWithdrawal": "\u65b0\u652f\u51fa",
|
||||
"bills_paid": "\u5df2\u7e73\u5e33\u55ae",
|
||||
"left_to_spend": "\u5269\u9918\u53ef\u82b1\u8cbb",
|
||||
"no_budget": "(\u7121\u9810\u7b97)",
|
||||
"budgeted": "\u5df2\u5217\u5165\u9810\u7b97",
|
||||
"spent": "\u652f\u51fa",
|
||||
"no_bill": "(no bill)",
|
||||
"rule_trigger_source_account_starts_choice": "Source account name starts with..",
|
||||
"rule_trigger_source_account_ends_choice": "Source account name ends with..",
|
||||
"rule_trigger_source_account_is_choice": "Source account name is..",
|
||||
@@ -187,7 +192,6 @@ export default {
|
||||
"subscriptions": "Subscriptions",
|
||||
"welcome_back": "What's playing?",
|
||||
"bills_to_pay": "\u5f85\u4ed8\u5e33\u55ae",
|
||||
"left_to_spend": "\u5269\u9918\u53ef\u82b1\u8cbb",
|
||||
"net_worth": "\u6de8\u503c",
|
||||
"pref_last365": "Last year",
|
||||
"pref_last90": "Last 90 days",
|
||||
|
@@ -30,7 +30,7 @@
|
||||
<SpendInsightBox />
|
||||
</div>
|
||||
<div class="col">
|
||||
TODO net worth insight
|
||||
<NetWorthInsightBox />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row q-mb-sm">
|
||||
@@ -89,10 +89,12 @@
|
||||
|
||||
<script>
|
||||
import {defineAsyncComponent} from "vue";
|
||||
import NetWorthInsightBox from "../../components/dashboard/NetWorthInsightBox";
|
||||
|
||||
export default {
|
||||
name: "Dashboard",
|
||||
components: {
|
||||
NetWorthInsightBox,
|
||||
BillInsightBox: defineAsyncComponent(() => import('../../components/dashboard/BillInsightBox.vue')),
|
||||
SpendInsightBox: defineAsyncComponent(() => import('../../components/dashboard/SpendInsightBox.vue')),
|
||||
}
|
||||
|
@@ -33,6 +33,17 @@ Route::group(
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* V2 API route for net worth endpoint(s);
|
||||
*/
|
||||
Route::group(
|
||||
['namespace' => 'FireflyIII\Api\V2\Controllers', 'prefix' => 'v2/net-worth',
|
||||
'as' => 'api.v2.net-worth.',],
|
||||
static function () {
|
||||
Route::get('', ['uses' => 'NetWorthController@get', 'as' => 'index']);
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* V2 API route for bills.
|
||||
*/
|
||||
@@ -45,6 +56,8 @@ Route::group(
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* V2 API route for budgets.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user