@page "/accounts/{AccountId:int}" @inject IAccountService AccountService @inject IEntryService EntryService @inject IBalanceQueryService BalanceQueryService @inject IPdfStatementService PdfStatementService @inject IFileSaveService FileSaveService @inject NavigationManager Navigation
@if (account == null) {
} else {

@account.Name

@if (balance != null) {
Saldo
@FormatAmount(balance.TotalBalance)
Einnahmen
@FormatAmount(showCurrentYearOnly ? balance.CurrentYearIncome : balance.TotalIncome)
Ausgaben
@FormatAmount(showCurrentYearOnly ? balance.CurrentYearExpense : balance.TotalExpense)
@if (showCurrentYearOnly) {
Übertrag von @(DateTime.Now.Year - 1)
@FormatAmount(balance.CarryoverBalance)
Umsätze @DateTime.Now.Year
@FormatAmount(balance.CurrentYearIncome - balance.CurrentYearExpense)
} }
@if (entries != null) {
} }
@if (showAddEntry) { } @if (showAddTransfer) { } @if (showEditName) { } @if (showEditCarryover) { } @if (confirmDeleteEntryId.HasValue) { } @if (confirmRestoreEntryId.HasValue) { } @if (!string.IsNullOrWhiteSpace(savedPdfPath)) { } @if (editingEntry != null) { } @if (editingTransferEntry != null) { } @code { [Parameter] public int AccountId { get; set; } private AccountSummaryDto? account; private AccountBalanceDto? balance; private List? entries; private bool showAddEntry, showAddTransfer; private bool showEditName, showEditCarryover; private bool showCurrentYearOnly = true; private int? confirmDeleteEntryId; private string? confirmDeleteEntryTitle; private int? confirmRestoreEntryId; private string? confirmRestoreEntryTitle; private string? savedPdfPath; private EntryDto? editingEntry; private EntryDto? editingTransferEntry; private void NavigateBack() => Navigation.NavigateTo("/"); protected override async Task OnParametersSetAsync() { await LoadAll(); } private async Task LoadAll() { account = await AccountService.GetAccountAsync(AccountId); balance = await BalanceQueryService.GetAccountBalanceAsync(AccountId); entries = await EntryService.GetEntriesAsync(AccountId, showCurrentYearOnly); } private async Task ToggleYearFilter() { showCurrentYearOnly = !showCurrentYearOnly; entries = await EntryService.GetEntriesAsync(AccountId, showCurrentYearOnly); } private async Task HandleSaveName(string newName) { await AccountService.RenameAccountAsync(AccountId, newName); showEditName = false; await LoadAll(); } private async Task HandleSaveCarryover(decimal newAmount) { await AccountService.UpdateCarryoverAsync(AccountId, newAmount); showEditCarryover = false; await LoadAll(); } private async Task HandleEntryCreated() { showAddEntry = false; await LoadAll(); } private async Task HandleTransferCreated() { showAddTransfer = false; await LoadAll(); } private void RequestDeleteEntry(int entryId) { confirmDeleteEntryId = entryId; confirmDeleteEntryTitle = entries?.FirstOrDefault(e => e.Id == entryId)?.Title; } private void CancelDeleteConfirm() { confirmDeleteEntryId = null; confirmDeleteEntryTitle = null; } private async Task HandleConfirmDelete() { if (confirmDeleteEntryId.HasValue) { await EntryService.DeleteEntryAsync(confirmDeleteEntryId.Value); confirmDeleteEntryId = null; confirmDeleteEntryTitle = null; await LoadAll(); } } private void RequestRestoreEntry(int entryId) { confirmRestoreEntryId = entryId; confirmRestoreEntryTitle = entries?.FirstOrDefault(e => e.Id == entryId)?.Title; } private void CancelRestoreConfirm() { confirmRestoreEntryId = null; confirmRestoreEntryTitle = null; } private async Task HandleConfirmRestore() { if (confirmRestoreEntryId.HasValue) { await EntryService.RestoreEntryAsync(confirmRestoreEntryId.Value); confirmRestoreEntryId = null; confirmRestoreEntryTitle = null; await LoadAll(); } } private void RequestEditEntry(int entryId) { var entry = entries?.FirstOrDefault(e => e.Id == entryId); if (entry?.IsTransfer == true) editingTransferEntry = entry; else editingEntry = entry; } private async Task HandleEntryEdited() { editingEntry = null; editingTransferEntry = null; await LoadAll(); } private async Task HandleExport() { var pdf = await PdfStatementService.GenerateStatementAsync(AccountId, showCurrentYearOnly); var suffix = showCurrentYearOnly ? $"_{DateTime.Now.Year}" : "_Gesamt"; savedPdfPath = await FileSaveService.SaveFileAsync(pdf, $"{account?.Name}{suffix}.pdf"); } private async Task HandleOpenSavedPdf() { if (!string.IsNullOrWhiteSpace(savedPdfPath)) { await FileSaveService.OpenFileAsync(savedPdfPath); } savedPdfPath = null; } private void CancelOpenSavedPdf() { savedPdfPath = null; } private static string FormatAmount(decimal amount) => $"{amount:N2} €"; }