WIP (unstable): Klassenlehrer-Feature auf Einstellungen/eigenen Bereich umgestellt
Nutzer-Feedback: Klassenlehrer ist eine Rolle für die ganze Klasse, unabhängig vom eigenen Unterricht - die Anbindung an ein LearningGroup.IsClassTeacher-Flag mit Tab in der Gruppendetailansicht war deshalb der falsche Ort. Ersetzt durch: - Klassenauswahl in den WebUntis-Einstellungen (WebUntisSettingsService.HomeroomClassName), über den bestehenden WebUntis-Klassenpicker. - Eigener Sidebar-Bereich "Klassenlehrer" statt Gruppen-Tab. - Zwei Ebenen: kompakte Roster-Übersicht mit Ampel-Symbolen (Fehlzeiten heute, Klassenbuch-Badge) und Details (die bisherigen Rohdaten-Listen, jetzt gefiltert auf einzelne Schüler*innen anspringbar). Noch nicht mit echtem WebUntis-Zugang gegengeprüft (siehe TODO.md). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
using LehrerApp.Desktop.Services;
|
||||
using LehrerApp.Desktop.ViewModels.Groups;
|
||||
using LehrerApp.Desktop.ViewModels.ClassTeacher;
|
||||
using Xunit;
|
||||
|
||||
namespace LehrerApp.Desktop.Tests;
|
||||
@@ -62,4 +62,48 @@ public sealed class ClassTeacherViewModelsTests
|
||||
Assert.Equal(new DateOnly(2026, 8, 25), rows[0].Date);
|
||||
Assert.Equal(new DateOnly(2026, 8, 24), rows[1].Date);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RosterBuild_OrdnetFehlzeitPerExternKeyUndKlassenbuchPerNameZu()
|
||||
{
|
||||
var students = new[]
|
||||
{
|
||||
Student(1001, "Ada Müller"),
|
||||
Student(1002, "Ben Schmidt"),
|
||||
Student(1003, "Cem Yilmaz"),
|
||||
};
|
||||
var todayAbsences = new[]
|
||||
{
|
||||
new ClassAbsenceDaySummaryRow(new DateOnly(2026, 8, 25), "Ada Müller", 1001, 2, 90,
|
||||
["Che"], [3, 4], ["nicht entsch."], ["Absent"], null, null, false),
|
||||
};
|
||||
var recentClassRegister = new[]
|
||||
{
|
||||
new UntisForeignClassRegisterEventDto("6a", 20260824, "Deu", "Ben Schmidt", "mueller",
|
||||
"Vergessen", "Organisation", "Buch vergessen"),
|
||||
};
|
||||
|
||||
var roster = ClassTeacherRosterRow.Build(students, todayAbsences, recentClassRegister);
|
||||
|
||||
Assert.Equal(3, roster.Count);
|
||||
var ada = Assert.Single(roster, r => r.StudentName == "Ada Müller");
|
||||
Assert.True(ada.HasAbsenceToday);
|
||||
Assert.Contains("nicht entsch.", ada.AbsenceTooltip);
|
||||
Assert.False(ada.HasRecentClassRegisterEntry);
|
||||
|
||||
var ben = Assert.Single(roster, r => r.StudentName == "Ben Schmidt");
|
||||
Assert.False(ben.HasAbsenceToday);
|
||||
Assert.True(ben.HasRecentClassRegisterEntry);
|
||||
|
||||
var cem = Assert.Single(roster, r => r.StudentName == "Cem Yilmaz");
|
||||
Assert.False(cem.HasAbsenceToday);
|
||||
Assert.False(cem.HasRecentClassRegisterEntry);
|
||||
}
|
||||
|
||||
private static UntisStudentDto Student(int externKey, string displayName) => new(
|
||||
UntisId: externKey, ExternKey: externKey, ClassName: "6a", Name: displayName, LongName: null,
|
||||
ForeName: null, DisplayName: displayName, Gender: null, BirthDate: null, BirthDateRaw: null,
|
||||
EntryDate: null, EntryDateRaw: null, ExitDate: null, ExitDateRaw: null, Text: null,
|
||||
MedicalReportDuty: null, Schulpflicht: null, Majority: null,
|
||||
Address: new UntisStudentAddressDto(null, null, null, null, null, null), AttributeIL: null);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user