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:
parent
2c91ac7082
commit
5809ee2059
2 changed files with 13 additions and 10 deletions
|
|
@ -32,17 +32,17 @@ namespace Schaad.Accounting.Repositories
|
||||||
{
|
{
|
||||||
transaction.Value = Math.Abs(transaction.Value);
|
transaction.Value = Math.Abs(transaction.Value);
|
||||||
|
|
||||||
// prevent saving fxrate for chf account
|
var originIsFx = accountRepository.GetAccount(transaction.OriginAccountId).IsFxAccount;
|
||||||
var isFxAccount = 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)
|
if (isFxAccount && transaction.FxRate != 0)
|
||||||
{
|
{
|
||||||
transaction.Value = transaction.Value * transaction.FxRate.Value;
|
transaction.Value = transaction.Value * transaction.FxRate.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
isFxAccount |= accountRepository.GetAccount(transaction.TargetAccountId).IsFxAccount;
|
if (!isFxAccount)
|
||||||
if (isFxAccount == false)
|
|
||||||
{
|
{
|
||||||
transaction.FxRate = null;
|
transaction.FxRate = null;
|
||||||
}
|
}
|
||||||
|
|
@ -69,8 +69,9 @@ namespace Schaad.Accounting.Repositories
|
||||||
var transactions = GetTransactionList();
|
var transactions = GetTransactionList();
|
||||||
var transaction = transactions.FirstOrDefault(t => t.Id == id);
|
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
|
// value is stored in CHF -> convert back to foreign currency for display/editing
|
||||||
var isFxAccount = accountRepository.GetAccount(transaction.OriginAccountId).IsFxAccount;
|
var isFxAccount = accountRepository.GetAccount(transaction.OriginAccountId).IsFxAccount
|
||||||
|
|| accountRepository.GetAccount(transaction.TargetAccountId).IsFxAccount;
|
||||||
if (isFxAccount && transaction.FxRate != 0)
|
if (isFxAccount && transaction.FxRate != 0)
|
||||||
{
|
{
|
||||||
transaction.Value = transaction.Value / transaction.FxRate.Value;
|
transaction.Value = transaction.Value / transaction.FxRate.Value;
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
@selectedAccount.Name
|
@selectedAccount.Name
|
||||||
</FluentGridItem>
|
</FluentGridItem>
|
||||||
<FluentGridItem xs="4" Class="align-content-center">
|
<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>
|
||||||
<FluentGridItem xs="4" Class="align-content-center" Justify="JustifyContent.FlexEnd">
|
<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>
|
<FluentButton IconStart="@(new Icons.Regular.Size16.Add())" Appearance="Appearance.Neutral" OnClick="AddAsync">Neue Transaktion hinzufügen</FluentButton>
|
||||||
|
|
@ -49,7 +49,9 @@
|
||||||
<TemplateColumn Title="Gegenkonto">
|
<TemplateColumn Title="Gegenkonto">
|
||||||
@GetAccountName(context)
|
@GetAccountName(context)
|
||||||
</TemplateColumn>
|
</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">
|
<TemplateColumn Align="Align.Center" Width="50px">
|
||||||
<FluentButton IconEnd="@(new Icons.Regular.Size16.Delete())" Appearance="Appearance.Neutral" OnClick="@(() => DeleteAsync(context.Id))"/>
|
<FluentButton IconEnd="@(new Icons.Regular.Size16.Delete())" Appearance="Appearance.Neutral" OnClick="@(() => DeleteAsync(context.Id))"/>
|
||||||
</TemplateColumn>
|
</TemplateColumn>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue