Show transactions in account currency, not always CHF

- Display transaction amounts and total in the account's own currency
  using GetValue(isFxAccount) so FX accounts show their foreign amount
- Fix SaveTransaction/GetTransaction to apply FX conversion when either
  the origin or target account is an FX account, not only origin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Claudio Schaad 2026-05-23 16:03:39 +02:00
parent 2c91ac7082
commit 5809ee2059
2 changed files with 13 additions and 10 deletions

View file

@ -32,17 +32,17 @@ namespace Schaad.Accounting.Repositories
{
transaction.Value = Math.Abs(transaction.Value);
// prevent saving fxrate for chf account
var isFxAccount = accountRepository.GetAccount(transaction.OriginAccountId).IsFxAccount;
var originIsFx = accountRepository.GetAccount(transaction.OriginAccountId).IsFxAccount;
var targetIsFx = accountRepository.GetAccount(transaction.TargetAccountId).IsFxAccount;
var isFxAccount = originIsFx || targetIsFx;
// if source account is fx account, we pass a foreign value -> calc to chf
// user enters amount in the foreign account's currency -> convert to CHF for storage
if (isFxAccount && transaction.FxRate != 0)
{
transaction.Value = transaction.Value * transaction.FxRate.Value;
}
isFxAccount |= accountRepository.GetAccount(transaction.TargetAccountId).IsFxAccount;
if (isFxAccount == false)
if (!isFxAccount)
{
transaction.FxRate = null;
}
@ -69,8 +69,9 @@ namespace Schaad.Accounting.Repositories
var transactions = GetTransactionList();
var transaction = transactions.FirstOrDefault(t => t.Id == id);
// if source account is fx account, we save in chf currency -> calc to foreign currency for display
var isFxAccount = accountRepository.GetAccount(transaction.OriginAccountId).IsFxAccount;
// value is stored in CHF -> convert back to foreign currency for display/editing
var isFxAccount = accountRepository.GetAccount(transaction.OriginAccountId).IsFxAccount
|| accountRepository.GetAccount(transaction.TargetAccountId).IsFxAccount;
if (isFxAccount && transaction.FxRate != 0)
{
transaction.Value = transaction.Value / transaction.FxRate.Value;

View file

@ -34,7 +34,7 @@
@selectedAccount.Name
</FluentGridItem>
<FluentGridItem xs="4" Class="align-content-center">
Total @Math.Abs(selectedAccount.Balance).ToString("C2") in @transactionList?.Count() Transaktionen
Total @Math.Abs(selectedAccount.Balance).ToString("N2") @selectedAccount.Currency in @transactionList?.Count() Transaktionen
</FluentGridItem>
<FluentGridItem xs="4" Class="align-content-center" Justify="JustifyContent.FlexEnd">
<FluentButton IconStart="@(new Icons.Regular.Size16.Add())" Appearance="Appearance.Neutral" OnClick="AddAsync">Neue Transaktion hinzufügen</FluentButton>
@ -49,7 +49,9 @@
<TemplateColumn Title="Gegenkonto">
@GetAccountName(context)
</TemplateColumn>
<PropertyColumn Property="@(p => p.Value)" Format="C2" Align="Align.End"/>
<TemplateColumn Title="Betrag" Align="Align.End">
@context.GetValue(selectedAccount.IsFxAccount).ToString("N2") @selectedAccount.Currency
</TemplateColumn>
<TemplateColumn Align="Align.Center" Width="50px">
<FluentButton IconEnd="@(new Icons.Regular.Size16.Delete())" Appearance="Appearance.Neutral" OnClick="@(() => DeleteAsync(context.Id))"/>
</TemplateColumn>