Add Components/Loading.razor and swap the ad-hoc `<p>Lädt…</p>` guard visuals for it across the four reports, three edit dialogs, and three chart pages (the last three now show the placeholder instead of a blank page while waiting for view data). Kept as a pure visual so each call site changes from `<p>Lädt…</p>` to `<Loading/>` with no other churn. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
118 lines
No EOL
3.2 KiB
Text
118 lines
No EOL
3.2 KiB
Text
@page "/DetailReport"
|
|
|
|
@if (accounts is null || transactions is null)
|
|
{
|
|
<Loading/>
|
|
return;
|
|
}
|
|
|
|
<h3>@header</h3>
|
|
<a href="javascript:window.print()" class="hidePrint">Print</a>
|
|
|
|
<br />
|
|
<br />
|
|
<table class="report">
|
|
<thead>
|
|
<tr>
|
|
<th>Konto</th>
|
|
<th>Bezeichnung</th>
|
|
<th class="right">Betrag</th>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3"><hr /></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td colspan="3" class="header">Einkünfte</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="3"><hr /></td>
|
|
</tr>
|
|
@foreach(var account in accounts.Where(m => m.Class == 3).OrderBy(m => m.Number))
|
|
{
|
|
@if (account.Balance == 0) {continue;}
|
|
|
|
<tr>
|
|
<td class="header">@account.Number</td>
|
|
<td class="header">@account.Name</td>
|
|
<td class="header right">@Math.Abs(account.Balance).ToFormattedString()</td>
|
|
</tr>
|
|
|
|
@foreach(var trx in transactions.Where(t => t.TargetAccountId == account.Id || t.OriginAccountId == account.Id).OrderBy(t => t.ValueDate))
|
|
{
|
|
<tr>
|
|
<td>@trx.ValueDate.ToString("dd.MM.yyyy")</td>
|
|
<td>@trx.Text</td>
|
|
<td class="right">
|
|
@if (trx.OriginAccountId == account.Id)
|
|
{
|
|
@trx.Value.ToFormattedString();
|
|
}
|
|
else
|
|
{
|
|
<span>-</span>@trx.Value.ToFormattedString();
|
|
}
|
|
</td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td colspan="3"><hr /></td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td colspan="2" class="total right">Total Einkünfte</td>
|
|
<td class="right total">@profit.ToFormattedString()</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="3"><hr /></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="3" class="header">Ausgaben</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="3"><hr /></td>
|
|
</tr>
|
|
@foreach(var account in accounts.Where(m => m.Class == 4).OrderBy(m => m.Number))
|
|
{
|
|
@if (account.Balance == 0) {continue;}
|
|
|
|
<tr>
|
|
<td class="header">@account.Number</td>
|
|
<td class="header">@account.Name</td>
|
|
<td class="header right">@account.Balance.ToFormattedString()</td>
|
|
</tr>
|
|
|
|
@foreach(var trx in transactions.Where(t => t.TargetAccountId == account.Id || t.OriginAccountId == account.Id).OrderBy(t => t.ValueDate))
|
|
{
|
|
<tr>
|
|
<td>@trx.ValueDate.ToString("dd.MM.yyyy")</td>
|
|
<td>@trx.Text</td>
|
|
<td class="right">
|
|
@if (trx.TargetAccountId == account.Id)
|
|
{
|
|
@trx.Value.ToFormattedString();
|
|
}
|
|
else
|
|
{
|
|
<span>-</span>@trx.Value.ToFormattedString();
|
|
}
|
|
</td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td colspan="3"><hr /></td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td colspan="2" class="total right">Total Ausgaben</td>
|
|
<td class="right total">@loss.ToFormattedString()</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" style="height: 30px"> </td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" class="footer">@footer</td>
|
|
</tr>
|
|
</tbody>
|
|
</table> |