From 5708d846d195e6bb37904874dc0fdecf64468700 Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Wed, 22 Oct 2025 09:42:44 -0400 Subject: [PATCH] Fix for team comparison in UnassignedStudentScheduler --- Core/Calculation/UnassignedStudentScheduler.cs | 8 ++++---- Core/Entities/Team.cs | 4 ++-- .../Pages/MeetingSchedulePages/Index.razor | 13 +++++++++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Core/Calculation/UnassignedStudentScheduler.cs b/Core/Calculation/UnassignedStudentScheduler.cs index f4981d4..ff1f2e0 100644 --- a/Core/Calculation/UnassignedStudentScheduler.cs +++ b/Core/Calculation/UnassignedStudentScheduler.cs @@ -69,7 +69,7 @@ public class UnassignedStudentScheduler private IEnumerable GetAvailableTeams_BiggestGroup( IEnumerable scheduledTeams, IEnumerable assignedStudents) => _teams - .Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier)) + .Where(t => scheduledTeams.All(st => st.Id != t.Id)) .Select(t => t.CloneWithOmittedStudents(assignedStudents)) .Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual //.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name)) @@ -80,7 +80,7 @@ public class UnassignedStudentScheduler private IEnumerable GetAvailableTeams_Individual( IEnumerable scheduledTeams, IEnumerable assignedStudents) => _teams - .Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier)) + .Where(t => scheduledTeams.All(st => st.Id != t.Id)) .Where(t => t.Event.EventFormat == EventFormat.Individual || t.Students.Count == 1) .Select(t => t.CloneWithOmittedStudents(assignedStudents)) .Where(t => t.Students.Count > 0); @@ -89,7 +89,7 @@ public class UnassignedStudentScheduler private IEnumerable GetAvailableTeams_AnyNotMeetingAlready( IEnumerable scheduledTeams, IEnumerable assignedStudents) => _teams - .Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier)) + .Where(t => scheduledTeams.All(st => st.Id != t.Id)) .Select(t => t.CloneWithOmittedStudents(assignedStudents)) .Where(t => t.Students.Count > 0); @@ -104,7 +104,7 @@ public class UnassignedStudentScheduler private IEnumerable GetAvailableTeams_LevelOfEffort( IEnumerable scheduledTeams, IEnumerable assignedStudents) => _teams - .Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier)) + .Where(t => scheduledTeams.All(st => st.Id != t.Id)) .Select(t => t.CloneWithOmittedStudents(assignedStudents)) .Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual //.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name)) diff --git a/Core/Entities/Team.cs b/Core/Entities/Team.cs index 9a32561..2424d19 100644 --- a/Core/Entities/Team.cs +++ b/Core/Entities/Team.cs @@ -49,10 +49,10 @@ public class Team var studentsToOmitList = studentsToOmit.ToList(); var omittedStudents = Students.Where(studentsToOmitList.Contains).ToList(); if (omittedStudents.Count == 0) - return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), Identifier = Identifier}; + return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), Identifier = Identifier, Id = Id}; var remainingStudents = Students.Where(s => !studentsToOmitList.Contains(s)).ToList(); - return new PartialTeam { Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents}; + return new PartialTeam { Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents, Identifier = Identifier, Id = Id}; } public Team Clone() => CloneWithOmittedStudents([]); diff --git a/WebApp/Components/Pages/MeetingSchedulePages/Index.razor b/WebApp/Components/Pages/MeetingSchedulePages/Index.razor index 9edb193..5588d3b 100644 --- a/WebApp/Components/Pages/MeetingSchedulePages/Index.razor +++ b/WebApp/Components/Pages/MeetingSchedulePages/Index.razor @@ -21,6 +21,7 @@ Remove Individual Remove Low Effort + Invert @string.Join(", ", (_possibleAdditions ?? []).Select(e => e.ToString())) @@ -54,7 +55,7 @@ - Time slot: @context + @{ var ol = TeamSchedulerSolution.GetStudentTeamOverlaps(context); } @@ -62,7 +63,7 @@ { @t.ToString() - - @string.Join(", ", t.Students.Select(s => s.FirstName + " " + (ol.Any(o => o.Item1.Equals(s)) ? "*" : ""))) + @string.Join(", ", t.Students.Select(s => s.FirstName + (ol.Any(o => o.Item1.Equals(s)) ? "*" : ""))) } @* @foreach (var overlap in ol) @@ -70,6 +71,7 @@ @string.Join(", ", overlap.Item1) + } *@ @{ var unscheduled = TeamSchedulerSolution.GetStudentsNotInTimSlot(context, _students); } @@ -134,6 +136,13 @@ = _requiredTeams.Where(t => t.Event.LevelOfEffort > 1); } + private async Task Invert() + { + var rt = _requiredTeams.ToArray(); + _requiredTeams + = _teams.Where(t => !rt.Contains(t)); + } + protected override async Task OnInitializedAsync() { _parameters =