Punkteeingabe & Korrektur für Klausuren (1.4)

Neuer Dialog ExamGradingDialog, erreichbar über "Punkte eingeben" im
Klausuren-Tab (Button + Kontextmenü bei ausgewählter Klausur):

- Eingaberaster: Schüler-Zeilen × Aufgaben-Spalten, Summe und Note live
  über GradingService.CalculateGrade() berechnet.
- Tab bewegt sich nativ zur nächsten Zelle; Enter/Pfeil-Hoch/Pfeil-Runter
  springen zur gleichen Spalte in der Nachbarzeile (auch über noch nicht
  realisierte, virtualisierte Zeilen hinweg via ScrollIntoView). Komma
  oder Punkt als Dezimaltrennzeichen werden beide akzeptiert.
- Abwesend-Checkbox (Note zeigt dann "abwesend") und Kommentarfeld pro
  Schüler.
- Punkte außerhalb 0..Maximalpunkte werden rot markiert und bewusst
  nicht gespeichert; der zuletzt gültige Stand bleibt erhalten.
- Autosave nach jeder Zelle, kein Speichern-Button nötig.

Dabei nebenbei behoben: die Schülerliste berücksichtigt jetzt Enrollment-
Zeiträume (H1/H2/Custom) relativ zum Klausurdatum, analog zur bereits
bestehenden Logik im Mitarbeit-Tab, statt pauschal alle im Schuljahr
eingeschriebenen Schüler zu zeigen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 00:52:30 +02:00
co-authored by Claude Sonnet 5
parent 3fc506adc1
commit 725de3813f
7 changed files with 411 additions and 7 deletions
+12 -7
View File
@@ -60,14 +60,19 @@ Modelle `Exam`, `ExamTask`, `GradingKeyEntry`, `ExamResult` existieren bereits i
(`GradingService.ValidateGradingKey`).
### 1.4 Punkteeingabe & Korrektur
- [ ] **1.4.1** Eingaberaster: Zeilen = Schüler, Spalten = Aufgaben, letzte Spalte Summe + Note.
- [x] **1.4.1** Eingaberaster: Zeilen = Schüler, Spalten = Aufgaben, letzte Spalte Summe + Note.
Note wird live über `GradingService.CalculateGrade()` berechnet.
- [ ] **1.4.2** Tastaturnavigation analog zum Mitarbeit-Dialog: Tab/Enter = nächstes Feld,
Pfeiltasten, direkte Zifferneingabe, halbe Punkte (0,5) erlaubt.
- [ ] **1.4.3** Kennzeichnung "Abwesend" (`ExamResult.Absent`) — Schüler aus Statistik ausschließen.
- [ ] **1.4.4** Kommentarfeld pro Schüler (`ExamResult.Comment`).
- [ ] **1.4.5** Validierung: Punkte > Maximalpunkte der Aufgabe wird rot markiert und nicht gespeichert.
- [ ] **1.4.6** Autosave nach jeder Zelle (kein expliziter Speichern-Button nötig).
Umgesetzt als eigener Dialog `ExamGradingDialog`, erreichbar über "Punkte eingeben"
im Klausuren-Tab (Button/Kontextmenü bei ausgewählter Klausur).
- [x] **1.4.2** Tastaturnavigation: Tab bewegt sich nativ zur nächsten Zelle, Enter/Pfeil-Hoch/
Pfeil-Runter springen zur gleichen Spalte in der Nachbarzeile, direkte Zifferneingabe
und halbe Punkte (Komma oder Punkt) erlaubt.
- [x] **1.4.3** Kennzeichnung "Abwesend" (`ExamResult.Absent`) per Checkbox — Note zeigt "abwesend"
statt einer berechneten Note. Ausschluss aus Statistiken folgt mit 1.5 (noch nicht umgesetzt).
- [x] **1.4.4** Kommentarfeld pro Schüler (`ExamResult.Comment`).
- [x] **1.4.5** Validierung: Punkte < 0 oder > Maximalpunkte der Aufgabe wird rot markiert und nicht
gespeichert (`PointsCell.TrySetValue`).
- [x] **1.4.6** Autosave nach jeder Zelle (kein expliziter Speichern-Button nötig).
### 1.5 Klausurauswertung
- [ ] **1.5.1** Notenspiegel (Häufigkeitsverteilung als Balken), Durchschnitt, Median,