aufräumen

This commit is contained in:
2026-08-12 17:45:02 +02:00
parent 0823a023c9
commit a1e722ace1
27 changed files with 542 additions and 197 deletions
@@ -15,7 +15,7 @@ public partial class ParticipationTabViewModel : ObservableObject
private readonly IParticipationRepository _entries;
private readonly IParticipationAspectRepository _aspects;
private readonly IStudentRepository _students;
private readonly IEnrollmentRepository _enrollments;
private readonly IGroupMembershipRepository _memberships;
private readonly IGroupRepository _groups;
private readonly ICompetencyDomainRepository _competencyDomains;
@@ -53,13 +53,13 @@ public partial class ParticipationTabViewModel : ObservableObject
IParticipationRepository entries,
IParticipationAspectRepository aspects,
IStudentRepository students,
IEnrollmentRepository enrollments,
IGroupMembershipRepository memberships,
IGroupRepository groups,
ICompetencyDomainRepository competencyDomains)
{
_sessions = sessions; _entries = entries;
_aspects = aspects; _students = students;
_enrollments = enrollments; _groups = groups;
_memberships = memberships; _groups = groups;
_competencyDomains = competencyDomains;
}
@@ -128,18 +128,18 @@ public partial class ParticipationTabViewModel : ObservableObject
StudentRows.Clear();
var session = _sessions.GetById(sessionId);
var sessionDate = session?.Date ?? DateOnly.FromDateTime(DateTime.Today);
var students = _students.GetByGroup(_groupId, _schoolYear);
var enrollments = _enrollments.GetByGroupAndYear(_groupId, _schoolYear);
var students = _students.GetByGroup(_groupId);
var memberships = _memberships.GetByGroup(_groupId);
var entries = _entries.GetBySession(sessionId);
foreach (var s in students)
{
var enrollment = enrollments.FirstOrDefault(e => e.StudentId == s.Id);
if (enrollment is not null && !IsEnrolledAtDate(enrollment, sessionDate))
var membership = memberships.FirstOrDefault(e => e.StudentId == s.Id);
if (membership is not null && !IsMemberAtDate(membership, sessionDate))
continue;
var entry = entries.FirstOrDefault(e => e.StudentId == s.Id)
?? new ParticipationEntry { SessionId = sessionId, GroupId = _groupId, StudentId = s.Id };
?? new ParticipationEntry { SessionId = sessionId, StudentId = s.Id };
var row = new ParticipationStudentRow(s.Id, s.FullName, entry, Aspects.ToList(), ActiveCompetencyCodes);
row.OnRatingChanged = (sid, key, val) => SaveRating(sessionId, sid, key, val);
row.OnCompetencyRatingChanged = (sid, code, val) => SaveCompetencyRating(sessionId, sid, code, val);
@@ -149,25 +149,22 @@ public partial class ParticipationTabViewModel : ObservableObject
RebuildColumnsSignal++;
}
private static bool IsEnrolledAtDate(Enrollment e, DateOnly date) => e.Period switch
private static bool IsMemberAtDate(GroupMembership membership, DateOnly date) => membership.Period switch
{
EnrollmentPeriod.H1Only => date.Month >= 8 || date.Month <= 1,
EnrollmentPeriod.H2Only => date.Month >= 2 && date.Month <= 7,
EnrollmentPeriod.Custom => (e.JoinedAt is null || date >= e.JoinedAt.Value)
&& (e.LeftAt is null || date <= e.LeftAt.Value),
MembershipPeriod.H1Only => date.Month >= 8 || date.Month <= 1,
MembershipPeriod.H2Only => date.Month >= 2 && date.Month <= 7,
MembershipPeriod.Custom => (membership.JoinedAt is null || date >= membership.JoinedAt.Value)
&& (membership.LeftAt is null || date <= membership.LeftAt.Value),
_ => true,
};
private void SaveRating(Guid sessionId, Guid studentId, string key, int? value)
{
var session = _sessions.GetById(sessionId);
var entry = _entries.GetBySessionAndStudent(sessionId, studentId)
var entry = _entries.GetBySessionAndStudent(sessionId, studentId)
?? new ParticipationEntry
{
SessionId = sessionId,
GroupId = _groupId,
StudentId = studentId,
Date = session?.Date ?? DateOnly.FromDateTime(DateTime.Today),
};
var existing = entry.Ratings.FirstOrDefault(r => r.Key == key);
@@ -280,14 +277,11 @@ public partial class ParticipationTabViewModel : ObservableObject
private void SaveCompetencyRating(Guid sessionId, Guid studentId, string code, int? value)
{
var session = _sessions.GetById(sessionId);
var entry = _entries.GetBySessionAndStudent(sessionId, studentId)
var entry = _entries.GetBySessionAndStudent(sessionId, studentId)
?? new ParticipationEntry
{
SessionId = sessionId,
GroupId = _groupId,
StudentId = studentId,
Date = session?.Date ?? DateOnly.FromDateTime(DateTime.Today),
};
var existing = entry.CompetencyRatings.FirstOrDefault(r => r.Code == code);
if (value is null)