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)
+ {
+
+ @foreach (var err in validationErrors)
+ {
+ - @err
+ }
+
+ }
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()