feat: Abwesenheits-Hinweise, Fehlquote bei Zeugnisnoten, Gruppen-Dokumentation
- Schnellbewerten-Dialog: abwesende Schüler werden gedimmt und mit ihrem Anwesenheitsstatus statt der Aspektbeschriftung angezeigt, damit keine Mitarbeitsnote für nicht anwesende Schüler vergeben wird. - Zeugnisnoten-Dialog: zeigt je Schüler die Fehlquote im gewählten Zeitraum, ab 50 % hervorgehoben (informativ, keine automatische Notenänderung). - Gruppen-Tab "Dokumentation" (bisher Platzhalter) implementiert: listet alle Dokumentationseinträge der Gruppen-Schüler, mit Schüler-Filter und optionalem "Nur dieser Unterricht"-Schalter. Einträge aus anderen Lerngruppen werden standardmäßig mitangezeigt, aber gedimmt. Der Dokumentationsdialog bekommt dafür einen optionalen Schüler-Picker. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -15,14 +15,15 @@ public class ReportGradeCalculationTests
|
||||
|
||||
private static ReportGradeDialogViewModel BuildViewModel(
|
||||
FakeGrades grades, FakeSchemes schemes, FakeReportGrades reportGrades,
|
||||
FakeExams exams, FakeResults results)
|
||||
FakeExams exams, FakeResults results, FakeSessions? sessions = null, FakeEntries? entries = null)
|
||||
{
|
||||
var students = new FakeStudents([Anna, Ben]);
|
||||
var memberships = new FakeMemberships([]);
|
||||
var grading = new GradingService();
|
||||
|
||||
return new ReportGradeDialogViewModel(grades, exams, results, students, memberships,
|
||||
schemes, reportGrades, grading, GroupId, GroupType.Class, GradingSystem.Grades1To6,
|
||||
schemes, reportGrades, sessions ?? new FakeSessions([]), entries ?? new FakeEntries(),
|
||||
new AttendanceBalanceService(), grading, GroupId, GroupType.Class, GradingSystem.Grades1To6,
|
||||
"Testgruppe", "2025/26");
|
||||
}
|
||||
|
||||
@@ -68,6 +69,28 @@ public class ReportGradeCalculationTests
|
||||
Assert.Equal("–", ben.CalculatedDisplay);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AbsenceRatePercent_BerechnetFehlquoteAusSitzungenDieserGruppeImZeitraum()
|
||||
{
|
||||
var (_, _, exams, results) = BuildExams();
|
||||
var session1 = new ParticipationSession { GroupId = GroupId, Date = new DateOnly(2025, 9, 5) };
|
||||
var session2 = new ParticipationSession { GroupId = GroupId, Date = new DateOnly(2025, 9, 12) };
|
||||
var sessions = new FakeSessions([session1, session2]);
|
||||
var entries = new FakeEntries();
|
||||
entries.Add(new ParticipationEntry { SessionId = session1.Id, StudentId = Anna.Id, Attendance = AttendanceStatus.Present });
|
||||
entries.Add(new ParticipationEntry { SessionId = session2.Id, StudentId = Anna.Id, Attendance = AttendanceStatus.Unexcused });
|
||||
|
||||
var vm = BuildViewModel(new FakeGrades(), new FakeSchemes(), new FakeReportGrades(), exams, results,
|
||||
sessions, entries);
|
||||
|
||||
var anna = vm.Rows.Single(r => r.StudentId == Anna.Id);
|
||||
Assert.Equal(50.0, anna.AbsenceRatePercent);
|
||||
Assert.True(anna.HasHighAbsenceRate);
|
||||
var ben = vm.Rows.Single(r => r.StudentId == Ben.Id);
|
||||
Assert.Equal(0.0, ben.AbsenceRatePercent);
|
||||
Assert.False(ben.HasHighAbsenceRate);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ResolveScheme_BevorzugtGruppenspezifischesSchemaVorVoreinstellung()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user