Fix: doppelte Mitarbeits-Sitzung durch Unterrichtsmodus-Instanz
EnsureTodaySession() prüfte nur den lokalen Instanz-Zustand, nicht das Repository. Da der Unterrichtsmodus eine eigene, per DI frisch aufgelöste SeatingPlanTabViewModel-Instanz nutzt (getrennt vom Sitzplan-Tab der Kursübersicht), legte eine spätere Bewertung im normalen Tab eine zweite, unverknüpfte Sitzung für denselben Tag an, statt die bereits über den Unterrichtsmodus verknüpfte zu erkennen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -93,14 +93,37 @@ public partial class SeatingPlanTabViewModel : ObservableObject
|
||||
/// Legt bei Bedarf die "Sitzung für heute" an, mit der Sitzplan-Bewertungen/-Markierungen
|
||||
/// verknüpft werden — aber erst, wenn tatsächlich etwas bewertet/markiert wird (AssessStudent/
|
||||
/// ToggleSituationTag), nicht schon beim Öffnen des Tabs.
|
||||
///
|
||||
/// Prüft dabei bewusst gegen das Repository und nicht nur gegen das lokal geladene
|
||||
/// <see cref="TodaySessions"/> / <see cref="SelectedSession"/>: Der Unterrichtsmodus
|
||||
/// (<see cref="SelectOrCreateSessionForLesson"/>) läuft auf einer eigenen, per DI frisch
|
||||
/// aufgelösten <see cref="SeatingPlanTabViewModel"/>-Instanz (siehe TimetableView.ShowTeachingMode),
|
||||
/// getrennt von der Instanz, die im Sitzplan-Tab der Kursübersicht hängt. Eine dort bereits
|
||||
/// heute angelegte (ggf. verknüpfte) Sitzung ist dieser Instanz also unbekannt, solange sie nur
|
||||
/// im lokalen Feld nachschaut — das führte dazu, dass eine zweite, unverknüpfte "Sitzplan"-
|
||||
/// Sitzung für denselben Tag entstand, sobald im echten Sitzplan-Tab bewertet wurde.
|
||||
private ParticipationSessionOption? EnsureTodaySession()
|
||||
{
|
||||
if (SelectedSession is not null) return SelectedSession;
|
||||
if (!IsEditable) return null;
|
||||
|
||||
var today = DateOnly.FromDateTime(DateTime.Today);
|
||||
var existing = _sessions.GetByGroup(_groupId).FirstOrDefault(s => s.Date == today);
|
||||
if (existing is not null)
|
||||
{
|
||||
var found = TodaySessions.FirstOrDefault(o => o.Id == existing.Id);
|
||||
if (found is null)
|
||||
{
|
||||
found = new ParticipationSessionOption(existing);
|
||||
TodaySessions.Add(found);
|
||||
}
|
||||
SelectedSession = found;
|
||||
return found;
|
||||
}
|
||||
|
||||
var created = new ParticipationSession
|
||||
{
|
||||
GroupId = _groupId, Date = DateOnly.FromDateTime(DateTime.Today), Comment = "Sitzplan",
|
||||
GroupId = _groupId, Date = today, Comment = "Sitzplan",
|
||||
};
|
||||
_sessions.Save(created);
|
||||
var option = new ParticipationSessionOption(created);
|
||||
|
||||
Reference in New Issue
Block a user