diff --git a/WebApp/Components/Pages/MeetingSchedulePages/Index.razor b/WebApp/Components/Pages/MeetingSchedulePages/Index.razor
index edef468..4adc53e 100644
--- a/WebApp/Components/Pages/MeetingSchedulePages/Index.razor
+++ b/WebApp/Components/Pages/MeetingSchedulePages/Index.razor
@@ -79,6 +79,7 @@
@foreach (var student in team.Students)
{
var overlap = context.StudentHasOverlaps(student);
+ var isAbsent = _absentStudents.Contains(student);
var color = overlap ? Color.Warning : Color.Default;
@if(!first) {, }
@@ -86,7 +87,7 @@
- @student.FirstName@(overlap ? "*" : "")
+ @student.FirstName@(overlap ? "*" : "")@(isAbsent ? " (absent)" : "")
}
@@ -101,8 +102,9 @@
@foreach (var student in context.UnscheduledStudents)
{
+ var isAbsent = _absentStudents.Contains(student);
- @student.FirstName
+ @student.FirstName@(isAbsent ? " (absent)" : "")
@{var first = true;}
@foreach (var unassignedTeam in _solution.StudentUnassignedTeams(student))
{
@@ -150,6 +152,22 @@
}
+
+
+
+ Absent Students
+
+ @foreach (var student in _students.OrderBy(e => e.FirstName))
+ {
+
+ @student.FirstNameLastName
+
+ }
+
@@ -158,12 +176,13 @@
@code {
private Team[]? _teams;
- private Student[]? _students; // TODO: Add absent student functionality
+ private Student[]? _students;
MudTable _solutionData;
private TeamSchedulerSolution _solution;
private TeamSchedulerOptions _parameters;
bool _isSolving;
private IEnumerable _scheduledTeams = [];
+ private IEnumerable _absentStudents = [];
private IEnumerable _possibleAdditions = [];
private async Task AddRegionals()
@@ -264,7 +283,13 @@
{
_isSolving = true;
- var teamScheduler = new TeamScheduler(_scheduledTeams, _parameters.TimeSlots, _students);
+ // Filter out absent students
+ var availableStudents = _students.Where(s => !_absentStudents.Contains(s)).ToArray();
+
+ // Update parameters with absent student names
+ _parameters.AbsentStudents = _absentStudents.Select(s => s.FirstNameLastName).ToArray();
+
+ var teamScheduler = new TeamScheduler(_scheduledTeams, _parameters.TimeSlots, availableStudents);
_solution = teamScheduler.Solve();
var loe = new UnassignedStudentScheduler(_teams, _solution.TimeSlots).ScheduleStrategy(UnassignedScheduleStrategy.LevelOfEffort);
@@ -306,7 +331,7 @@
scheduledTeam.Students
.OrderBy(e => e == scheduledTeam.Captain)
.ThenBy(e => e.FirstName)
- .Select(e => e.FirstName + (timeslot.StudentHasOverlaps(e) ? "*" : "")));
+ .Select(e => e.FirstName + (timeslot.StudentHasOverlaps(e) ? "*" : "") + (_absentStudents.Contains(e) ? " (absent)" : "")));
if (scheduledTeam.Event.EventFormat is EventFormat.Individual)
sb.Append(t);
@@ -321,7 +346,7 @@
sb.Append(Environment.NewLine);
foreach (var student in timeslot.UnscheduledStudents)
{
- var s = student.FirstName;
+ var s = student.FirstName + (_absentStudents.Contains(student) ? " (absent)" : "");
var unassignedTeams = _solution.StudentUnassignedTeams(student);
var t = string.Join(", ", unassignedTeams.Select(e => e.ToString()));