From 35996f24be533de7d2d50baa156cac8641c78420 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 1 Jan 2020 14:26:49 +0100 Subject: [PATCH] Make budget chart multi-currency --- .../Controllers/Chart/BudgetController.php | 46 ++++++++++++------- public/v1/js/ff/budgets/show.js | 12 ++--- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index e087273e90..3927c284ce 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -238,18 +238,22 @@ class BudgetController extends Controller // group by asset account ID: foreach ($journals as $journal) { - $assetId = (int)$journal['source_account_id']; - $result[$assetId] = $result[$assetId] ?? [ + $key = sprintf('%d-%d', (int)$journal['source_account_id'], $journal['currency_id']); + $result[$key] = $result[$key] ?? [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], + 'currency_name' => $journal['currency_name'], ]; - $result[$assetId]['amount'] = bcadd($journal['amount'], $result[$assetId]['amount']); + $result[$key]['amount'] = bcadd($journal['amount'], $result[$key]['amount']); } $names = $this->getAccountNames(array_keys($result)); - foreach ($result as $assetId => $info) { - $chartData[$names[$assetId]] - = [ + foreach ($result as $combinedId => $info) { + $parts = explode('-', $combinedId); + $assetId = (int)$parts[0]; + $title = sprintf('%s (%s)', $names[$assetId], $info['currency_name']); + $chartData[$title] + = [ 'amount' => $info['amount'], 'currency_symbol' => $info['currency_symbol'], ]; @@ -298,17 +302,21 @@ class BudgetController extends Controller $result = []; $chartData = []; foreach ($journals as $journal) { - $categoryId = (int)$journal['category_id']; - $result[$categoryId] = $result[$categoryId] ?? [ + $key = sprintf('%d-%d', $journal['category_id'], $journal['currency_id']); + $result[$key] = $result[$key] ?? [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], + 'currency_name' => $journal['currency_name'], ]; - $result[$categoryId]['amount'] = bcadd($journal['amount'], $result[$categoryId]['amount']); + $result[$key]['amount'] = bcadd($journal['amount'], $result[$key]['amount']); } $names = $this->getCategoryNames(array_keys($result)); - foreach ($result as $categoryId => $info) { - $chartData[$names[$categoryId]] = [ + foreach ($result as $combinedId => $info) { + $parts = explode('-', $combinedId); + $categoryId = (int)$parts[0]; + $title = sprintf('%s (%s)', $names[$categoryId], $info['currency_name']); + $chartData[$title] = [ 'amount' => $info['amount'], 'currency_symbol' => $info['currency_symbol'], ]; @@ -359,18 +367,22 @@ class BudgetController extends Controller $chartData = []; /** @var array $journal */ foreach ($journals as $journal) { - $opposingId = (int)$journal['destination_account_id']; - $result[$opposingId] = $result[$opposingId] ?? [ + $key = sprintf('%d-%d', $journal['destination_account_id'], $journal['currency_id']); + $result[$key] = $result[$key] ?? [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], + 'currency_name' => $journal['currency_name'], ]; - $result[$opposingId]['amount'] = bcadd($journal['amount'], $result[$opposingId]['amount']); + $result[$key]['amount'] = bcadd($journal['amount'], $result[$key]['amount']); } $names = $this->getAccountNames(array_keys($result)); - foreach ($result as $opposingId => $info) { - $name = $names[$opposingId] ?? 'no name'; - $chartData[$name] = [ + foreach ($result as $combinedId => $info) { + $parts = explode('-', $combinedId); + $opposingId = (int)$parts[0]; + $name = $names[$opposingId] ?? 'no name'; + $title = sprintf('%s (%s)', $name, $info['currency_name']); + $chartData[$title] = [ 'amount' => $info['amount'], 'currency_symbol' => $info['currency_symbol'], ]; diff --git a/public/v1/js/ff/budgets/show.js b/public/v1/js/ff/budgets/show.js index 38dabaa6eb..b9904a35b4 100644 --- a/public/v1/js/ff/budgets/show.js +++ b/public/v1/js/ff/budgets/show.js @@ -24,14 +24,14 @@ $(function () { "use strict"; if (budgetLimitID > 0) { otherCurrencyLineChart(budgetChartUri, 'budgetOverview', currencySymbol); - pieChart(expenseCategoryUri, 'budget-cat-out'); - pieChart(expenseAssetUri, 'budget-asset-out'); - pieChart(expenseExpenseUri, 'budget-expense-out'); + multiCurrencyPieChart(expenseCategoryUri, 'budget-cat-out'); + multiCurrencyPieChart(expenseAssetUri, 'budget-asset-out'); + multiCurrencyPieChart(expenseExpenseUri, 'budget-expense-out'); } if (budgetLimitID === 0) { columnChart(budgetChartUri, 'budgetOverview'); - pieChart(expenseCategoryUri, 'budget-cat-out'); - pieChart(expenseAssetUri, 'budget-asset-out'); - pieChart(expenseExpenseUri, 'budget-expense-out'); + multiCurrencyPieChart(expenseCategoryUri, 'budget-cat-out'); + multiCurrencyPieChart(expenseAssetUri, 'budget-asset-out'); + multiCurrencyPieChart(expenseExpenseUri, 'budget-expense-out'); } });