Klausuren-Hauptseite: gruppenübergreifende Liste mit Prioritäts-Score statt Datum

Sidebar-Klausuren war bisher ein Placeholder. Neue Seite zeigt alle Klausuren des
Schuljahres sortiert nach abgeleiteter Dringlichkeit (Korrekturfortschritt statt
manuellem Status), mit Detailbereich, Parallelkurs-Umschalter und Notenspiegel.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-29 01:27:18 +02:00
co-authored by Claude Sonnet 5
parent 9b04d7eb98
commit 7fbf035cbb
16 changed files with 950 additions and 6 deletions
+42
View File
@@ -96,6 +96,48 @@ pragmatisch über "Abwesend" bei den übrigen Schülern statt über eine eigene
- [x] **1.5.4** Export der Auswertung — CSV-Export direkt im Dialog; inzwischen auf die gemeinsame
Export-Infrastruktur aus 11.1 und den zentralen `CsvBuilder` umgestellt.
### 1.6 Klausuren-Hauptseite (gruppenübergreifend)
Der Sidebar-Punkt "Klausuren" (`NavItem.Exams`) war bisher ein `PlaceholderViewModel` ohne
Funktion — die vollständige Verwaltung existierte nur innerhalb einer Gruppe (1.11.5). Nutzer
unterrichten oft mehrere Kurse gleichzeitig und brauchen einen gruppenübergreifenden Überblick.
- [x] **1.6.1** Neue Seite `ExamsOverviewViewModel`/`ExamsOverviewView` ersetzt den Placeholder.
Detailbereich zur ausgewählten Klausur oben (ca. 5560 % Höhe), darunter eine scrollbare
Liste aller Klausuren des aktuellen Schuljahres — bewusst kein separates Menü, sondern
Bestandteil derselben Seite (Nutzerwunsch: "keine eigene Hauptseite in dem Ausmaß").
- [x] **1.6.2** Sortierung nach unsichtbarem Prioritäts-Score statt nach Datum — neuer Service
`ExamPriorityService` (`LehrerApp.Core/Services/ExamPriorityService.cs`) leitet Status
(`ExamListStatus`: Planned/AwaitingCorrection/CorrectionInProgress/CorrectionStuck/
AwaitingReturn/Returned) und Score aus dem vorhandenen `Exam.Status` plus dem
Korrekturfortschritt ab — kein neuer, manuell zu pflegender "Korrektur läuft"-Status.
Der Korrekturfortschritt selbst kommt aus `ExamCorrectionCounter` (ebenda), das auch
`DashboardViewModel.LoadOpenCorrections` jetzt nutzt (vorher zwei Kopien derselben Zählung).
Farbcodierung wiederverwendet die validierten `AppStatus{Ok,Info,Warning,Danger}Brush`
aus `Styles/SemanticBrushes.axaml` (Klassenlehrer-Bereich) statt neuer Hex-Werte.
- [x] **1.6.3** Nutzer-Feedback zum "hängt fest"-Fall: ein einzelner Schüler, der nie
nachschreibt, blockierte sonst dauerhaft die live abgeleitete Korrektur-Erkennung, weil
niemand eine leere Zeile anfasst, für die es nichts einzutragen gibt. Zwei Bausteine statt
eines manuellen Override: (a) neuer Button "Rest als abwesend markieren" im
`ExamGradingDialog` setzt bei allen noch unberührten Zeilen "Abwesend" in einem Klick;
(b) bleibt eine Klausur trotzdem länger als `ExamPriorityService.StuckAfterDays` (21 Tage)
in Bearbeitung hängen, fällt sie aus der dringenden Zone in eine ruhige
`CorrectionStuck`-Einstufung statt dauerhaft oben zu kleben.
- [x] **1.6.4** Parallelkurse (gleiche Arbeit, mehrere Kurse — z.B. zwei Chemie-Kurse im selben
Jahrgang): neues optionales Feld `Exam.SharedExamGroupId`, beim Duplizieren (1.1.4) auf die
Id der Ursprungsklausur gesetzt. Die Klausuren-Hauptseite zeigt dafür einen Kurs-Umschalter
im Detailbereich; Zeilen mit Verknüpfung tragen ein 🔗-Symbol in der Liste.
- [x] **1.6.5** Zwei neue nullable Datumsfelder `Exam.ApprovalGrantedAt`/`AnnouncedAt`
("Genehmigung erteilt"/"Ankündigung bei Schülern gemacht", Label verhandelbar) — bewusst
keine weiteren Workflow-Statusstufen, weil sie zeitlich oft parallel statt sequenziell zum
Hauptstatus laufen. Als anklickbare Zeilen im Detailbereich, die das Datum auf heute setzen
bzw. wieder löschen.
- [x] **1.6.6** Detailbereich zeigt je nach Status Korrekturfortschritt (Balken + Zahl) oder
Notenspiegel (Balken je Note + Durchschnitt, gleiche Berechnung wie 1.5.1 über
`GradingService`/`GradeBarItem`) — kein Kompetenz-Breakdown in dieser Iteration. Button
"Zum Kurs" springt in den Klausuren-Tab der jeweiligen Gruppe (dort wie gehabt Zugriff auf
Kompetenzen-Tab, 8.2/8.3).
---
## 2. Noten & Zeugnisnoten