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()));