Convert to primary currency for category charts

This commit is contained in:
Khoa Nguyen
2026-02-28 10:50:02 +01:00
parent c44711e9bd
commit 85da46243b
3 changed files with 155 additions and 94 deletions

View File

@@ -36,6 +36,7 @@ use FireflyIII\Support\Facades\Navigation;
use FireflyIII\Support\Facades\Steam;
use FireflyIII\Support\Http\Controllers\BasicDataSupport;
use FireflyIII\Support\Http\Controllers\ChartGeneration;
use FireflyIII\Support\Http\Controllers\ResolvesJournalAmountAndCurrency;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
@@ -47,6 +48,7 @@ class ReportController extends Controller
{
use BasicDataSupport;
use ChartGeneration;
use ResolvesJournalAmountAndCurrency;
protected GeneratorInterface $generator;
@@ -176,22 +178,14 @@ class ReportController extends Controller
// loop. group by currency and by period.
/** @var array $journal */
foreach ($journals as $journal) {
$period = $journal['date']->format($format);
$currencyId = (int) $journal['currency_id'];
$currencySymbol = (string) $journal['currency_symbol'];
$currencyCode = (string) $journal['currency_code'];
$currencyName = (string) $journal['currency_name'];
$currencyDecimalPlaces = (int) $journal['currency_decimal_places'];
$amount = (string) $journal['amount'];
if ($this->convertToPrimary && null !== $this->primaryCurrency && $journal['currency_id'] !== $this->primaryCurrency->id) {
$currencyId = $this->primaryCurrency->id;
$currencySymbol = $this->primaryCurrency->symbol;
$currencyCode = $this->primaryCurrency->code;
$currencyName = $this->primaryCurrency->name;
$currencyDecimalPlaces = $this->primaryCurrency->decimal_places;
$amount = $journal['foreign_currency_id'] === $this->primaryCurrency->id ? $journal['foreign_amount'] : $journal['pc_amount'];
}
$period = $journal['date']->format($format);
$journalData = $this->resolveJournalAmountAndCurrency($journal, $journal);
$currencyId = $journalData['currency_id'];
$currencySymbol = $journalData['currency_symbol'];
$currencyCode = $journalData['currency_code'];
$currencyName = $journalData['currency_name'];
$currencyDecimalPlaces = $journalData['currency_decimal_places'];
$amount = $journalData['amount'];
$data[$currencyId] ??= [
'currency_id' => $currencyId,
@@ -202,8 +196,7 @@ class ReportController extends Controller
];
$data[$currencyId][$period] ??= ['period' => $period, 'spent' => '0', 'earned' => '0'];
// in our outgoing?
$key = 'spent';
$amount = Steam::positive($amount);
$key = 'spent';
// deposit = incoming
// transfer or reconcile or opening balance, and these accounts are the destination.