L4: Modul-Fenster auf Avalonia - Funktionsgleichheit mit der WinForms-Shell

Die drei Modul-Fenster sind portiert; die Avalonia-Shell zeigt jetzt
dieselben sieben Ansichten wie die WinForms-Shell.

- CongressTradingWindow: Kennzahlen als Kacheln, manueller Scrape-Ausloeser,
  offene Positionen des Moduls.
- SupervisorWindow: Analyse mit Live-Anzeige der Tool-Aufrufe, Dossier-
  Browser mit Splitter, Berichte, Hinweise. Der Hinweistext nennt jetzt die
  Betriebszeitzone, weil die Tagesbericht-Stunde in ihr gilt und nicht in
  der Zeitzone des Rechners.
- AccountingWindow: gemeinsame Filterleiste, Uebersicht/BWA, Ledger, Steuer
  (Platzhalter), Export und Abruf/Status.

Ersetzte WinForms-Bausteine:
- SaveFileDialog -> IStorageProvider.SaveFilePickerAsync (asynchron, anderer
  Zuschnitt). Betrifft die drei Exporte des Accounting-Moduls.
- MessageBox bei Fehlern -> Statuszeile im Fenster. Ein modaler Dialog fuer
  einen fehlgeschlagenen Ladevorgang war ohnehin zu laut.
- Anonyme Typen an DataGridView.DataSource -> benannte Records. Kompilierte
  Bindings pruefen die Spalten dadurch beim Kompilieren; ein Tippfehler in
  einer Spaltendefinition (Binding="{Binding Profile}}") ist beim Build
  aufgefallen statt im Betrieb.

Accounting-Betraege werden beim Laden gegen InvariantCulture formatiert, das
Delta eines Ingest-Laufs ist nullable behandelt (ohne Saldo-Anker gibt es
keins) - vorher waere dort eine NullReferenceException moeglich gewesen.

CI-Matrix (Gitea Actions, Actions-kompatibel): ubuntu-latest und
windows-latest. Sie ist der Waechter gegen Rueckfaelle - ein neues
DateTime.Now, ein ToString ohne Formatanbieter oder eine WinForms-Referenz
im Core faellt auf dem Entwicklungsrechner nicht auf, hier schon. Der
Linux-Lauf baut bewusst NICHT die ganze Mappe, weil IBKRTrader.App
(net10.0-windows) dort nicht baubar ist; die Aufzaehlung entfaellt, sobald
die WinForms-Shell aus dem Build genommen wird.

Der Smoke-UI-Lauf ist Teil der CI - mit Avalonia braucht er kein
Anzeigegeraet mehr (SetupWithoutStarting). Mit WinForms war das auf einem
Build-Server nicht moeglich.

Verifiziert: Build 0 Fehler/0 Warnungen, 193 Tests gruen, Smoke-UI
konstruiert alle 7 Ansichten + Launcher + Dialog, publish -r linux-x64
liefert 32 MB mit ELF-Launcher. Die WinForms-Shell ist unveraendert
lauffaehig.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-08-07 10:25:54 +02:00
co-authored by Claude Opus 5
parent afae3c9c4a
commit 3513a0b2d9
9 changed files with 1026 additions and 6 deletions
+73
View File
@@ -0,0 +1,73 @@
# Build- und Testlauf auf beiden Zielplattformen.
#
# Zweck: Die Portierung ist nur so lange etwas wert, wie sie nicht wieder zurückschleicht. Ein
# neues DateTime.Now, ein ToString("N2") ohne Formatanbieter oder eine WinForms-Referenz im Core
# fallen auf dem Windows-Entwicklungsrechner nicht auf hier schon.
#
# Gitea Actions ist Actions-kompatibel; unter GitHub läuft dieselbe Datei als .github/workflows/.
name: Build & Test
on:
push:
branches: [main, 'feat/**']
pull_request:
branches: [main]
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
# Windows: die gesamte Projektmappe, inklusive der alten WinForms-Shell.
- name: Build (Windows, gesamte Mappe)
if: matrix.os == 'windows-latest'
run: |
dotnet build IBKRTrader.slnx -c Release
dotnet test IBKRTrader.slnx --no-build -c Release --logger "trx;LogFileName=test-results.trx"
# Linux: alles AUSSER IBKRTrader.App (WinForms, net10.0-windows) das lässt sich hier
# naturgemäß nicht bauen. Diese Aufzählung entfällt, sobald die WinForms-Shell aus dem
# Build genommen wird; dann baut auch hier wieder die ganze Mappe.
- name: Build (Linux, plattformneutrale Projekte)
if: matrix.os == 'ubuntu-latest'
run: |
dotnet build src/IBKRTrader.App.Avalonia -c Release
dotnet build src/IBKRTrader.Daemon -c Release
dotnet test tests/IBKRTrader.Tests -c Release --logger "trx;LogFileName=test-results.trx"
# Die Konstruktionsprüfung der Oberfläche braucht mit Avalonia KEIN Anzeigegerät mehr
# (SetupWithoutStarting). Mit WinForms war das auf einem Build-Server nicht möglich.
- name: Smoke-UI (Fenster-Konstruktion)
run: dotnet run --project src/IBKRTrader.App.Avalonia --no-build -c Release -- --smoke-ui
# Trockenlauf des kopflosen Dienstes: Host bauen, Startprüfungen fahren, nichts starten.
- name: Daemon-Prüflauf
run: dotnet run --project src/IBKRTrader.Daemon --no-build -c Release -- --check
# Der eigentliche Portierungs-Wächter: läuft nur unter Linux und schlägt fehl, sobald ein
# Projekt wieder eine Windows-Abhängigkeit hereinzieht.
- name: Linux-Publish (Daemon + Oberfläche)
if: matrix.os == 'ubuntu-latest'
run: |
dotnet publish src/IBKRTrader.Daemon -c Release -r linux-x64 --self-contained false -o out/daemon
dotnet publish src/IBKRTrader.App.Avalonia -c Release -r linux-x64 --self-contained false -o out/gui
- name: Testergebnisse sichern
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-${{ matrix.os }}
path: '**/test-results.trx'
if-no-files-found: ignore