- Add IMPROVEMENT_PLAN.md with phased plan for follow-up work - Consolidate DI registrations into a single AddAccounting() extension; drop the duplicate service registrations and the PdfParsingService self-registration - TrySetYear: capture this.year before overwriting so rollback actually restores the previous value - DummyFxService: check toCurrency (was checking fromCurrency twice) - TransactionRepository.GetTransaction: return a copy instead of mutating the loaded entity, and guard against unknown ids - ViewService.GetTransactionViewList(accountId): flip the sign on a copy rather than mutating the entity returned by the repository - FileService.GetTransactionListCsv: same treatment; use a local signedValue instead of mutating trx.Value - ProfitLossReport: use ClassIds.Income/Expenses instead of magic 3/4 - CLAUDE.md: correct the ClassIds documentation (1/2/3/4, not 1000/2000/3000/4000) SettingsService lifetime is intentionally left as Singleton for now; making it Scoped requires persisting year/mandator selection across page reloads first (tracked in the plan). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
34 lines
No EOL
1.1 KiB
C#
34 lines
No EOL
1.1 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
using Schaad.Accounting;
|
|
using Schaad.Accounting.Datasets;
|
|
using Schaad.Accounting.Interfaces;
|
|
|
|
namespace Schaad.Accounting.UI.Components.Pages.Reports;
|
|
|
|
public partial class ProfitLossReport : ComponentBase
|
|
{
|
|
[Inject]
|
|
private IViewService viewService { get; set; } = null!;
|
|
|
|
[Inject]
|
|
private ISettingsService settingsService { get; set; } = null!;
|
|
|
|
private IReadOnlyList<AccountDataset> accounts = null!;
|
|
private decimal profit;
|
|
private decimal loss;
|
|
private decimal win;
|
|
private string header = null!;
|
|
private string footer = null!;
|
|
|
|
protected override Task OnInitializedAsync()
|
|
{
|
|
accounts = viewService.GetAccountViewList();
|
|
profit = Math.Abs(accounts.Where(m => m.Class == ClassIds.Income).Sum(m => m.Balance));
|
|
loss = Math.Abs(accounts.Where(m => m.Class == ClassIds.Expenses).Sum(m => m.Balance));
|
|
win = profit-loss;
|
|
|
|
(header, footer) = Report.GetViewDataTitleAndFooter("Erfolgsrechnung", settingsService);
|
|
|
|
return base.OnInitializedAsync();
|
|
}
|
|
} |