mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Code for #1236
This commit is contained in:
parent
0d58530f55
commit
a436c55c50
@ -22,11 +22,13 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Http\Controllers\Json;
|
namespace FireflyIII\Http\Controllers\Json;
|
||||||
|
|
||||||
|
use Amount;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\AccountType;
|
use FireflyIII\Models\AccountType;
|
||||||
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
@ -88,13 +90,15 @@ class BoxController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param CurrencyRepositoryInterface $repository
|
||||||
|
*
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function balance()
|
public function balance(CurrencyRepositoryInterface $repository)
|
||||||
{
|
{
|
||||||
|
// Cache result, return cache if present.
|
||||||
$start = session('start', Carbon::now()->startOfMonth());
|
$start = session('start', Carbon::now()->startOfMonth());
|
||||||
$end = session('end', Carbon::now()->endOfMonth());
|
$end = session('end', Carbon::now()->endOfMonth());
|
||||||
|
|
||||||
$cache = new CacheProperties;
|
$cache = new CacheProperties;
|
||||||
$cache->addProperty($start);
|
$cache->addProperty($start);
|
||||||
$cache->addProperty($end);
|
$cache->addProperty($end);
|
||||||
@ -102,29 +106,56 @@ class BoxController extends Controller
|
|||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
return Response::json($cache->get()); // @codeCoverageIgnore
|
return Response::json($cache->get()); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
// prep some arrays:
|
||||||
|
$incomes = [];
|
||||||
|
$expenses = [];
|
||||||
|
$sums = [];
|
||||||
|
|
||||||
// try a collector for income:
|
// collect income of user:
|
||||||
/** @var JournalCollectorInterface $collector */
|
/** @var JournalCollectorInterface $collector */
|
||||||
$collector = app(JournalCollectorInterface::class);
|
$collector = app(JournalCollectorInterface::class);
|
||||||
$collector->setAllAssetAccounts()->setRange($start, $end)
|
$collector->setAllAssetAccounts()->setRange($start, $end)
|
||||||
->setTypes([TransactionType::DEPOSIT])
|
->setTypes([TransactionType::DEPOSIT])
|
||||||
->withOpposingAccount();
|
->withOpposingAccount();
|
||||||
$income = strval($collector->getJournals()->sum('transaction_amount'));
|
$set = $collector->getJournals();
|
||||||
$currency = app('amount')->getDefaultCurrency();
|
/** @var Transaction $transaction */
|
||||||
|
foreach ($set as $transaction) {
|
||||||
|
$currencyId = intval($transaction->transaction_currency_id);
|
||||||
|
$incomes[$currencyId] = $incomes[$currencyId] ?? '0';
|
||||||
|
$incomes[$currencyId] = bcadd($incomes[$currencyId], $transaction->transaction_amount);
|
||||||
|
$sums[$currencyId] = $sums[$currencyId] ?? '0';
|
||||||
|
$sums[$currencyId] = bcadd($sums[$currencyId], $transaction->transaction_amount);
|
||||||
|
}
|
||||||
|
|
||||||
// expense:
|
// collect expenses
|
||||||
// try a collector for expenses:
|
|
||||||
/** @var JournalCollectorInterface $collector */
|
/** @var JournalCollectorInterface $collector */
|
||||||
$collector = app(JournalCollectorInterface::class);
|
$collector = app(JournalCollectorInterface::class);
|
||||||
$collector->setAllAssetAccounts()->setRange($start, $end)
|
$collector->setAllAssetAccounts()->setRange($start, $end)
|
||||||
->setTypes([TransactionType::WITHDRAWAL])
|
->setTypes([TransactionType::WITHDRAWAL])
|
||||||
->withOpposingAccount();
|
->withOpposingAccount();
|
||||||
$expense = strval($collector->getJournals()->sum('transaction_amount'));
|
$set = $collector->getJournals();
|
||||||
|
/** @var Transaction $transaction */
|
||||||
|
foreach ($set as $transaction) {
|
||||||
|
$currencyId = intval($transaction->transaction_currency_id);
|
||||||
|
$expenses[$currencyId] = $expenses[$currencyId] ?? '0';
|
||||||
|
$expenses[$currencyId] = bcadd($expenses[$currencyId], $transaction->transaction_amount);
|
||||||
|
$sums[$currencyId] = $sums[$currencyId] ?? '0';
|
||||||
|
$sums[$currencyId] = bcadd($sums[$currencyId], $transaction->transaction_amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
// format amounts:
|
||||||
|
foreach ($sums as $currencyId => $amount) {
|
||||||
|
$currency = $repository->findNull($currencyId);
|
||||||
|
$sums[$currencyId] = Amount::formatAnything($currency, $sums[$currencyId], false);
|
||||||
|
$incomes[$currencyId] = Amount::formatAnything($currency, $incomes[$currencyId] ?? '0', false);
|
||||||
|
$expenses[$currencyId] = Amount::formatAnything($currency, $expenses[$currencyId] ?? '0', false);
|
||||||
|
}
|
||||||
|
|
||||||
$response = [
|
$response = [
|
||||||
'income' => app('amount')->formatAnything($currency, $income, false),
|
'incomes' => $incomes,
|
||||||
'expense' => app('amount')->formatAnything($currency, $expense, false),
|
'expenses' => $expenses,
|
||||||
'combined' => app('amount')->formatAnything($currency, bcadd($income, $expense), false),
|
'sums' => $sums,
|
||||||
|
'size' => count($sums),
|
||||||
];
|
];
|
||||||
|
|
||||||
$cache->store($response);
|
$cache->store($response);
|
||||||
|
34
public/js/ff/index.js
vendored
34
public/js/ff/index.js
vendored
@ -99,12 +99,34 @@ function getBillsBox() {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function getBalanceBox() {
|
function getBalanceBox() {
|
||||||
// box-balance-total
|
// box-balance-sums
|
||||||
// box-balance-out
|
// box-balance-list
|
||||||
// box-balance-in
|
|
||||||
$.getJSON('json/box/balance').done(function (data) {
|
$.getJSON('json/box/balance').done(function (data) {
|
||||||
$('#box-balance-total').html(data.combined);
|
if (data.size === 1) {
|
||||||
$('#box-balance-in').html(data.income);
|
// show balance in "sums", show single entry in list.
|
||||||
$('#box-balance-out').html(data.expense);
|
for (x in data.sums) {
|
||||||
|
$('#box-balance-sums').html(data.sums[x]);
|
||||||
|
$('#box-balance-list').html(data.incomes[x] + ' / ' + data.expenses[x]);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// do not use "sums", only use list.
|
||||||
|
$('#box-balance-progress').remove();
|
||||||
|
var expense, string, sum, income, current;
|
||||||
|
var count = 0;
|
||||||
|
for (x in data.sums) {
|
||||||
|
if (count > 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
current = $('#box-balance-list').html();
|
||||||
|
sum = data.sums[x];
|
||||||
|
expense = data.expenses[x];
|
||||||
|
income = data.incomes[x];
|
||||||
|
string = income + ' / ' + expense + ': ' + sum;
|
||||||
|
|
||||||
|
$('#box-balance-list').html(current + '<span title="' + string + '">' + string + '</span>' + '<br>');
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return;
|
||||||
});
|
});
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user