Team schedule improvements

This commit is contained in:
2025-10-17 07:58:14 -04:00
parent 551688f6fe
commit 3964a61794
11 changed files with 99 additions and 172 deletions
@@ -4,6 +4,7 @@
@using WebApp.Models
@using EventAssignment = Core.Calculation.EventAssignment
@inject AppDbContext Context
@inject IDialogService DialogService
@inject NavigationManager NavigationManager
<PageTitle>Event Assignment - TSA Chapter Organizer</PageTitle>
@@ -238,7 +239,7 @@
</MudTable>
</MudItem>
<MudItem xs="12" lg="4">
<MudText Typo="Typo.h4">TimeSlots</MudText>
<MudText Typo="Typo.h4">Teams</MudText>
<MudTable T="Team" ServerData="SolveAssignments" @ref="_teamData">
<ColGroup>
<col style="width: 200px;" />
@@ -254,7 +255,7 @@
}
<MudTd>
<b>@context.Event.Name</b>&nbsp;
<span>@AppIcons.EventEffort(context.Event) @AppIcons.EventAttributes(context.Event)</span>
<EventAttributes EventDefinition="context.Event"></EventAttributes>
</MudTd>
<MudTd Style="white-space:nowrap">
@@ -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");
}
}
}
+9 -1
View File
@@ -31,7 +31,15 @@ else
<MudSelectItem T="Student" Value="@student">@student.Name</MudSelectItem>
}
</MudSelect>
<MudTextField T="Student" Label="Captain" @bind-Value="Team.Captain" For="@(() => Team.Captain)" Required="false" Clearable="true"></MudTextField>
<MudStack>
<MudText>Captain</MudText>
<MudToggleGroup T="Student" SelectionMode="SelectionMode.ToggleSelection" @bind-Value="Team.Captain" CheckMark>
@foreach (var student in _selectedStudents.OrderBy(e => e.FirstName))
{
<MudToggleItem Value="@(student)" Text="@student.Name" />
}
</MudToggleGroup>
</MudStack>
<MudTextField T="string?" Label="Identifier" @bind-Value="Team.Identifier" For="@(() => Team.Identifier)" Required="false" Clearable="true"></MudTextField>
</MudPaper>
</MudItem>
@@ -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 @@
<TeamStudents Team="@context.Item"></TeamStudents>
</CellTemplate>
</TemplateColumn>
@* <TemplateColumn Title="Grade (TSA Year)" SortBy="e => e.Grade" Sortable="true">
<CellTemplate>
@context.Item.Grade (@context.Item.TsaYear)
</CellTemplate>
</TemplateColumn> *@
<TemplateColumn>
<CellTemplate>
<CrudActions
@@ -47,7 +41,7 @@
</TemplateColumn>
</Columns>
<PagerContent>
<MudDataGridPager T="Student"></MudDataGridPager>
<MudDataGridPager T="Team"></MudDataGridPager>
</PagerContent>
</MudDataGrid>
@@ -33,14 +33,14 @@ else
@context.ToString()
</MudTd>
<MudTd>
@AppIcons.EventEffort(context.Event)
@AppIcons.EventAttributes(context.Event)
<EventAttributes EventDefinition="context.Event"></EventAttributes>
</MudTd>
@{
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;
<MudTd Class="@($"event-rank-{rank}")">
@student.Name
<MudTd Class="@(EventRankClass(rank))">
@student.Name @if(context?.Captain == student) {<span> (Cpt)</span>}
</MudTd>
}
else
@@ -117,10 +117,9 @@ else
{
var rank = context.EventRankings
.Find(e => e.EventDefinition == team.Event)?.Rank ?? int.MaxValue;
<MudTh Class="@($"event-rank-{rank}")">
<MudTh Class="@(EventRankClass(rank))">
@team.ToString()
@AppIcons.EventEffort(team.Event)
@AppIcons.EventAttributes(team.Event)
<EventAttributes EventDefinition="team.Event"></EventAttributes>
@if (rank == int.MaxValue)
{
@@ -181,7 +180,7 @@ else
<RowTemplate>
@{ var rank = context.EventRankings
.Find(e => e.EventDefinition == team.Event)?.Rank ?? int.MaxValue; }
<MudTd Class="@($"event-rank-{rank}")">
<MudTd Class="@(EventRankClass(rank))">
@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()
{
@@ -16,7 +16,7 @@
@student.FirstName
@if (captain)
{
<span> *</span>
<span> (Cpt)</span>
}
</MudPaper>
}