From 1e9cf520f663ab40961df2526d59cb112d15157a Mon Sep 17 00:00:00 2001 From: beo3000 Date: Thu, 25 Dec 2025 21:48:39 +0100 Subject: [PATCH] mod Expense-Table, show time and chg order --- .claude/settings.local.json | 3 +- docs/prompts.md | 3 ++ .../Components/Pages/Days/DayDetails.razor | 53 +++++++++++++------ 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6b3d6ec..b5fca50 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -9,7 +9,8 @@ "Bash(git commit:*)", "Bash(mkdir:*)", "WebSearch", - "Bash(git merge:*)" + "Bash(git merge:*)", + "Bash(findstr:*)" ] } } diff --git a/docs/prompts.md b/docs/prompts.md index 24f261d..1612119 100644 --- a/docs/prompts.md +++ b/docs/prompts.md @@ -1,5 +1,8 @@ ## Optimierung Spieltag-Details +Blende die Erledigt-Kennzeichnung (Als bezahlt markieren) in der Tabelle mit den Staten () für Geldstrafen aus. Nur Sachstrafen sollen sich manuell erledigen lassen. Geldstrafen werden später zentral über die Abrechnung des gesamten Tages erledigt. + +## Optimierung Spieltag-Details - done Die Erfassung von Strafen muss möglichst schnell und komfortabel mögiich sein. Dafür muss die Seite DayDetails optimiert werden. Es soll möglich sein eine Person in der Teilnehmerliste auszuwählen. Bei der Erfassung einer neuen Strafe soll diese Person direkt vorbelegt werden. Außerdem soll zusätzlich zum Button "Strafe hinzufügen" ein Menü-Button angezeigt werden, der eine Kurzwahl aller Strafen mit der Option "IsOneClick" ermöglicht. Der Benutzer soll visuell leicht erkennen können, ob und welcher Teilnehmer aktuell markiert wurde. diff --git a/src/Koogle.Web/Components/Pages/Days/DayDetails.razor b/src/Koogle.Web/Components/Pages/Days/DayDetails.razor index a294c87..27567ba 100644 --- a/src/Koogle.Web/Components/Pages/Days/DayDetails.razor +++ b/src/Koogle.Web/Components/Pages/Days/DayDetails.razor @@ -220,7 +220,7 @@ else - Strafen / Kosten (@Expenses.Count) + Strafen / Kosten (@FilteredExpenses.Count@(_selectedParticipantId.HasValue && Expenses.Count != FilteredExpenses.Count ? $"/{Expenses.Count}" : "")) @if (Day.Status != DayStatus.Closed) { @@ -268,9 +268,18 @@ else Füge zuerst Teilnehmer hinzu, um Strafen zuweisen zu können. } - else if (Expenses.Count == 0) + else if (FilteredExpenses.Count == 0) { - Keine Strafen zugewiesen + + @if (_selectedParticipantId.HasValue) + { + Keine Strafen für @SelectedParticipant?.PersonName + } + else + { + Keine Strafen zugewiesen + } + } else { @@ -303,24 +312,32 @@ else - + - Person + @if (!_selectedParticipantId.HasValue) + { + Person + } Strafe + Uhrzeit Preis Status Aktionen - - - - @context.PersonName[0] - - @context.PersonName - - + @if (!_selectedParticipantId.HasValue) + { + + + + @context.PersonName[0] + + @context.PersonName + + + } @context.Name + @context.CreatedAt.ToString("HH:mm") @context.Price.ToString("C") Day?.Participants.FirstOrDefault(p => p.PersonId == _selectedParticipantId); private IReadOnlyList OneClickExpenses => DayState.Value.AvailableExpenses.Where(e => e.IsOneClick && !e.IsVariable).ToList(); - private decimal TotalExpenseAmount => Expenses.Sum(e => e.Price); - private decimal OpenExpenseAmount => Expenses.Where(e => e.PersonExpenseStatus == PersonExpenseStatus.Open).Sum(e => e.Price); - private decimal PaidExpenseAmount => Expenses.Where(e => e.PersonExpenseStatus == PersonExpenseStatus.Done).Sum(e => e.Price); + private IReadOnlyList FilteredExpenses => (_selectedParticipantId.HasValue + ? Expenses.Where(e => e.PersonId == _selectedParticipantId.Value) + : Expenses).OrderByDescending(e => e.CreatedAt).ToList(); + + private decimal TotalExpenseAmount => FilteredExpenses.Sum(e => e.Price); + private decimal OpenExpenseAmount => FilteredExpenses.Where(e => e.PersonExpenseStatus == PersonExpenseStatus.Open).Sum(e => e.Price); + private decimal PaidExpenseAmount => FilteredExpenses.Where(e => e.PersonExpenseStatus == PersonExpenseStatus.Done).Sum(e => e.Price); protected override void OnInitialized() {