feat: Untis-Hub für WebUntis-Sync-Gesundheitsstatus
CI / build-and-test (push) Canceled after 0s

Zeigt die Fälligkeit der vier bestehenden, manuell ausgelösten WebUntis-Abgleiche
(Fehlzeiten je Lerngruppe, offene Stunden, Klassenbuch-, Hausaufgabenabgleich) in
einem neuen Hub-Fenster, ohne selbst WebUntis anzufragen - nur gespeicherte
Zeitstempel werden ausgewertet. Konsolidiert die bisher verstreuten Einstiegspunkte
(Sidebar-Button, Dashboard-Buttons) in ein neues WebUntis-Menü plus einen
kompakten Gesundheits-Indikator auf dem Dashboard.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 23:41:12 +02:00
co-authored by Claude Sonnet 5
parent bd0d7e47ea
commit ba52109eaa
20 changed files with 660 additions and 44 deletions
+28
View File
@@ -1995,6 +1995,34 @@ Hausaufgabe selbst (`Lesson.Homework`), das bleibt ein offener, separater Punkt.
gemockt, `WebUntisLessonAbsenceComparisonViewModel`/`WebUntisDocumentationComparisonViewModel`
haben aus demselben Grund ebenfalls keine Tests.
**Nachtrag zu 4.3, Untis-Hub (September 2026):** Nutzer-Feedback: die vier bestehenden WebUntis-
Abgleiche (Fehlzeiten je Lerngruppe, offene Stunden, Klassenbuch-, Hausaufgabenabgleich) liefen
bislang alle rein manuell und ohne jede Übersicht, wann welcher zuletzt lief — bei bewusst fehlendem
Caching (s.o.) besteht sonst das Risiko, denselben Bericht aus Unsicherheit zu oft abzurufen ("bei
WebUntis auffallen").
- Neuer `UntisHubService` ([LehrerApp.Desktop/Services/UntisHubService.cs](LehrerApp.Desktop/Services/UntisHubService.cs))
verwaltet nur Fälligkeits-Zeitstempel (`UntisHubJobState`, LiteDB-Collection
`untis_hub_job_states`) — **kein** eigener WebUntis-Zugriff, reine Lesefunktion aus der
lokalen DB. Der Fehlzeitenabgleich bekommt zwei Kadenzen je Lerngruppe mit gesetzter
`WebUntisLessonId` (kurzfristig alle 14 Tage/fällig, 21 Tage/überfällig; langfristig seit
Schuljahresbeginn alle 60/90 Tage), die drei dashboard-weiten Abgleiche je 14/21 Tage.
- `UntisHubActions` ([LehrerApp.Desktop/Services/UntisHubActions.cs](LehrerApp.Desktop/Services/UntisHubActions.cs))
führt die vier bestehenden Vergleichsdialoge unverändert aus und erkennt nicht-invasiv (über den
`Busy`-Übergang der jeweiligen ViewModels) einen tatsächlichen Ladeversuch, um danach den
Fälligkeitsstand zu aktualisieren — egal ob über den Hub oder das Menü ausgelöst.
- Neues Fenster `UntisHubDialog` ([LehrerApp.Desktop/Views/UntisHub/](LehrerApp.Desktop/Views/UntisHub/))
zeigt alle Job-Zeilen tabellarisch (Bereich, Prüfung, Fälligkeit, letztes Ergebnis, "Jetzt
prüfen") — rein manuell, keine automatischen Hintergrund-Requests.
- **Einstiegspunkte konsolidiert:** Nutzer wollte keine weiteren Einzelfunktionen in der Sidebar.
`MainWindow` bekam dafür ihre erste klassische Menüleiste (bisher gab es keine) mit Menüpunkt
"WebUntis" (Untis-Hub, Offene Stunden, Klassenbuchabgleich, Hausaufgabenabgleich); der bisherige
Sidebar-Eintrag "Offene Untis-Stunden" sowie die beiden Dashboard-Buttons "Klassenbuch
abgleichen…"/"Fehlende Hausaufgaben abgleichen…" (siehe Nachtrag oben) sind dafür entfallen.
Auf dem Dashboard bleibt statt der Buttons nur noch ein kompakter Status-Badge ("WebUntis ✓" /
"WebUntis ⚠ N fällig", nur sichtbar wenn WebUntis konfiguriert ist), der den Hub öffnet.
Der Fehlzeitenabgleich-Button in der einzelnen Lerngruppe (`GroupDetailView`) blieb unverändert,
da kontextgebunden.
### 4.4 Wochen-/Tagesansicht
- [x] **4.4.1** Kalenderansicht über alle Gruppen: Woche und Tag — siehe Nachtrag zu 4.3
("Heute"-Tab: Tagesliste unten angedockt, gruppenübergreifendes Wochenraster darüber, inkl.