Add Blazor WebApp and rework data handling to utilize Entity Framework

This commit is contained in:
2025-09-11 11:49:48 -04:00
parent 5220e61c79
commit 3daa3b81b3
111 changed files with 6039 additions and 946 deletions
+20 -18
View File
@@ -1,11 +1,11 @@
@using Core.Entities
@using Core.Utility
@model Tuple<CompetitiveEvent[], Student[], EventStudentPicks[], Team[], AssignmentParameters>
@model Tuple<EventDefinition[], Student[], EventStudentRankings[], Team[], AssignmentParameters>
@{
ViewData["Title"] = "Home Page";
var maxStudentPicks = Model.Item3.MaxBy(picks => picks.StudentPicks.Count).StudentPicks.Count;
var maxStudentPicks = Model.Item3.MaxBy(picks => picks.StudentRankings.Count).StudentRankings.Count;
var parameters = Model.Item5;
var unassignedEvents = Model.Item1.Where(e => Model.Item4.All(t => t.Event != e));
var unassignedEvents = Model.Item1.Where(e => Model.Item4.All(t => t.EventDefinition != e));
}
@@ -27,16 +27,17 @@
{
var assignments
= Model.Item4.Where(ea => ea.Students.Contains(student))
.Select(ea => ea.Event)
.Select(ea => ea.EventDefinition)
.Distinct()
.OrderBy(e =>
@* .OrderBy(e =>
{
var r = student.RankedEventPicks.IndexOf(e);
r = r >= 0 ? r : 10;
//r = r * (4 - e.LevelOfEffort.Value);
return r;
});
}) *@
;
<tr>
<td><strong>@student.FirstName</strong></td>
@@ -44,11 +45,12 @@
@foreach (var evt in assignments)
{
var h = student.RankedEventPicks.IndexOf(evt) + 1;
<td class="@{ GetOrderClass(h); }">
@* var h = student.RankedEventPicks.IndexOf(evt) + 1; *@
@* @{ class="GetOrderClass(h);" } *@
<td class="">
@evt.ShortName @Html.Partial("EffortStarsPartial", evt.LevelOfEffort)
@{
if (evt.Format == EventFormat.Individual)
if (evt.EventFormat == EventFormat.Individual)
{
<sup class="activity">(ind)</sup>
}
@@ -74,9 +76,9 @@
<thead>
<tr><td>Teams</td></tr>
</thead>
@foreach (var evt in Model.Item1.OrderByDescending(e => e.Format is EventFormat.Team))
@foreach (var evt in Model.Item1.OrderByDescending(e => e.EventFormat is EventFormat.Team))
{
var assignments = Model.Item4.FirstOrDefault(i => i.Event == evt);
var assignments = Model.Item4.FirstOrDefault(i => i.EventDefinition == evt);
@if (assignments == null)
{
continue;
@@ -86,7 +88,7 @@
<td class="table-primary"><strong>@evt.Name</strong></td>
<td colspan="1">
@Html.Partial("EffortStarsPartial", evt.LevelOfEffort)
@if (evt.Format is EventFormat.Individual)
@if (evt.EventFormat is EventFormat.Individual)
{
<text>(ind)</text>
}
@@ -120,7 +122,7 @@
@{
var unassigned = string.Join(", ", unassignedEvents.Select(e => e.Name));
}
<td colspan="8">Unassigned Events: @unassigned</td>
<td colspan="8">Unassigned EventDefinitions: @unassigned</td>
</tr>
</table>
@@ -151,7 +153,7 @@
continue;
<td class="@{ GetOrderClass(h); }">
@evt.ShortName @Html.Partial("EffortStarsPartial", evt.LevelOfEffort)
@if (evt.Format == EventFormat.Individual)
@if (evt.EventFormat == EventFormat.Individual)
{
<sup class="activity">(ind)</sup>
}
@@ -171,11 +173,11 @@
<table>
<thead>
<tr><td>Event</td><td>Level of Effort</td><td>Individual</td><td>Regional</td><td>On-site Activity</td><td>Team Size</td><td>Max Team Count</td></tr>
<tr><td>EventDefinition</td><td>Level of Effort</td><td>Individual</td><td>Regional</td><td>On-site Activity</td><td>Team Size</td><td>Max Team Count</td></tr>
</thead>
@foreach (var evt in Model.Item1)
{
var esp = Model.Item3.FirstOrDefault(i => i.Event == evt);
var esp = Model.Item3.FirstOrDefault(i => i.EventDefinition == evt);
<tr>
<td>
@@ -183,7 +185,7 @@
</td>
<td>@Html.Partial("EffortStarsPartial", evt.LevelOfEffort)</td>
<td>@if (evt.Format is EventFormat.Individual) { <text>ind</text> }</td>
<td>@if (evt.EventFormat is EventFormat.Individual) { <text>ind</text> }</td>
<td>@if (evt.RegionalEvent) { <text>reg</text> }</td>
<td>@if (evt.OnSiteActivity) { <text>act</text> }</td>
<td style="nowrap">@evt.TeamSize</td>
@@ -191,7 +193,7 @@
@for (var i = 0; i < maxStudentPicks; i++)
{
var d = esp?.StudentPicks.Skip(i).FirstOrDefault();
var d = esp?.StudentRankings.Skip(i).FirstOrDefault();
<td class="@{GetOrderClass(d?.Item2 ?? int.MaxValue);}">@d?.Item1.FirstName</td>
}
</tr>