Fix for team comparison in UnassignedStudentScheduler
This commit is contained in:
@@ -69,7 +69,7 @@ public class UnassignedStudentScheduler
|
|||||||
private IEnumerable<Team> GetAvailableTeams_BiggestGroup(
|
private IEnumerable<Team> GetAvailableTeams_BiggestGroup(
|
||||||
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
||||||
_teams
|
_teams
|
||||||
.Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier))
|
.Where(t => scheduledTeams.All(st => st.Id != t.Id))
|
||||||
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
||||||
.Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual
|
.Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual
|
||||||
//.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name))
|
//.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name))
|
||||||
@@ -80,7 +80,7 @@ public class UnassignedStudentScheduler
|
|||||||
private IEnumerable<Team> GetAvailableTeams_Individual(
|
private IEnumerable<Team> GetAvailableTeams_Individual(
|
||||||
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
||||||
_teams
|
_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)
|
.Where(t => t.Event.EventFormat == EventFormat.Individual || t.Students.Count == 1)
|
||||||
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
||||||
.Where(t => t.Students.Count > 0);
|
.Where(t => t.Students.Count > 0);
|
||||||
@@ -89,7 +89,7 @@ public class UnassignedStudentScheduler
|
|||||||
private IEnumerable<Team> GetAvailableTeams_AnyNotMeetingAlready(
|
private IEnumerable<Team> GetAvailableTeams_AnyNotMeetingAlready(
|
||||||
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
||||||
_teams
|
_teams
|
||||||
.Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier))
|
.Where(t => scheduledTeams.All(st => st.Id != t.Id))
|
||||||
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
||||||
.Where(t => t.Students.Count > 0);
|
.Where(t => t.Students.Count > 0);
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ public class UnassignedStudentScheduler
|
|||||||
private IEnumerable<Team> GetAvailableTeams_LevelOfEffort(
|
private IEnumerable<Team> GetAvailableTeams_LevelOfEffort(
|
||||||
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
IEnumerable<Team> scheduledTeams, IEnumerable<Student> assignedStudents) =>
|
||||||
_teams
|
_teams
|
||||||
.Where(t => scheduledTeams.All(st => st.Identifier != t.Identifier))
|
.Where(t => scheduledTeams.All(st => st.Id != t.Id))
|
||||||
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
.Select(t => t.CloneWithOmittedStudents(assignedStudents))
|
||||||
.Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual
|
.Where(t => t.Students.Count > 1) //|| t.Event.EventFormat is EventFormat.Individual
|
||||||
//.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name))
|
//.OrderBy(t => scheduledTeams.Count(st => st.Name == t.Name))
|
||||||
|
|||||||
@@ -49,10 +49,10 @@ public class Team
|
|||||||
var studentsToOmitList = studentsToOmit.ToList();
|
var studentsToOmitList = studentsToOmit.ToList();
|
||||||
var omittedStudents = Students.Where(studentsToOmitList.Contains).ToList();
|
var omittedStudents = Students.Where(studentsToOmitList.Contains).ToList();
|
||||||
if (omittedStudents.Count == 0)
|
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();
|
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([]);
|
public Team Clone() => CloneWithOmittedStudents([]);
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
<MudButton OnClick="() => RemoveIndividual()">Remove Individual</MudButton>
|
<MudButton OnClick="() => RemoveIndividual()">Remove Individual</MudButton>
|
||||||
<MudButton OnClick="() => RemoveLowLevelOfEffort()">Remove Low Effort</MudButton>
|
<MudButton OnClick="() => RemoveLowLevelOfEffort()">Remove Low Effort</MudButton>
|
||||||
|
<MudButton OnClick="() => Invert()">Invert</MudButton>
|
||||||
|
|
||||||
<MudItem>@string.Join(", ", (_possibleAdditions ?? []).Select(e => e.ToString()))</MudItem>
|
<MudItem>@string.Join(", ", (_possibleAdditions ?? []).Select(e => e.ToString()))</MudItem>
|
||||||
|
|
||||||
@@ -54,7 +55,7 @@
|
|||||||
</HeaderContent>
|
</HeaderContent>
|
||||||
<RowTemplate>
|
<RowTemplate>
|
||||||
<MudTd>
|
<MudTd>
|
||||||
<MudItem>Time slot: @context</MudItem>
|
|
||||||
@{
|
@{
|
||||||
var ol = TeamSchedulerSolution.GetStudentTeamOverlaps(context);
|
var ol = TeamSchedulerSolution.GetStudentTeamOverlaps(context);
|
||||||
}
|
}
|
||||||
@@ -62,7 +63,7 @@
|
|||||||
{
|
{
|
||||||
<MudItem>
|
<MudItem>
|
||||||
@t.ToString() -
|
@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)) ? "*" : "")))
|
||||||
</MudItem>
|
</MudItem>
|
||||||
}
|
}
|
||||||
@* @foreach (var overlap in ol)
|
@* @foreach (var overlap in ol)
|
||||||
@@ -70,6 +71,7 @@
|
|||||||
<MudItem>
|
<MudItem>
|
||||||
@string.Join(", ", overlap.Item1)
|
@string.Join(", ", overlap.Item1)
|
||||||
</MudItem>
|
</MudItem>
|
||||||
|
</MudItem>
|
||||||
} *@
|
} *@
|
||||||
|
|
||||||
@{ var unscheduled = TeamSchedulerSolution.GetStudentsNotInTimSlot(context, _students); }
|
@{ var unscheduled = TeamSchedulerSolution.GetStudentsNotInTimSlot(context, _students); }
|
||||||
@@ -134,6 +136,13 @@
|
|||||||
= _requiredTeams.Where(t => t.Event.LevelOfEffort > 1);
|
= _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()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
_parameters =
|
_parameters =
|
||||||
|
|||||||
Reference in New Issue
Block a user