diff --git a/Core/Calculation/TeamScheduler.cs b/Core/Calculation/TeamScheduler.cs index 61489eb..36fb6a9 100644 --- a/Core/Calculation/TeamScheduler.cs +++ b/Core/Calculation/TeamScheduler.cs @@ -14,9 +14,9 @@ public class TeamScheduler private readonly List> _scheduleSeparateTeams = []; - public TeamScheduler(Team[] teams, int numTimeSlots) + public TeamScheduler(IEnumerable teams, int numTimeSlots) { - _teamObjects = teams; + _teamObjects = teams.ToArray(); _studentObjects = teams.SelectMany(t => t.Students).Distinct().ToList(); _students = Enumerable.Range(0, _studentObjects.Count).ToArray(); @@ -31,7 +31,7 @@ public class TeamScheduler _scheduleSeparateTeams.Add(Tuple.Create(one,two)); } - public static TeamScheduler CreateInstance(Team[] teams, int numTimeSlots) + public static TeamScheduler CreateInstance(IEnumerable teams, int numTimeSlots) { return new TeamScheduler(teams, numTimeSlots); } diff --git a/DataBackup/ChapterOrganizer.db b/DataBackup/ChapterOrganizer.db index 5e640cc..96a1cad 100644 Binary files a/DataBackup/ChapterOrganizer.db and b/DataBackup/ChapterOrganizer.db differ diff --git a/WebApp/Components/Pages/EventAttributes.razor b/WebApp/Components/Pages/EventAttributes.razor index a21343a..ee579b1 100644 --- a/WebApp/Components/Pages/EventAttributes.razor +++ b/WebApp/Components/Pages/EventAttributes.razor @@ -1,5 +1,5 @@ @using WebApp.Models - +@* @AppIcons.LevelOfEffortIcon(EventDefinition.LevelOfEffort) @if(EventDefinition.EventFormat == EventFormat.Individual) { @@ -7,7 +7,7 @@ } @if (EventDefinition.OnSiteActivity) { - @AppIcons.OnSiteActivity + @AppIcons.OnSiteActivity } @if (EventDefinition.RegionalEvent) @@ -18,6 +18,28 @@ @if (EventDefinition.Presubmission) { @AppIcons.PresubmissionEvent +} *@ + + +@AppIcons.LevelOfEffortIcon(EventDefinition.LevelOfEffort) + +@if (EventDefinition.EventFormat == EventFormat.Individual) +{ + @AppIcons.IndividualEvent +} +@if (EventDefinition.OnSiteActivity) +{ + @AppIcons.OnSiteActivity +} + +@if (EventDefinition.RegionalEvent) +{ + @AppIcons.RegionalEvent +} + +@if (EventDefinition.Presubmission) +{ + @AppIcons.PresubmissionEvent } diff --git a/WebApp/Components/Pages/MeetingSchedulePages/Scheduler.razor b/WebApp/Components/Pages/MeetingSchedulePages/Scheduler.razor index 71c6a39..3a1aed9 100644 --- a/WebApp/Components/Pages/MeetingSchedulePages/Scheduler.razor +++ b/WebApp/Components/Pages/MeetingSchedulePages/Scheduler.razor @@ -15,129 +15,9 @@ - @foreach (var evt in _options) - { - - - - - - - - - - - - - - e.FirstName))"> - @evt.Team.ToString() - - - } - @* - - - - - - - - - - - - - Event Count - - - - - - - - - - LOE - - - - - - - - Assignment Requirements - - - - - - - - @item.Student.FirstName - @item.EventDefinition.ShortName - @if (item.Requirement == Requirement.Include) - { - - } - @if (item.Requirement == Requirement.Exclude) - { - - } - - - - - - Two Team Events - - - - - - - @item.ShortName - - - - - Omitted Events - - - - - - - @item.ShortName - - - *@ + + Require Regionals + Solve @@ -188,17 +68,16 @@ private TeamSchedulerSolution _solution; private TeamSchedulerOptions _parameters; bool _isSolving = false; + private HashSet _requiredTeams = []; - public class TeamOptions + private void RequireRegionals() { - public Team Team { get; set; } - public bool Require { get; set; } = false; - public bool Omit { get; set; } = false; - public bool Extend { get; set; } = false; + foreach (var team in _teams.Where(e => e.Event.RegionalEvent)) + { + _requiredTeams.Add(team); + } } - private TeamOptions[]? _options; - protected override async Task OnInitializedAsync() { _parameters = @@ -246,11 +125,6 @@ .Include(e => e.EventRankings) .ThenInclude(e => e.EventDefinition) .OrderBy(e => e.FirstName).ToArrayAsync(); - - _options = _teams - .Select(e => new TeamOptions { Team = e }) - .ToArray(); - } private async Task> SolveSchedule(TableState arg1, CancellationToken arg2) @@ -259,12 +133,9 @@ - var mustIncludeTeams = _teams; - mustIncludeTeams = mustIncludeTeams.Where(t => t.Event.EventFormat != EventFormat.Individual).ToArray(); - mustIncludeTeams = mustIncludeTeams.Where(t => !t.ToString().Contains("#1")).ToArray(); - //mustIncludeTeams = mustIncludeTeams.Where(t => !t.ToString().Contains("Photo")).ToArray(); + var requiredTeams = _teams; - var teamScheduler = new TeamScheduler(mustIncludeTeams, 3); + var teamScheduler = new TeamScheduler(_requiredTeams, _parameters.TimeSlots); // teamScheduler // .ScheduleSeparate( diff --git a/WebApp/Components/Pages/StudentPages/EventRanking.razor b/WebApp/Components/Pages/StudentPages/EventRanking.razor index a05d8fe..fce0c36 100644 --- a/WebApp/Components/Pages/StudentPages/EventRanking.razor +++ b/WebApp/Components/Pages/StudentPages/EventRanking.razor @@ -64,9 +64,7 @@ else @if (st != null) { @st.EventDefinition.ShortName  - @if(st.EventDefinition.EventFormat == EventFormat.Individual) { } - @if(st.EventDefinition.RegionalEvent) {} - @if(st.EventDefinition.OnSiteActivity) {} + } diff --git a/WebApp/Components/Pages/TeamPages/Assignment.razor b/WebApp/Components/Pages/TeamPages/Assignment.razor index 4027efa..6a27f4f 100644 --- a/WebApp/Components/Pages/TeamPages/Assignment.razor +++ b/WebApp/Components/Pages/TeamPages/Assignment.razor @@ -4,6 +4,7 @@ @using WebApp.Models @using EventAssignment = Core.Calculation.EventAssignment @inject AppDbContext Context +@inject IDialogService DialogService @inject NavigationManager NavigationManager Event Assignment - TSA Chapter Organizer @@ -238,7 +239,7 @@ - TimeSlots + Teams @@ -254,7 +255,7 @@ } @context.Event.Name  - @AppIcons.EventEffort(context.Event) @AppIcons.EventAttributes(context.Event) + @@ -444,11 +445,19 @@ public async Task SaveTeams() { - var teams = await Context.Teams.ExecuteDeleteAsync(); + var result = await DialogService + .ShowMessageBox("Save Teams", + (MarkupString)$"Are you sure want to save these teams? Current teams will be erased. This cannot be undone.", + yesText: "Yes", + noText: "Cancel"); - await Context.Teams.AddRangeAsync(_teams); - await Context.SaveChangesAsync(); + if (result == true) + { + await Context.Teams.ExecuteDeleteAsync(); + await Context.Teams.AddRangeAsync(_teams); + await Context.SaveChangesAsync(); - NavigationManager.NavigateTo("/teams"); + NavigationManager.NavigateTo("/teams"); + } } } \ No newline at end of file diff --git a/WebApp/Components/Pages/TeamPages/Edit.razor b/WebApp/Components/Pages/TeamPages/Edit.razor index 5786be1..ed0a37e 100644 --- a/WebApp/Components/Pages/TeamPages/Edit.razor +++ b/WebApp/Components/Pages/TeamPages/Edit.razor @@ -31,7 +31,15 @@ else @student.Name } - + + Captain + + @foreach (var student in _selectedStudents.OrderBy(e => e.FirstName)) + { + + } + + diff --git a/WebApp/Components/Pages/TeamPages/Index.razor b/WebApp/Components/Pages/TeamPages/Index.razor index 2a60a83..e82c347 100644 --- a/WebApp/Components/Pages/TeamPages/Index.razor +++ b/WebApp/Components/Pages/TeamPages/Index.razor @@ -1,6 +1,5 @@ @page "/teams" @using Microsoft.EntityFrameworkCore -@using WebApp.Models @inject AppDbContext Context @inject IDialogService DialogService @inject ISnackbar Snackbar @@ -31,11 +30,6 @@ - @* - - @context.Item.Grade (@context.Item.TsaYear) - - *@ - + diff --git a/WebApp/Components/Pages/TeamPages/Printout.razor b/WebApp/Components/Pages/TeamPages/Printout.razor index daf3f83..0757dca 100644 --- a/WebApp/Components/Pages/TeamPages/Printout.razor +++ b/WebApp/Components/Pages/TeamPages/Printout.razor @@ -33,14 +33,14 @@ else @context.ToString() - @AppIcons.EventEffort(context.Event) - @AppIcons.EventAttributes(context.Event) + @{ var students = context.Students - .OrderBy(s => s.EventRankings.Find(e => e.EventDefinition == context.Event)?.Rank ?? int.MaxValue) + .OrderByDescending(s => s == context.Captain) + .ThenBy(s => s.EventRankings.Find(e => e.EventDefinition == context.Event)?.Rank ?? int.MaxValue) .ThenByDescending(e => e.Grade) .ThenBy(e => e.FirstName) .ToArray(); @@ -54,8 +54,8 @@ else var rank = student.EventRankings .Find(e => e.EventDefinition == context.Event)?.Rank ?? int.MaxValue; - - @student.Name + + @student.Name @if(context?.Captain == student) { (Cpt)} } else @@ -117,10 +117,9 @@ else { var rank = context.EventRankings .Find(e => e.EventDefinition == team.Event)?.Rank ?? int.MaxValue; - + @team.ToString() - @AppIcons.EventEffort(team.Event) - @AppIcons.EventAttributes(team.Event) + @if (rank == int.MaxValue) { @@ -181,7 +180,7 @@ else @{ var rank = context.EventRankings .Find(e => e.EventDefinition == team.Event)?.Rank ?? int.MaxValue; } - + @team.ToString() @AppIcons.EventEffort(team.Event) @AppIcons.EventAttributes(team.Event) @@ -205,6 +204,14 @@ else private Team[]? _teams; private int _maxTeamSize; private Student[]? _students; + private bool _rankColorEnabled; + + private string EventRankClass(int rank) + { + if (!_rankColorEnabled) + return ""; + return "event-rank-" + rank; + } protected override async Task OnInitializedAsync() { diff --git a/WebApp/Components/Pages/TeamPages/TeamStudents.razor b/WebApp/Components/Pages/TeamPages/TeamStudents.razor index ab8fd5b..5910eb1 100644 --- a/WebApp/Components/Pages/TeamPages/TeamStudents.razor +++ b/WebApp/Components/Pages/TeamPages/TeamStudents.razor @@ -16,7 +16,7 @@ @student.FirstName @if (captain) { - * + (Cpt) } } diff --git a/WebApp/Components/Pages/TeamSelector.razor b/WebApp/Components/Pages/TeamSelector.razor new file mode 100644 index 0000000..022efe0 --- /dev/null +++ b/WebApp/Components/Pages/TeamSelector.razor @@ -0,0 +1,18 @@ + + + @foreach (var evt in Teams.OrderBy(e => e.ToString())) + { + @evt.ToString() + } + + +@code { + [Parameter] public Team[]? Teams { get; set; } + [Parameter] public required IEnumerable SelectedTeams { get; set; } + [Parameter] public string Label { get; set; } = "Teams"; +}