diff --git a/Schaad.Accounting.UI/Components/Pages/Dialogs/TransactionSplitDialog.razor b/Schaad.Accounting.UI/Components/Pages/Dialogs/TransactionSplitDialog.razor index db2a73c..569a2a2 100644 --- a/Schaad.Accounting.UI/Components/Pages/Dialogs/TransactionSplitDialog.razor +++ b/Schaad.Accounting.UI/Components/Pages/Dialogs/TransactionSplitDialog.razor @@ -73,6 +73,15 @@
+ @if (validationErrors.Count > 0) + { + + }
diff --git a/Schaad.Accounting.UI/Components/Pages/Dialogs/TransactionSplitDialog.razor.cs b/Schaad.Accounting.UI/Components/Pages/Dialogs/TransactionSplitDialog.razor.cs index a3df0f1..87ddb8b 100644 --- a/Schaad.Accounting.UI/Components/Pages/Dialogs/TransactionSplitDialog.razor.cs +++ b/Schaad.Accounting.UI/Components/Pages/Dialogs/TransactionSplitDialog.razor.cs @@ -36,7 +36,8 @@ public partial class TransactionSplitDialog : ComponentBase private IReadOnlyList accounts = []; private IReadOnlyList bookingTexts = []; private decimal openAmount = 0; - + private List validationErrors = new(); + protected override async Task OnInitializedAsync() { @@ -68,16 +69,43 @@ public partial class TransactionSplitDialog : ComponentBase openAmount = Content.Value + transactionList.Sum(t => t.Value); } + // Every row in transactionList needs Text, TargetAccountId, and a non-zero Value. + // The single EditContext above only covers the first row (that's what it was + // constructed with) — so DataAnnotations validation misses subsequent split rows. + // Run explicit per-row checks here and surface everything in validationErrors. + private bool ValidateAllRows() + { + validationErrors.Clear(); + for (var i = 0; i < transactionList.Count; i++) + { + var t = transactionList[i]; + if (string.IsNullOrWhiteSpace(t.Text)) + { + validationErrors.Add($"Zeile {i + 1}: Buchungstext fehlt"); + } + if (string.IsNullOrEmpty(t.TargetAccountId)) + { + validationErrors.Add($"Zeile {i + 1}: Konto fehlt"); + } + if (t.Value == 0) + { + validationErrors.Add($"Zeile {i + 1}: Betrag darf nicht 0 sein"); + } + } + return validationErrors.Count == 0; + } + private async Task SaveAsync() { - if (editContext.Validate()) + if (!ValidateAllRows()) { - foreach (var transtaction in transactionList) - { - await transactionRepository.SaveTransactionAsync(transtaction); - } - await Dialog.CloseAsync(Content); + return; } + foreach (var transtaction in transactionList) + { + await transactionRepository.SaveTransactionAsync(transtaction); + } + await Dialog.CloseAsync(Content); } private async Task CancelAsync()