beo3000
31bbaaf70a
added game christmas tree
2026-01-08 16:23:00 +01:00
beo3000
1d7139fc1a
mod text
2026-01-07 22:19:41 +01:00
beo3000
7aa49f8271
fix change default club:
...
Der Fix teilt die Operation in zwei Schritte:
1. Alle IsDefault auf false → SaveChanges
2. Neuen Default auf true → SaveChanges
Das verhindert, dass EF Core temporär zwei IsDefault = true Einträge hat, was den Filtered Unique Index verletzen würde.
2026-01-07 22:19:18 +01:00
beo3000
cd98df5a23
fix show message
2026-01-07 17:52:32 +01:00
beo3000
0767992a57
added NavLinks to Home
2026-01-07 17:38:59 +01:00
beo3000
10aedca9a2
fix: ClubLoginNAme auf DB Ebene 50 Zeichen lang
2026-01-07 09:55:15 +01:00
beo3000
adbca10cba
add: Create new guests in DayEditDlg
2026-01-06 19:42:39 +01:00
beo3000
0ae9ef291e
fix select non did not work:
...
Das Problem liegt in OnParametersSetAsync(). Wenn SelectNone() aufgerufen wird:
1. _selectedIds wird geleert
2. NotifySelectionChanged() benachrichtigt Parent
3. Parent aktualisiert Parameter → OnParametersSetAsync() wird erneut aufgerufen
4. Auto-select Logik Zeile 103-106 wählt alle wieder aus!
Fix: Auto-select nur beim ersten Laden ausführen:
Behoben. Das _initialized Flag verhindert nun, dass die Auto-Select-Logik bei jedem Parameter-Update läuft - nur noch beim ersten Laden der Komponente.
2026-01-06 19:33:30 +01:00
beo3000
745da9e678
mod wording
2026-01-06 19:26:27 +01:00
beo3000
345253b491
mod: hide enum-col
2026-01-06 19:21:18 +01:00
beo3000
7e995697f7
fix wordings
2026-01-06 19:07:57 +01:00
beo3000
e2ee3e6afe
added club-terminology
...
Angepasst:
- Club.cs - Navigation Property Terminologies
- AppDbContext.cs - DbSet ClubTerminologies
- DependencyInjection.cs - Service-Registrierung
- NavMenu.razor - Menüpunkt "Begriffe" unter Stammdaten
Migration: AddClubTerminology erstellt und angewandt.
Nutzung im Code:
@inject IClubTerminologyService Terms
// In Component:
var term = await Terms.GetTermAsync(TermKey.Gutter); // "Gosse" oder Default "Pudel"
Neue Keys einfach in TermKey.cs hinzufügen + Default in ClubTerminologyService.Defaults.
2026-01-06 18:41:16 +01:00
beo3000
d1215d73cb
add ChristmasTree.md
2026-01-05 21:52:18 +01:00
beo3000
ebc00d6773
fix FoxHunt -> 21 Points for fox to win
2026-01-05 21:41:08 +01:00
beo3000
caeb1a8e8b
added Team-Support
...
Features:
- Beliebig viele Teams
- Editierbare Team-Namen
- "Zufällig verteilen" Button
- Warnung bei ungleichen Team-Größen
- Validierung bei Required-Modus
2026-01-05 21:07:22 +01:00
beo3000
3f62b3c0e0
refactorings
2026-01-05 19:49:41 +01:00
beo3000
4d584e98af
refactorings
2026-01-05 19:07:15 +01:00
beo3000
b89e32be41
mod wordning Dashboard -> Übersicht
2026-01-05 16:35:42 +01:00
beo3000
53a68c91d0
fix select members
...
Zusammenfassung der Änderungen:
1. FluxorComponent als Basisklasse - Dialog reagiert nun auf PersonState-Änderungen
2. Redundante DB-Anfragen vermeiden - LoadPersonsAction wird nur dispatched wenn Persons.Count == 0 && !IsLoading
3. Pre-Selection bei asynchronem Laden - In OnAfterRender wird die Member-Vorauswahl aktualisiert sobald Persons verfügbar sind
Ursache des Problems:
- Der Dialog dispatched LoadPersonsAction bei jedem Öffnen
- DayDetails.razor dispatched gleichzeitig mehrere Actions (LoadAvailablePersonsAction, etc.)
- Viele parallele DB-Requests erschöpfen den Connection Pool
2026-01-05 15:47:43 +01:00
beo3000
8987fc34b5
dev foxhunt
2026-01-05 15:27:51 +01:00
beo3000
187a7e14c8
dev foxhunt
2026-01-05 15:02:53 +01:00
beo3000
433b61618d
dev foxhunt
2026-01-04 22:27:24 +01:00
beo3000
86ea4f8640
foxhunt part2
2026-01-04 21:42:54 +01:00
beo3000
29fa9c5e84
fox hunt part1
2026-01-04 21:24:30 +01:00
beo3000
9356dab062
little fixes
2026-01-04 18:03:47 +01:00
beo3000
7af5fb909e
fix cashbook - month and year selection
2026-01-04 14:03:33 +01:00
beo3000
2632947d1f
mod: gif tigger on import
2026-01-04 13:55:24 +01:00
beo3000
398897d9be
fix Color-Spalte von 7 auf 50 Zeichen erweitert.
2026-01-04 13:33:06 +01:00
beo3000
fbfdb74cad
fix colorpicker:
...
1. Neues Feld _colorValue für direkten String-Wert
2. OnInitialized: _colorValue direkt aus Category.Color geladen
3. MudColorPicker: ValueChanged="OnColorChanged" statt @bind-Value
4. Neue OnColorChanged Methode aktualisiert beide Felder
5. DTOs verwenden jetzt _colorValue statt _color?.Value
2026-01-04 13:09:23 +01:00
beo3000
7afc242be4
fix: Icon-Spalte von 50 auf 2000 Zeichen erweitert. Das Update sollte jetzt funktionieren.
2026-01-04 13:03:23 +01:00
beo3000
3c7050e172
DemoSeeder.cs:
...
1. HardDeleteClubDataAsync: Löscht jetzt auch CashBookEntries und BookingCategories (Zeilen 200-201)
2. ResetDemoClubAsync: Ruft jetzt SeedSystemBookingCategoriesAsync auf (Zeile 183)
3. Neue Methode SeedSystemBookingCategoriesAsync (Zeilen 578-606): Erstellt die 4 System-Kategorien:
- Spielstrafe (Income, grün)
- Mitgliedsbeitrag (Income, blau)
- Korrekturbuchung (Income, orange)
- Saldoanpassung (Income, grau)
added tests and fixes
Bereits vorhanden:
- ClubService.CreateAsync: Ruft bereits EnsureSystemCategoriesAsync für neue Clubs auf (Zeile 101)
Die System-Kategorien werden jetzt automatisch:
- Bei Anlage eines neuen Clubs (via ClubService)
- Beim Zurücksetzen des Demo-Clubs (via DemoSeeder)
2026-01-04 12:56:15 +01:00
beo3000
b5caa75980
K21 fertig. Änderungen:
...
1. AuthState.cs:68 - IsClubTreasurer Property hinzugefügt
2. AuthState.cs:100,116,123,132 - Initial + WithPermissions um Treasurer erweitert
3. NavMenu.razor:25-48 - Kassenbuch NavGroup mit 3 Links:
- Übersicht (/cashbook)
- Kategorien (/cashbook/categories)
- Berichte (/cashbook/reports)
Sichtbar für: Kassenwart, Admin, SuperAdmin
2026-01-04 10:01:07 +01:00
beo3000
0d94d4c5c0
K20 fertig. Änderungen:
...
1. ClubService.cs:134 - MonthlyMembershipFee in UpdateAsync hinzugefügt
2. Settings.razor:358-364 - Laden der Kassenbuch-Einstellungen beim Init
3. Settings.razor:665-689 - SaveCashBookSettings() Methode implementiert
Der Kassenbuch-Tab in den Vereins-Einstellungen funktioniert jetzt:
- Zeigt aktuellen Kontostand
- Erlaubt Ändern des monatlichen Mitgliedsbeitrags
- Speichert Änderungen via Fluxor-Action
- Quick-Links zu Kassenbuch, Kategorien, Berichten
2026-01-04 09:56:15 +01:00
beo3000
a59fdac5d5
K19 fertig.
...
Erstellte Dateien:
- src/Koogle.Web/Components/Pages/CashBook/MembershipFeeDialog.razor - Dialog mit Monat/Jahr-Auswahl, optionalem Betrags-Override, Warnung bei bestehenden Beiträgen
Geänderte Dateien:
- CashBook.razor - Button "Mitgliedsbeiträge" hinzugefügt
- CashBook.razor.cs - OpenMembershipFeeDialog() Methode, prüft auf existierende Beiträge
Features:
- Monat/Jahr-Auswahl
- Optionaler Betrags-Override (Switch)
- Warnung bei existierenden Beiträgen für gewählten Monat
- Dispatched CreateMembershipFeesAction
2026-01-03 22:12:21 +01:00
beo3000
8a9096c95e
K18 fertig.
...
Erstellte Datei: src/Koogle.Web/Controllers/CashBookController.cs
Endpoints:
- GET /api/cashbook/export/excel?year=2026&month=1 → Excel-Download
- GET /api/cashbook/export/pdf?year=2026&month=1 → PDF-Download
Policy: ClubTreasurer
Reports.razor.cs aktualisiert → Export-Buttons öffnen jetzt die Controller-Endpoints.
2026-01-03 22:08:27 +01:00
beo3000
ea237183f9
K17 fertig.
...
Erweitert: src/Koogle.Application/Services/CashBookExportService.cs
PDF-Struktur (QuestPDF 2025.12.1):
- Header: Titel, Vereinsname, Berichtszeitraum
- Zusammenfassung: Salden-Tabelle (Anfang/Einnahmen/Ausgaben/End)
- Kategorien: Einnahmen + Ausgaben mit farbigen Tabellen
- Footer: Erstelldatum + Seitenzahlen
2026-01-03 22:03:17 +01:00
beo3000
5bd0e19f06
K16 fertig.
...
Erstellte Dateien:
- src/Koogle.Application/Interfaces/ICashBookExportService.cs - Interface mit ExportToExcelAsync + ExportToPdfAsync
- src/Koogle.Application/Services/CashBookExportService.cs - Excel-Export via ClosedXML
Excel-Struktur (3 Sheets):
1. Zusammenfassung - Salden, Summen, Statistik
2. Kategorien - Einnahmen/Ausgaben nach Kategorie
3. Buchungen - Alle Einträge mit Summenzeile
NuGet: ClosedXML 0.105.0 hinzugefügt.
2026-01-03 21:59:13 +01:00
beo3000
dfe74adf01
● K15 fertig. Erstellte Dateien:
...
- src/Koogle.Web/Components/Pages/CashBook/Reports.razor - UI mit Monat/Jahr-Auswahl, Saldo-Karten, Donut-Charts für Kategorien, expandierbare Buchungsliste
- src/Koogle.Web/Components/Pages/CashBook/Reports.razor.cs - Code-behind
Route: /cashbook/reports | Policy: ClubViewer
Export-Buttons (Excel/PDF) zeigen Info-Message - werden in K16/K17 implementiert.
2026-01-03 21:55:02 +01:00
beo3000
e1f73691c4
Complete phase K14: Categories UI
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:49:40 +01:00
beo3000
05d1622bd4
K14: add Categories UI page + dialog
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:49:11 +01:00
beo3000
d0beb200b3
Complete phase K13: CashBook UI
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:43:24 +01:00
beo3000
3a9e891174
K13: add CashBook UI page + entry dialog
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:42:55 +01:00
beo3000
14b76d39a9
Complete phase K12: Fluxor CashBookState
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:36:03 +01:00
beo3000
e74fb07711
K12: add Fluxor CashBookState
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:35:28 +01:00
beo3000
6917fa6bed
K11: add Fluxor CategoryState
...
- CategoryState: categories list, loading, error
- CategoryActions: CRUD + select/clear
- CategoryReducers: state transitions
- CategoryEffects: async service calls
2026-01-03 15:05:29 +01:00
beo3000
595c92df76
K10: create penalty entries on day close
...
- ICashBookService.CreatePenaltyEntriesForDayAsync
- Groups PersonExpenses by person, sums amounts
- Marks PersonExpenses as Done
- DayService calls after SaveChanges
2026-01-03 15:00:42 +01:00
beo3000
21c3d03c61
K9: seed system categories on club creation
...
- EnsureSystemCategoriesAsync accepts optional clubId
- ClubService calls seeder after GIF seeding
2026-01-03 14:56:50 +01:00
beo3000
2c09cfa991
K8: add cashbook service implementations
...
- BookingCategoryService: CRUD + EnsureSystemCategoriesAsync
- CashBookService: entries, balance, reports, membership fees
- CashBookMappingProfile: entity to DTO mappings
- DI registration for both services
2026-01-03 14:53:48 +01:00
beo3000
1a7ba8837d
K7: add cashbook service interfaces
...
- IBookingCategoryService: CRUD + EnsureSystemCategories
- ICashBookService: entries, balance, report, membership fees
2026-01-03 14:45:07 +01:00
beo3000
96c5b4d196
K6: add cashbook DTOs
...
- BookingCategoryDto, CreateBookingCategoryDto, UpdateBookingCategoryDto
- CashBookEntryDto, CreateCashBookEntryDto, UpdateCashBookEntryDto
- CashBookReportDto, CategorySummaryDto, CreateMembershipFeesDto
2026-01-03 14:39:40 +01:00