Commit Graph

207 Commits

Author SHA1 Message Date
beo3000 310cc0e2ec layout optimization for tablets 2026-01-09 10:59:15 +01:00
beo3000 325bf5b002 added manifest and icons 2026-01-09 09:54:43 +01:00
beo3000 6c0cb35842 fix gif import 2026-01-08 21:27:56 +01:00
beo3000 40db3d08c0 added new gif event 2026-01-08 21:02:44 +01:00
beo3000 65c18f4f51 added christmasTree additional End Option:
ChristmasTreeGameSetup.cs
  - Neues Enum GameEndCondition mit AllFivesGone (Standard) und TreeCleared
  - Property EndCondition zum Setup hinzugefügt

  ChristmasTreeGameModel.cs
  - Property EndCondition hinzugefügt

  ChristmasTreeGameLogicService.cs
  - Neue Methode CheckGameEndCondition() prüft je nach Einstellung
  - Neue Methode CheckAnyTreeCleared() prüft ob ein Team alle Zahlen gestrichen hat
  - Alle 3 Stellen wo Spielende geprüft wird nutzen jetzt die flexible Methode

  ChristmasTreeSetup.razor
  - Neues Dropdown "Spielende" mit zwei Optionen:
    - "Alle 5er gestrichen" (Standard)
    - "Ein Baum komplett leer"
  - Hilfstexte erklären die jeweilige Bedingung
2026-01-08 18:58:28 +01:00
beo3000 56f3e63046 fix ChristmaTree: Select Number Action 2026-01-08 18:44:37 +01:00
beo3000 383db346eb ui fixes 2026-01-08 18:00:42 +01:00
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 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 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 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