first commit
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
@model int?
|
||||
@{
|
||||
switch (Model)
|
||||
{
|
||||
case 1:
|
||||
<text>★☆☆</text>
|
||||
break;
|
||||
case 2:
|
||||
<text>★★☆</text>
|
||||
break;
|
||||
case 3:
|
||||
<text>★★★</text>
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
@model int?
|
||||
@{
|
||||
switch (Model)
|
||||
{
|
||||
case 1:
|
||||
<text>☆</text>
|
||||
break;
|
||||
case 2:
|
||||
<text>✯</text>
|
||||
break;
|
||||
case 3:
|
||||
<text>★</text>
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
@using Core.Entities
|
||||
@using Core.Utility
|
||||
@model CompetitiveEvent[]
|
||||
@{
|
||||
ViewData["Title"] = "Events Page";
|
||||
}
|
||||
<div>
|
||||
@foreach (var evt in Model.OrderBy(e => e.Name))
|
||||
{
|
||||
<div class="container nobrk">
|
||||
@if (evt.RegionalEvent)
|
||||
{
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<i>Regional Event</i>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div div class="row">
|
||||
<div class="col-4">
|
||||
<h5>@evt.Name</h5>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
@if (evt.Format is EventFormat.Team)
|
||||
{
|
||||
<html><strong>@evt.Format</strong><br/>Size: <strong>@evt.TeamSize</strong></html>
|
||||
}
|
||||
else
|
||||
{
|
||||
<html>
|
||||
<strong>@evt.Format</strong>
|
||||
</html>
|
||||
}
|
||||
|
||||
</div>
|
||||
<div class="col">
|
||||
Eligibility: @evt.Eligibility
|
||||
</div>
|
||||
<div class="col-1">
|
||||
@Html.Partial("EffortStarsPartial", evt.LevelOfEffort)
|
||||
</div>
|
||||
<div class="col-2">
|
||||
@evt.SemifinalistActivity
|
||||
</div>
|
||||
</div>
|
||||
<div div class="row mt-3">
|
||||
<div class="col">@evt.Description</div></div>
|
||||
@if (!string.IsNullOrEmpty(evt.Theme))
|
||||
{
|
||||
<div div class="row mt-2">
|
||||
<div class="col-3 text-center"><i>Theme for 2024-25:</i></div>
|
||||
<div class="col">@evt.Theme</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (!string.IsNullOrEmpty(evt.Documentation))
|
||||
{
|
||||
<div div class="row mt-2">
|
||||
<div class="col-3 text-center"><i>Materials:</i></div>
|
||||
<div class="col">@evt.Documentation</div>
|
||||
</div>
|
||||
}
|
||||
<hr/>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
@@ -0,0 +1,5 @@
|
||||
@using Core.Entities
|
||||
@using Core.Utility
|
||||
@{
|
||||
ViewData["Title"] = "Home Page";
|
||||
}
|
||||
@@ -0,0 +1,355 @@
|
||||
@using System.Text.RegularExpressions
|
||||
@using Core.Entities
|
||||
@model Tuple<Team[], Student[], IDictionary<CompetitiveEvent, List<EventOccurrence>>>
|
||||
@{
|
||||
ViewData["Title"] = "Teams";
|
||||
var eventOccurrences = Model.Item3;
|
||||
}
|
||||
<div class="container nobrk pt-5">
|
||||
<h2>Nationals Events</h2>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Team</td>
|
||||
<td>Team Members</td>
|
||||
<td>Dates</td>
|
||||
<td>Materials</td>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var team in Model.Item1)
|
||||
{
|
||||
var students = team.Students;
|
||||
@if (true @* team.Event.Format == EventFormat.Team *@)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
@* <strong class="@{ GetTeamClass(team);}">@team.Name</strong> *@
|
||||
@team.Name @* #@team.TeamNumber
|
||||
*@ </td>
|
||||
<td>
|
||||
@{
|
||||
var first = true;
|
||||
}
|
||||
@foreach (var student in students.OrderByDescending(s => (s.Grade + s.TsaYear) * (team.Captain == s ? 2 : 1)).ThenBy(s => s.FirstNameLastName))
|
||||
{
|
||||
@if (!first)
|
||||
{
|
||||
<text>, </text>
|
||||
|
||||
}
|
||||
first = false;
|
||||
@student.FirstNameLastName @if (team.Captain == student)
|
||||
{
|
||||
<text> (Cpt. @team.Captain.NationalID)</text>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
@* @if (team.Event.StatePresubmission)
|
||||
{
|
||||
<text>Pre-submission due Friday, March 14</text>
|
||||
}
|
||||
@if (team.Event.StatePretesting)
|
||||
{
|
||||
<text>Pre-testing Wednesday, April 2nd</text>
|
||||
}
|
||||
@if (team.Event.StatePreliminaryRound)
|
||||
{
|
||||
<text>Preliminary and Semifinalist Rounds</text>
|
||||
} *@
|
||||
</td>
|
||||
<td>
|
||||
@team.Event.Documentation
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
}
|
||||
@* else if (team.Event.Format == EventFormat.Individual)
|
||||
{
|
||||
foreach (var student in students)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
@team.Event.Name - @student.FirstNameLastName (@student.RegionalID)
|
||||
</td>
|
||||
<td>@team.RegionalTimeSlot</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
}
|
||||
} *@
|
||||
}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@{
|
||||
var s = Model.Item2.OrderBy(s => s.LastNameFirstName);
|
||||
|
||||
@foreach (var student in s)
|
||||
{
|
||||
<div class="container nobrk pt-5" style="page-break-before: always;">
|
||||
|
||||
<h3>@student.FirstNameLastName - @student.NationalID</h3>
|
||||
<h4>TSA 2025 Nationals Schedule</h4>
|
||||
<div class="row">
|
||||
<div class="col col-2">Events</div>
|
||||
<div class="col">
|
||||
@foreach (var ev in student.Teams)
|
||||
{
|
||||
<div class="row">
|
||||
|
||||
<div class="col col-2">
|
||||
@if (ev.Event.Format is EventFormat.Team)
|
||||
{
|
||||
@ev.TeamNumber
|
||||
}
|
||||
else
|
||||
{
|
||||
@ev.Captain.NationalID
|
||||
}
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<text> @ev.Name
|
||||
@if (ev.Captain == student)
|
||||
{
|
||||
<strong>(Cpt.)</strong>
|
||||
}
|
||||
</text>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
@ev.Event.SemifinalistActivity
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Time</td>
|
||||
<td>Event</td>
|
||||
<td></td>
|
||||
<td>Location</td>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@foreach (var date in
|
||||
eventOccurrences
|
||||
.Where(eo =>
|
||||
student.Teams.Select(t => t.Event).Any(a => a == eo.Key)
|
||||
|| eo.Key == CompetitiveEvent.GeneralSchedule
|
||||
|| (eo.Key == CompetitiveEvent.VotingDelegates && student.VotingDelegate))
|
||||
.SelectMany(eo => eo.Value.Select(v => Tuple.Create(v, eo.Key)))
|
||||
.GroupBy(de => de.Item1.StartTime.Date)
|
||||
.OrderBy(d => d.Key)
|
||||
)
|
||||
{
|
||||
var eventsForThisDay =
|
||||
date
|
||||
.Where(de => de.Item1.Name != "Judging")
|
||||
.Where(de => de.Item1.StartTime > new DateTime(2024, 3, 1))
|
||||
// filter out occurrences where non-captain
|
||||
.Where(de =>
|
||||
!de.Item1.SignupSubmitPickup
|
||||
|| de.Item2.Format is EventFormat.Individual
|
||||
|| student.Teams.Any(t => t.Captain == student && t.Event == de.Item2)
|
||||
)
|
||||
.OrderBy(de => de.Item1.StartTime);
|
||||
|
||||
@if (!eventsForThisDay.Any())
|
||||
continue;
|
||||
<tr>
|
||||
|
||||
<td colspan="4" class="align-content-center text-center fw-bold">@date.Key.ToString("MMMM d")</td>
|
||||
</tr>
|
||||
@foreach (var eventOccurrence in eventsForThisDay.OrderBy(de => de.Item1.StartTime))
|
||||
{
|
||||
|
||||
string hlClass = null;
|
||||
@if (!eventOccurrence.Item2.Name.Contains("General"))
|
||||
{
|
||||
hlClass = "fw-bold";
|
||||
}
|
||||
|
||||
<tr>
|
||||
<td class="@hlClass" style="white-space:nowrap;">@eventOccurrence.Item1.Time</td>
|
||||
<td class="@hlClass">@eventOccurrence.Item2.Name</td>
|
||||
<td class="@hlClass">
|
||||
@eventOccurrence.Item1.Name
|
||||
@if (eventOccurrence.Item1.Name.Contains("Pick") && eventOccurrence.Item2.Format is EventFormat.Team)
|
||||
{
|
||||
<br/>
|
||||
<text>or coordinate with a teammate</text>
|
||||
}
|
||||
</td>
|
||||
<td>@eventOccurrence.Item1.Location
|
||||
@if (eventOccurrence.Item1.Location == "Online" && eventOccurrence.Item1.Name.Contains("Sign-up") ) { <text>by Advisor</text>}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
|
||||
</table>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
||||
@{
|
||||
<div class="container nobrk pt-5">
|
||||
<h2>Combined Schedule</h2>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Time</td>
|
||||
<td>Team</td>
|
||||
<td></td>
|
||||
<td>Location</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var eventsForDate
|
||||
in Model.Item3.SelectMany(eo => eo.Value.Select(e => Tuple.Create(e, eo.Key)))
|
||||
.Where(de => de.Item1.Name != "Judging")
|
||||
.GroupBy(eo => eo.Item1.StartTime.Date)
|
||||
.OrderBy(eo => eo.Key)
|
||||
)
|
||||
{
|
||||
<tr><td colspan="4"><strong>@eventsForDate.Key.ToString("MMMM d") </strong> </td></tr>
|
||||
@foreach (var occurrence in eventsForDate.OrderBy(o => o.Item1.StartTime))
|
||||
{
|
||||
var teams = Model.Item1.Where(t => t.Event == occurrence.Item2);
|
||||
if (occurrence.Item2 != CompetitiveEvent.GeneralSchedule && occurrence.Item2 != CompetitiveEvent.VotingDelegates && !teams.Any())
|
||||
continue;
|
||||
<tr>
|
||||
<td style="white-space:nowrap;">@occurrence.Item1.Time</td>
|
||||
<td>
|
||||
@if (occurrence.Item2 == CompetitiveEvent.GeneralSchedule)
|
||||
{
|
||||
<text>Everyone</text>
|
||||
}
|
||||
else if (occurrence.Item2 == CompetitiveEvent.VotingDelegates)
|
||||
{
|
||||
<text>Voting Delegates - @string.Join(", ", Model.Item2.Where(stu => stu.VotingDelegate).Select(stu => stu.FirstName))</text>
|
||||
}
|
||||
@foreach (var team in teams)
|
||||
{
|
||||
<text>@team</text>
|
||||
|
||||
|
||||
<text> - @string.Join(", ", team.Students.Select(stu => stu.FirstName))</text>
|
||||
}
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@occurrence.Item1.Name
|
||||
|
||||
@if (occurrence.Item1.SignupSubmitPickup)
|
||||
{
|
||||
<br/>
|
||||
<text>1 Team Member</text>
|
||||
}
|
||||
|
||||
@if (occurrence.Item1.Name.Contains("Semifinalist") && (occurrence.Item1.Name.Contains("Interview") || occurrence.Item1.Name.Contains("Presentation")))
|
||||
{
|
||||
<br/>
|
||||
<text>@Regex.Match(@occurrence.Item2.SemifinalistActivity, @"(?<=\().*?(?=\))").Value</text>
|
||||
}
|
||||
</td>
|
||||
<td>@occurrence.Item1.Location</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
<div class="container nobrk pt-5">
|
||||
<h2>Students</h2>
|
||||
<table class="table-primary">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Student</td>
|
||||
<td>ID</td>
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var student in Model.Item2.OrderByDescending(s => s.Officer.Contains("President")).ThenBy(s => s.LastNameFirstName))
|
||||
{
|
||||
var assignments
|
||||
= student.Teams.Where(ea => ea.Students.Contains(student))
|
||||
|
||||
.Distinct()
|
||||
.OrderBy(e => e.Name).ToList();
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<strong>@student.FirstNameLastName</strong> @if (!string.IsNullOrEmpty(student.Officer))
|
||||
{
|
||||
<text>(@student.Officer)</text>
|
||||
}
|
||||
</td>
|
||||
<td>@student.NationalID</td>
|
||||
|
||||
@foreach (var t in assignments)
|
||||
{
|
||||
<td>
|
||||
@if (t.Event.Format != EventFormat.Individual)
|
||||
{
|
||||
@t.Name
|
||||
@if (t.Captain == student)
|
||||
{
|
||||
<text> (Captain)</text>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@t.Event.Name
|
||||
}
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="container nobrk pt-5">
|
||||
<h2>Students</h2>
|
||||
@foreach (var student in Model.Item2.OrderByDescending(s => s.Officer.Contains("President")).ThenBy(s => s.LastNameFirstName))
|
||||
{
|
||||
var assignments
|
||||
= student.Teams.Where(ea => ea.Students.Contains(student))
|
||||
|
||||
.Distinct()
|
||||
.OrderBy(e => e.Name).ToList();
|
||||
|
||||
<p>
|
||||
<strong>@student.FirstNameLastName</strong>
|
||||
@if (!string.IsNullOrEmpty(student.Officer))
|
||||
{
|
||||
<text>(@student.Officer)</text>
|
||||
}
|
||||
<text>@student.NationalID</text>
|
||||
</p>
|
||||
|
||||
|
||||
@foreach (var t in assignments)
|
||||
{
|
||||
<p>
|
||||
@if (t.Event.Format != EventFormat.Individual)
|
||||
{
|
||||
@t.Name
|
||||
@if (t.Captain == student)
|
||||
{
|
||||
<text> (Captain)</text>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@t.Event.Name
|
||||
}
|
||||
</p>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
@@ -0,0 +1,6 @@
|
||||
@{
|
||||
ViewData["Title"] = "Privacy Policy";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
<p>Use this page to detail your site's privacy policy.</p>
|
||||
@@ -0,0 +1,123 @@
|
||||
@using Core.Entities
|
||||
@using Core.Utility
|
||||
@model Tuple<Team[], Student[]>
|
||||
@{
|
||||
ViewData["Title"] = "Teams";
|
||||
}
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Team</td>
|
||||
@*<td>Time Slot</td>*@
|
||||
<td>Notes</td>
|
||||
<td>Team Members</td>
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var team in Model.Item1.OrderBy(t => t.RegionalTimeSlotObj))
|
||||
{
|
||||
var students = team.Students;
|
||||
@if (team.Event.Format == EventFormat.Team)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
@* <strong class="@{ GetTeamClass(team);}">@team.Name</strong> *@
|
||||
@team.Name #@team.TeamNumber
|
||||
</td>
|
||||
@*<td>
|
||||
@team.RegionalTimeSlot
|
||||
</td>*@
|
||||
<td>
|
||||
@team.Event.RegionalNotes
|
||||
</td>
|
||||
<td>
|
||||
@{
|
||||
var first = true;
|
||||
}
|
||||
@foreach (var student in students.OrderByDescending(s => (s.Grade + s.TsaYear) * (team.Captain == s ? 2 : 1)).ThenBy(s => s.FirstNameLastName))
|
||||
{
|
||||
@if (!first)
|
||||
{
|
||||
<text>, </text>
|
||||
|
||||
}
|
||||
first = false;
|
||||
@student.FirstNameLastName @if (team.Captain == student)
|
||||
{
|
||||
<text> (Cpt.) (@student.RegionalID)</text>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
else if (team.Event.Format == EventFormat.Individual)
|
||||
{
|
||||
foreach (var student in students)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
@team.Event.Name #@student.RegionalID
|
||||
</td>
|
||||
<td>@team.Event.RegionalNotes</td>
|
||||
<td>@student.FirstNameLastName</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
}
|
||||
</table>
|
||||
|
||||
@{
|
||||
var s = Model.Item1.SelectMany(t => t.Students).Distinct().OrderBy(s => s.LastNameFirstName);
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Student</td>
|
||||
<td>Regional ID</td>
|
||||
<td>Team</td>
|
||||
<td>Time Slot</td>
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var student in s)
|
||||
{
|
||||
<tr>
|
||||
<td>@student.FirstNameLastName</td>
|
||||
<td>@student.RegionalID</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
var teams = Model.Item1.Where(t => t.Students.Contains(student));
|
||||
foreach (var team in teams.OrderBy(t => t.RegionalTimeSlotObj))
|
||||
{
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>@team.Name
|
||||
@if (team.Captain == student)
|
||||
{
|
||||
<text>(Cpt.)</text>
|
||||
}
|
||||
</td>
|
||||
<td>@team.Event.RegionalNotes @team.RegionalTimeSlot</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</table>
|
||||
}
|
||||
<p>No regional events: @string.Join(", ", @Model.Item2.Select(s=> s.FirstName))</p>
|
||||
|
||||
@functions
|
||||
{
|
||||
public void GetOrderClass(int pick)
|
||||
{
|
||||
@Html.Raw(LabelHelper.GetOrderClass(pick))
|
||||
}
|
||||
|
||||
private void GetTeamClass(Team team)
|
||||
{
|
||||
if (team.Event.RegionalEvent)
|
||||
{
|
||||
@Html.Raw("regional")
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
@using Core.Entities
|
||||
|
||||
@model Tuple<IList<Team>[], IEnumerable<Student>[], Web.Controllers.HomeController.ScheduleOptions>
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Schedule";
|
||||
var slot = 0;
|
||||
|
||||
var schedule = Model.Item1;
|
||||
var unassignedStudents = Model.Item2;
|
||||
var allStudents = schedule.SelectMany(t => t).SelectMany(t => t.Students).Distinct().ToList();
|
||||
var allMeetingTeams = schedule.SelectMany(t => t).Distinct();
|
||||
}
|
||||
|
||||
<div class="bluewhite p-5">
|
||||
@{
|
||||
List<Tuple<Student, IEnumerable<Team>>> overlaps;
|
||||
}
|
||||
@foreach (var timeslot in schedule)
|
||||
{
|
||||
overlaps = Team.GetStudentTeamOverlaps(timeslot).ToList();
|
||||
var partialTeams = timeslot.Where(t => t is PartialTeam && t.Event.Format is not EventFormat.Individual);
|
||||
var fullTeams = timeslot.Where(t => !partialTeams.Contains(t));
|
||||
|
||||
<h3>Time Slot @(slot + 1)</h3>
|
||||
<p>@Model.Item3.Date.ToShortDateString()</p>
|
||||
|
||||
<h4>Teams</h4>
|
||||
<table class="table schedule">
|
||||
<thead>
|
||||
<th class="col-2"></th>
|
||||
<th class="col-3"></th>
|
||||
<th class="col-5"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var team in fullTeams.Where(t => t.Event.Format is EventFormat.Team).OrderBy(t => t.Name))
|
||||
{
|
||||
@await Html.PartialAsync("ScheduleTeamPartial", Tuple.Create(team, overlaps, Model.Item3.AbsentStudents))
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
if (partialTeams.Any())
|
||||
{
|
||||
<table class="table schedule">
|
||||
<thead>
|
||||
<th class="col-2"></th>
|
||||
<th class="col-3"></th>
|
||||
<th class="col-5"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var team in partialTeams.OrderBy(t => t.Name))
|
||||
{
|
||||
@await Html.PartialAsync("ScheduleTeamPartial", Tuple.Create(team, overlaps, Model.Item3.AbsentStudents))
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
|
||||
<h4>Individual</h4>
|
||||
<p><i>Use time for individual event or to <strong>work on a team event</strong> </i></p>
|
||||
<table class="table schedule">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
|
||||
@foreach (var team in fullTeams.Where(t => t.Event.Format is EventFormat.Individual).OrderBy(t => t.Name))
|
||||
{
|
||||
<td>
|
||||
<strong>@team.Captain?.FirstName</strong> (@team.Event.Name@if(team.Event.RegionalEvent){ @* <text> (<i>Regional</i>)</text> *@})
|
||||
</td>
|
||||
@* @await Html.PartialAsync("ScheduleTeamPartial", Tuple.Create(team, overlaps)) *@
|
||||
}
|
||||
|
||||
@foreach (var student in unassignedStudents[slot])
|
||||
{
|
||||
<td>
|
||||
<strong>@student.FirstName</strong>
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
slot++;
|
||||
}
|
||||
|
||||
<h3>Missed team events for today</h3>
|
||||
<table class="table schedule">
|
||||
@foreach (var student in allStudents.OrderBy(s => s.FirstName))
|
||||
{
|
||||
var studentMeetings = student.Teams.Where(t => allMeetingTeams.Any(mt => mt.Name == t.Name && mt.Students.Contains(student)));
|
||||
var studentMissed = student.Teams.Where(t => studentMeetings.All(mt => mt.Name != t.Name)).ToList();
|
||||
var studentMissedTeams = studentMissed.Where(t => t.Event.Format is EventFormat.Team);
|
||||
var studentMissedIndividual = studentMissed.Where(t => t.Event.Format is EventFormat.Individual);
|
||||
if (studentMissedTeams.Any())
|
||||
{
|
||||
<tr>
|
||||
<td class="col-4">@student.FirstName</td>
|
||||
<td>
|
||||
@string.Join(", ", studentMissedTeams.Select(t => t.ToStringWithIndividualAndRegional()))
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
if (studentMissedIndividual.Any())
|
||||
{
|
||||
<tr>
|
||||
<td class="col-4">@student.FirstName</td>
|
||||
<td>
|
||||
@string.Join(", ", studentMissedIndividual.Select(t => t.ToStringWithIndividualAndRegional()))
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
@functions
|
||||
{
|
||||
private void GetTeamClass(Team team)
|
||||
{
|
||||
if (team.Event.RegionalEvent)
|
||||
{
|
||||
@Html.Raw("regional")
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
@using Core.Entities
|
||||
@model Tuple<Core.Entities.Team, List<Tuple<Student, IEnumerable<Team>>>, string[]?>
|
||||
|
||||
@{
|
||||
var team = Model.Item1;
|
||||
var overlaps = Model.Item2;
|
||||
}
|
||||
|
||||
<tr>
|
||||
<td class="@{ GetTeamClass(team); } col-6" >
|
||||
<strong>@team</strong>
|
||||
@if (!string.IsNullOrEmpty(team.Event.EventAttributes()))
|
||||
{
|
||||
<i>(@team.Event.EventAttributes())</i>
|
||||
}
|
||||
<small><i>@team.Event.SemifinalistActivity</i></small>
|
||||
@* @if (team.Event.StatePresubmission)
|
||||
{
|
||||
<small>(pre-submission)</small>
|
||||
}
|
||||
|
||||
@if (team.Event.StatePretesting)
|
||||
{
|
||||
<small>(pre-testing)</small>
|
||||
} *@
|
||||
</td>
|
||||
|
||||
<td>
|
||||
@{ var first = true; }
|
||||
@foreach (var student in team.Students.OrderByDescending(s => (s.Grade + s.TsaYear) * (team.Captain == s ? 2 : 1)))
|
||||
{
|
||||
if (!first)
|
||||
{
|
||||
<text>, </text>
|
||||
}
|
||||
{
|
||||
first = false;
|
||||
}
|
||||
@if (overlaps.Any(t => t.Item1 == student))
|
||||
{
|
||||
<span style="color: #F66">@student.FirstName</span>
|
||||
}
|
||||
else if(Model.Item3?.Any(s => student.FirstNameLastName.Contains(s))== true)
|
||||
{
|
||||
<span style="color: lightgray">@student.FirstName</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
@student.FirstName
|
||||
|
||||
}
|
||||
|
||||
@if (team.Captain == student)
|
||||
{
|
||||
<span class="text-warning small">•</span>
|
||||
@* <i class="bi bi-chevron-double-up text-warning small"></i> *@
|
||||
}
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
@team.Event.Documentation
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@functions
|
||||
{
|
||||
private void GetTeamClass(Team team)
|
||||
{
|
||||
// if (team.Event.RegionalEvent)
|
||||
// {
|
||||
// @Html.Raw("regional")
|
||||
// ;
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,358 @@
|
||||
@using System.Text.RegularExpressions
|
||||
@using Core.Entities
|
||||
@using Core.Utility
|
||||
@model Tuple<Team[], Student[], IDictionary<CompetitiveEvent, List<EventOccurrence>>>
|
||||
@{
|
||||
ViewData["Title"] = "Teams";
|
||||
var eventOccurrences = Model.Item3;
|
||||
}
|
||||
<div class="container nobrk pt-5">
|
||||
<h2>State Events</h2>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Team</td>
|
||||
<td>Team Members</td>
|
||||
<td>Dates</td>
|
||||
<td>Materials</td>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var team in Model.Item1)
|
||||
{
|
||||
var students = team.Students;
|
||||
@if (true @* team.Event.Format == EventFormat.Team *@)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
@* <strong class="@{ GetTeamClass(team);}">@team.Name</strong> *@
|
||||
@team.Name @* #@team.TeamNumber
|
||||
*@ </td>
|
||||
<td>
|
||||
@{
|
||||
var first = true;
|
||||
}
|
||||
@foreach (var student in students.OrderByDescending(s => (s.Grade + s.TsaYear) * (team.Captain == s ? 2 : 1)).ThenBy(s => s.FirstNameLastName))
|
||||
{
|
||||
@if (!first)
|
||||
{
|
||||
<text>, </text>
|
||||
|
||||
}
|
||||
first = false;
|
||||
@student.FirstNameLastName @if (team.Captain == student)
|
||||
{
|
||||
<text> (Cpt. @team.Captain.StateID)</text>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
@if (team.Event.StatePresubmission)
|
||||
{
|
||||
<text>Pre-submission due Friday, March 14</text>
|
||||
}
|
||||
@if (team.Event.StatePretesting)
|
||||
{
|
||||
<text>Pre-testing Wednesday, April 2nd</text>
|
||||
}
|
||||
@if (team.Event.StatePreliminaryRound)
|
||||
{
|
||||
<text>Preliminary and Semifinalist Rounds</text>
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
@team.Event.Documentation
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
}
|
||||
@* else if (team.Event.Format == EventFormat.Individual)
|
||||
{
|
||||
foreach (var student in students)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
@team.Event.Name - @student.FirstNameLastName (@student.RegionalID)
|
||||
</td>
|
||||
<td>@team.RegionalTimeSlot</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
}
|
||||
} *@
|
||||
}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@{
|
||||
var s = Model.Item2.OrderBy(s => s.LastNameFirstName);
|
||||
|
||||
@foreach (var student in s)
|
||||
{
|
||||
<div class="container nobrk pt-5" style="page-break-before: always;">
|
||||
|
||||
<h3>@student.FirstNameLastName - @student.StateID</h3>
|
||||
<h4>TSA 2025 TN State Schedule</h4>
|
||||
<div class="row">
|
||||
<div class="col col-2">Events</div>
|
||||
<div class="col">
|
||||
@foreach (var ev in student.Teams)
|
||||
{
|
||||
<div class="row">
|
||||
|
||||
<div class="col col-2">
|
||||
@if (ev.Event.Format is EventFormat.Team)
|
||||
{
|
||||
@ev.TeamNumber
|
||||
}
|
||||
else
|
||||
{
|
||||
@ev.Captain.StateID
|
||||
}
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<text> @ev.Name
|
||||
@if (ev.Captain == student)
|
||||
{
|
||||
<strong>(Cpt.)</strong>
|
||||
}
|
||||
</text>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
@ev.Event.SemifinalistActivity
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Time</td>
|
||||
<td>Event</td>
|
||||
<td></td>
|
||||
<td>Location</td>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@foreach (var date in
|
||||
eventOccurrences
|
||||
.Where(eo =>
|
||||
student.Teams.Select(t => t.Event).Any(a => a == eo.Key)
|
||||
|| eo.Key == CompetitiveEvent.GeneralSchedule
|
||||
|| (eo.Key == CompetitiveEvent.VotingDelegates && student.VotingDelegate))
|
||||
.SelectMany(eo => eo.Value.Select(v => Tuple.Create(v, eo.Key)))
|
||||
.GroupBy(de => de.Item1.Date + ", " + de.Item1.StartTime.DayOfWeek)
|
||||
.OrderBy(d => d.Key)
|
||||
)
|
||||
{
|
||||
var eventsForThisDay =
|
||||
date
|
||||
.Where(de => de.Item1.Name != "Judging")
|
||||
.Where(de => de.Item1.StartTime > new DateTime(2024, 3, 1))
|
||||
// filter out occurrences where non-captain
|
||||
.Where(de =>
|
||||
!de.Item1.SignupSubmitPickup
|
||||
|| de.Item2.Format is EventFormat.Individual
|
||||
|| student.Teams.Any(t => t.Captain == student && t.Event == de.Item2)
|
||||
)
|
||||
.OrderBy(de => de.Item1.StartTime);
|
||||
|
||||
@if (!eventsForThisDay.Any())
|
||||
continue;
|
||||
<tr>
|
||||
|
||||
<td colspan="4"><strong>@date.Key</strong></td>
|
||||
</tr>
|
||||
@foreach (var eventOccurrence in eventsForThisDay.OrderBy(de => de.Item1.StartTime))
|
||||
{
|
||||
<tr>
|
||||
<td>@eventOccurrence.Item1.Time</td>
|
||||
<td>@eventOccurrence.Item2.Name</td>
|
||||
<td>@eventOccurrence.Item1.Name
|
||||
@if (eventOccurrence.Item1.Name.Contains("Pick") && eventOccurrence.Item2.Format is EventFormat.Team)
|
||||
{
|
||||
<br/>
|
||||
<text>or coordinate with a teammate</text>
|
||||
}
|
||||
</td>
|
||||
<td>@eventOccurrence.Item1.Location
|
||||
@if (eventOccurrence.Item1.Location == "Online" && eventOccurrence.Item1.Name.Contains("Sign-up") ) { <text>by Advisor</text>}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
|
||||
</table>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
||||
@{
|
||||
<div class="container nobrk pt-5">
|
||||
<h2>Combined Schedule</h2>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Time</td>
|
||||
<td>Team</td>
|
||||
<td></td>
|
||||
<td>Location</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var eventsForDate
|
||||
in Model.Item3.SelectMany(eo => eo.Value.Select(e => Tuple.Create(e, eo.Key)))
|
||||
.Where(de => de.Item1.Name != "Judging")
|
||||
.GroupBy(eo => eo.Item1.StartTime.Date)
|
||||
.OrderBy(eo => eo.Key)
|
||||
)
|
||||
{
|
||||
<tr><td colspan="4"><strong>@eventsForDate.Key.ToString("MMMM d") </strong> </td></tr>
|
||||
@foreach (var occurrence in eventsForDate.OrderBy(o => o.Item1.StartTime))
|
||||
{
|
||||
var teams = Model.Item1.Where(t => t.Event == occurrence.Item2);
|
||||
if (occurrence.Item2 != CompetitiveEvent.GeneralSchedule && occurrence.Item2 != CompetitiveEvent.VotingDelegates && !teams.Any())
|
||||
continue;
|
||||
<tr>
|
||||
<td>@occurrence.Item1.Time</td>
|
||||
<td>
|
||||
@if (occurrence.Item2 == CompetitiveEvent.GeneralSchedule)
|
||||
{
|
||||
<text>Everyone</text>
|
||||
}
|
||||
else if (occurrence.Item2 == CompetitiveEvent.VotingDelegates)
|
||||
{
|
||||
<text>Voting Delegates - @string.Join(", ", Model.Item2.Where(stu => stu.VotingDelegate).Select(stu => stu.FirstName))</text>
|
||||
}
|
||||
@foreach (var team in teams)
|
||||
{
|
||||
<text>@team</text>
|
||||
|
||||
|
||||
<text> - @string.Join(", ", team.Students.Select(stu => stu.FirstName))</text>
|
||||
}
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@occurrence.Item1.Name
|
||||
|
||||
@if (occurrence.Item1.SignupSubmitPickup)
|
||||
{
|
||||
<br/>
|
||||
<text>1 Team Member</text>
|
||||
}
|
||||
|
||||
@if (occurrence.Item1.Name.Contains("Semifinalist") && (occurrence.Item1.Name.Contains("Interview") || occurrence.Item1.Name.Contains("Presentation")))
|
||||
{
|
||||
<br/>
|
||||
<text>@Regex.Match(@occurrence.Item2.SemifinalistActivity, @"(?<=\().*?(?=\))").Value</text>
|
||||
}
|
||||
</td>
|
||||
<td>@occurrence.Item1.Location</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
<div class="container nobrk pt-5">
|
||||
<h2>Students</h2>
|
||||
<table class="table-primary">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Student</td>
|
||||
<td>ID</td>
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var student in Model.Item2.OrderByDescending(s => s.Officer.Contains("President")).ThenBy(s => s.LastNameFirstName))
|
||||
{
|
||||
var assignments
|
||||
= student.Teams.Where(ea => ea.Students.Contains(student))
|
||||
|
||||
.Distinct()
|
||||
.OrderBy(e => e.Name).ToList();
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<strong>@student.FirstNameLastName</strong> @if (!string.IsNullOrEmpty(student.Officer))
|
||||
{
|
||||
<text>(@student.Officer)</text>
|
||||
}
|
||||
</td>
|
||||
<td>@student.StateID</td>
|
||||
|
||||
@foreach (var t in assignments)
|
||||
{
|
||||
<td>
|
||||
@if (t.Event.Format != EventFormat.Individual)
|
||||
{
|
||||
@t.Name
|
||||
@if (t.Captain == student)
|
||||
{
|
||||
<text> (Captain)</text>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@t.Event.Name
|
||||
}
|
||||
@{
|
||||
if (t.Event.Format == EventFormat.Individual)
|
||||
{
|
||||
<sup class="activity">(ind)</sup>
|
||||
}
|
||||
if (t.Event.OnSiteActivity)
|
||||
{
|
||||
<sup class="activity">(act)</sup>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="container nobrk pt-5">
|
||||
<h2>Students</h2>
|
||||
@foreach (var student in Model.Item2.OrderByDescending(s => s.Officer.Contains("President")).ThenBy(s => s.LastNameFirstName))
|
||||
{
|
||||
var assignments
|
||||
= student.Teams.Where(ea => ea.Students.Contains(student))
|
||||
|
||||
.Distinct()
|
||||
.OrderBy(e => e.Name).ToList();
|
||||
|
||||
<p>
|
||||
<strong>@student.FirstNameLastName</strong>
|
||||
@if (!string.IsNullOrEmpty(student.Officer))
|
||||
{
|
||||
<text>(@student.Officer)</text>
|
||||
}
|
||||
<text>@student.StateID</text>
|
||||
</p>
|
||||
|
||||
|
||||
@foreach (var t in assignments)
|
||||
{
|
||||
<p>
|
||||
@if (t.Event.Format != EventFormat.Individual)
|
||||
{
|
||||
@t.Name
|
||||
@if (t.Captain == student)
|
||||
{
|
||||
<text> (Captain)</text>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@t.Event.Name
|
||||
}
|
||||
</p>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
@@ -0,0 +1,79 @@
|
||||
@using Core.Entities
|
||||
@model Tuple<Student[]>
|
||||
@{
|
||||
ViewData["Title"] = "Student Handout Page";
|
||||
}
|
||||
|
||||
@foreach (var s in Model.Item1.OrderBy(n => n.FirstName))
|
||||
{
|
||||
<div class="container nobrk pt-5">
|
||||
<p><i>@DateTime.Today.ToShortDateString()</i></p>
|
||||
<h2><i>TSA teams and events:</i> @s.FirstNameLastName </h2>
|
||||
|
||||
@foreach (var team in
|
||||
s.Teams.OrderByDescending(t => t.Event.Format == EventFormat.Team)
|
||||
.ThenByDescending(t => t.Event.LevelOfEffort)
|
||||
.ThenByDescending(t => t.Name))
|
||||
{
|
||||
var evt = team.Event;
|
||||
<div>
|
||||
@if (evt.RegionalEvent)
|
||||
{
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<i>Regional Event</i>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div div class="row">
|
||||
<div class="col-6">
|
||||
<h5>@evt.Name @Html.Partial("EffortStarsPartial", evt.LevelOfEffort)</h5>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
@if (evt.Format is EventFormat.Team)
|
||||
{
|
||||
<html>
|
||||
<strong>Teammates</strong><br/>
|
||||
@string.Join(", ", team.Students.OrderByDescending(s => s.Grade + s.TsaYear).ThenBy(s => s.FirstName).Where(tm => tm != s).Select(tm => tm.FirstName))
|
||||
</html>
|
||||
}
|
||||
else
|
||||
{
|
||||
<html>
|
||||
<strong>@evt.Format</strong>
|
||||
</html>
|
||||
}
|
||||
|
||||
</div>
|
||||
<div class="col-2">
|
||||
@evt.SemifinalistActivity
|
||||
@if (evt.StatePresubmission)
|
||||
{<text>, State Presubmission <strong>due March 14th</strong></text>}
|
||||
@if (evt.StatePretesting)
|
||||
{<text>, State Pre-testing <strong>April 2nd</strong></text>}
|
||||
@if (evt.StatePreliminaryRound)
|
||||
{<text>, State Preliminary and Semifinalist Rounds</text>}
|
||||
</div>
|
||||
</div>
|
||||
<div div class="row mt-3">
|
||||
<div class="col">@evt.Description</div></div>
|
||||
@if (!string.IsNullOrEmpty(evt.Theme))
|
||||
{
|
||||
<div div class="row mt-2">
|
||||
<div class="col-3 text-center"><i>Theme for 2024-25:</i></div>
|
||||
<div class="col">@evt.Theme</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (!string.IsNullOrEmpty(evt.Documentation))
|
||||
{
|
||||
<div div class="row mt-2">
|
||||
<div class="col-3 text-center"><i>Materials:</i></div>
|
||||
<div class="col">@evt.Documentation</div>
|
||||
</div>
|
||||
}
|
||||
<hr/>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
@using Core.Entities
|
||||
@using Core.Utility
|
||||
@model Tuple<CompetitiveEvent[], Student[], EventStudentPicks[], Team[], AssignmentParameters>
|
||||
@{
|
||||
ViewData["Title"] = "Home Page";
|
||||
var maxStudentPicks = Model.Item3.MaxBy(picks => picks.StudentPicks.Count).StudentPicks.Count;
|
||||
var parameters = Model.Item5;
|
||||
var unassignedEvents = Model.Item1.Where(e => Model.Item4.All(t => t.Event != e));
|
||||
|
||||
}
|
||||
|
||||
<table class="table-primary">
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
Effort Limit:<strong>@parameters.EffortUpperBound</strong>
|
||||
Require Regionals:<strong>@parameters.RequireRegional</strong>
|
||||
Require On-Site Activity:<strong>@parameters.RequireOnSite</strong>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br/>
|
||||
<table class="table-primary">
|
||||
<thead>
|
||||
<tr><td>Student</td><td>Level of Effort Total</td></tr>
|
||||
</thead>
|
||||
@foreach (var student in Model.Item2.OrderBy(s => s.FirstName))
|
||||
{
|
||||
var assignments
|
||||
= Model.Item4.Where(ea => ea.Students.Contains(student))
|
||||
.Select(ea => ea.Event)
|
||||
.Distinct()
|
||||
.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>
|
||||
<td>@assignments.Sum(a => a.LevelOfEffort)</td>
|
||||
|
||||
@foreach (var evt in assignments)
|
||||
{
|
||||
var h = student.RankedEventPicks.IndexOf(evt) + 1;
|
||||
<td class="@{ GetOrderClass(h); }">
|
||||
@evt.ShortName @Html.Partial("EffortStarsPartial", evt.LevelOfEffort)
|
||||
@{
|
||||
if (evt.Format == EventFormat.Individual)
|
||||
{
|
||||
<sup class="activity">(ind)</sup>
|
||||
}
|
||||
if (evt.RegionalEvent)
|
||||
{
|
||||
<sup class="activity">(reg)</sup>
|
||||
}
|
||||
if (evt.OnSiteActivity)
|
||||
{
|
||||
<sup class="activity">(act)</sup>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
}
|
||||
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
|
||||
<table><tr><td> </td></tr></table>
|
||||
|
||||
<table class="table-primary">
|
||||
<thead>
|
||||
<tr><td>Teams</td></tr>
|
||||
</thead>
|
||||
@foreach (var evt in Model.Item1.OrderByDescending(e => e.Format is EventFormat.Team))
|
||||
{
|
||||
var assignments = Model.Item4.FirstOrDefault(i => i.Event == evt);
|
||||
@if (assignments == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
<tr class="table-primary">
|
||||
<td class="table-primary"><strong>@evt.Name</strong></td>
|
||||
<td colspan="1">
|
||||
@Html.Partial("EffortStarsPartial", evt.LevelOfEffort)
|
||||
@if (evt.Format is EventFormat.Individual)
|
||||
{
|
||||
<text>(ind)</text>
|
||||
}
|
||||
|
||||
@if (evt.RegionalEvent)
|
||||
{
|
||||
<text>(reg)</text>
|
||||
}
|
||||
|
||||
@if (evt.OnSiteActivity)
|
||||
{
|
||||
<text>(act)</text>
|
||||
}@evt.TeamSize</td>
|
||||
@*<td style="nowrap">@evt.MaxTeamCountState</td>*@
|
||||
@if (assignments != null)
|
||||
{
|
||||
foreach (var student in assignments.Students)
|
||||
{
|
||||
var h = student.RankedEventPicks.IndexOf(evt) + 1;
|
||||
<td class="@{ GetOrderClass(h); }">@student.FirstName</td>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
|
||||
<tr>
|
||||
@{
|
||||
var unassigned = string.Join(", ", unassignedEvents.Select(e => e.Name));
|
||||
}
|
||||
<td colspan="8">Unassigned Events: @unassigned</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table><tr><td></td></tr></table>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<th>Name</th>
|
||||
<th>Grade</th>
|
||||
<th>TSA Year</th>
|
||||
<th>1</th>
|
||||
<th>2</th>
|
||||
<th>3</th>
|
||||
<th>4</th>
|
||||
<th>5</th>
|
||||
</thead>
|
||||
@foreach (var s in Model.Item2.OrderBy(n => n.FirstName))
|
||||
{
|
||||
<tr>
|
||||
<td>@s.FirstName</td>
|
||||
<td>@s.Grade.Ordinal()</td>
|
||||
<td>@s.TsaYear.Ordinal()</td>
|
||||
@for (var i = 0; i < 7; i++)
|
||||
{
|
||||
var h = i + 1;
|
||||
var evt = s.RankedEventPicks.Skip(i).FirstOrDefault();
|
||||
if (evt == null)
|
||||
continue;
|
||||
<td class="@{ GetOrderClass(h); }">
|
||||
@evt.ShortName @Html.Partial("EffortStarsPartial", evt.LevelOfEffort)
|
||||
@if (evt.Format == EventFormat.Individual)
|
||||
{
|
||||
<sup class="activity">(ind)</sup>
|
||||
}
|
||||
@if (evt.RegionalEvent)
|
||||
{
|
||||
<sup class="activity">(reg)</sup>
|
||||
}
|
||||
@if (evt.OnSiteActivity)
|
||||
{
|
||||
<sup class="activity">(act)</sup>
|
||||
}
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
|
||||
<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>
|
||||
</thead>
|
||||
@foreach (var evt in Model.Item1)
|
||||
{
|
||||
var esp = Model.Item3.FirstOrDefault(i => i.Event == evt);
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
@evt.Name
|
||||
</td>
|
||||
|
||||
<td>@Html.Partial("EffortStarsPartial", evt.LevelOfEffort)</td>
|
||||
<td>@if (evt.Format 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>
|
||||
<td style="nowrap">@evt.MaxTeamCountState</td>
|
||||
|
||||
@for (var i = 0; i < maxStudentPicks; i++)
|
||||
{
|
||||
var d = esp?.StudentPicks.Skip(i).FirstOrDefault();
|
||||
<td class="@{GetOrderClass(d?.Item2 ?? int.MaxValue);}">@d?.Item1.FirstName</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
|
||||
|
||||
@functions
|
||||
{
|
||||
public void GetOrderClass(int pick)
|
||||
{
|
||||
@Html.Raw(LabelHelper.GetOrderClass(pick))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
@using Core.Entities
|
||||
|
||||
@model Tuple<Student[]>
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Student Teams";
|
||||
}
|
||||
|
||||
<table class="table-primary">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Student</td><td>Level of Effort Total</td>
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var student in Model.Item1.OrderBy(s => s.FirstName))
|
||||
{
|
||||
var assignments
|
||||
= student.Teams.Where(ea => ea.Students.Contains(student))
|
||||
.Select(ea => ea.Event)
|
||||
.Distinct()
|
||||
.OrderBy(e =>
|
||||
{
|
||||
var r = student.RankedEventPicks.IndexOf(e);
|
||||
r = r >= 0 ? r : 10;
|
||||
//r = r * (4 - e.LevelOfEffort.Value);
|
||||
return r;
|
||||
}).ToList();
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<strong>@student.FirstNameLastName</strong> @if(!string.IsNullOrEmpty(student.Officer )) {<text>(@student.Officer)</text>}
|
||||
</td>
|
||||
<td>@assignments.Sum(a => a.LevelOfEffort)</td>
|
||||
|
||||
@foreach (var evt in assignments)
|
||||
{
|
||||
var h = student.RankedEventPicks.IndexOf(evt) + 1;
|
||||
<td class="@{ GetOrderClass(h); }">
|
||||
@evt.ShortName @Html.Partial("EffortStarsPartial", evt.LevelOfEffort)
|
||||
@{
|
||||
if (evt.Format == EventFormat.Individual)
|
||||
{
|
||||
<sup class="activity">(ind)</sup>
|
||||
}
|
||||
if (evt.RegionalEvent)
|
||||
{
|
||||
<sup class="activity">(reg)</sup>
|
||||
}
|
||||
if (evt.OnSiteActivity)
|
||||
{
|
||||
<sup class="activity">(act)</sup>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
@*
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Student</th>
|
||||
<th>Team</th>
|
||||
<th>Teammates</th>
|
||||
</tr>
|
||||
@foreach (var student in Model.Item1.OrderBy(s => s.Name))
|
||||
{
|
||||
var teams = student.Teams;
|
||||
|
||||
<tr class="table-primary">
|
||||
<td class="table-primary">
|
||||
<strong>@student.FirstNameLastName</strong>
|
||||
@if (!string.IsNullOrEmpty(student.Officer))
|
||||
{
|
||||
<text>(</text> @student.Officer <text>)</text>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
@foreach (var team in student.Teams)
|
||||
{
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="@{ GetTeamClass(team); }">@team.Name
|
||||
@{
|
||||
var ind = new List<string>();
|
||||
if (team.Captain == student)
|
||||
{
|
||||
<span>(Cpt .)</span>
|
||||
}
|
||||
if (!team.Event.InterviewOrPresentation)
|
||||
{
|
||||
ind.Add("a");
|
||||
}
|
||||
if (team.Event.Format is EventFormat.Individual)
|
||||
{
|
||||
ind.Add("i");
|
||||
}
|
||||
if (ind.Count > 0)
|
||||
{
|
||||
<span class="activity">(@string.Join(",", ind))</span>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
@string.Join(", ", team.Students.Where(s => s != student).OrderByDescending(s => s.TsaYear + s.Grade).Select(s => s.FirstName))
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</table>
|
||||
<p>
|
||||
(a) denotes an event that has activity other than interview or presentation at state
|
||||
<br />
|
||||
(i) denotes an individual event
|
||||
</p> *@
|
||||
|
||||
|
||||
<table class="table-primary">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Student</td>
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var student in Model.Item1.OrderBy(s => s.LastNameFirstName))
|
||||
{
|
||||
var assignments
|
||||
= student.Teams.Where(ea => ea.Students.Contains(student))
|
||||
.Select(ea => ea.Event)
|
||||
.Distinct()
|
||||
.OrderBy(e =>
|
||||
{
|
||||
var r = student.RankedEventPicks.IndexOf(e);
|
||||
r = r >= 0 ? r : 10;
|
||||
//r = r * (4 - e.LevelOfEffort.Value);
|
||||
return r;
|
||||
}).ToList();
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<strong>@student.FirstName</strong>
|
||||
</td>
|
||||
|
||||
@foreach (var evt in assignments)
|
||||
{
|
||||
var h = student.RankedEventPicks.IndexOf(evt) + 1;
|
||||
<td>
|
||||
@evt.Name
|
||||
@{
|
||||
if (evt.Format == EventFormat.Individual)
|
||||
{
|
||||
<sup class="activity">(individual)</sup>
|
||||
}
|
||||
if (evt.RegionalEvent)
|
||||
{
|
||||
<sup class="activity">(regional)</sup>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
|
||||
@functions
|
||||
{
|
||||
public void GetOrderClass(int pick)
|
||||
{
|
||||
@Html.Raw(LabelHelper.GetOrderClass(pick))
|
||||
}
|
||||
|
||||
private void GetTeamClass(Team team)
|
||||
{
|
||||
// if (team.Event.RegionalEvent)
|
||||
// {
|
||||
// @Html.Raw("regional");
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
@model System.Tuple<Core.Entities.Team[],Core.Entities.Student[]>
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Team Grid";
|
||||
}
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr> <th></th>
|
||||
@foreach (var team in Model.Item1)
|
||||
{
|
||||
if (team.Name == team.Event.Name)
|
||||
{
|
||||
<td style="writing-mode: vertical-rl;text-orientation:sideways">
|
||||
@team.Event.ShortName
|
||||
</td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td style="writing-mode: vertical-rl;text-orientation:sideways">
|
||||
@team.Name
|
||||
</td>
|
||||
}
|
||||
}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var student in Model.Item2.OrderBy(s => s.FirstName))
|
||||
{
|
||||
<tr>
|
||||
<td>@student.FirstName</td>
|
||||
@foreach (var team in Model.Item1)
|
||||
{
|
||||
@if (team.Students.Contains(student))
|
||||
{
|
||||
<td><strong> X</strong></td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td></td>
|
||||
}
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -0,0 +1,132 @@
|
||||
@using Core.Entities
|
||||
@model Tuple<Team[]>
|
||||
@{
|
||||
ViewData["Title"] = "Teams";
|
||||
}
|
||||
|
||||
<table>
|
||||
@foreach (var team in Model.Item1.Where(t => t.Event.Documentation.Contains("Port")))
|
||||
{
|
||||
<tr>
|
||||
<td>@team.Name @if (team.Event.Format is EventFormat.Individual)
|
||||
{
|
||||
<text>(ind)</text>
|
||||
}
|
||||
</td><td>@team.Event.Documentation</td>
|
||||
@foreach(var student in @team.Students.OrderByDescending(s => s.TsaYear + s.Grade))
|
||||
{
|
||||
<td>@student.FirstName</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
@foreach (var student in Model.Item1.SelectMany(t => t.Students).Distinct().Where(s => s.Teams.Any(t => t.Event.Name.Contains("Port"))))
|
||||
{
|
||||
<tr>
|
||||
<td>@student.FirstName</td>
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
|
||||
<table class="table-primary">
|
||||
<thead>
|
||||
<tr><td>Teams</td></tr>
|
||||
</thead>
|
||||
@{
|
||||
var ind = false;
|
||||
}
|
||||
@foreach (var team in Model.Item1.OrderByDescending(t => t.Event.Format is EventFormat.Team))
|
||||
{
|
||||
@if (!ind && team.Event.Format is EventFormat.Individual)
|
||||
{
|
||||
<tr>
|
||||
<td><hr/></td><td>Individual</td><td><hr/></td>
|
||||
</tr>
|
||||
ind = true;
|
||||
}
|
||||
<tr class="table-primary">
|
||||
<td class="table-primary"><strong>@team.Name</strong></td>
|
||||
<td colspan="1">
|
||||
@* @Html.Partial("EffortStarsPartial", team.Event.LevelOfEffort) *@
|
||||
@* @if (team.Event.RegionalEvent)
|
||||
{
|
||||
<text>(reg)</text>
|
||||
}
|
||||
|
||||
@if (team.Event.OnSiteActivity)
|
||||
{
|
||||
<text>(act)</text>
|
||||
} *@
|
||||
@team.Event.TeamSize
|
||||
</td>
|
||||
@*<td style="nowrap">@evt.MaxTeamCountState</td>*@
|
||||
@foreach (var student in team.Students.OrderByDescending(s => (s.Grade + s.TsaYear) * (team.Captain == s ? 2 : 1)).ThenBy(s => s.FirstNameLastName))
|
||||
{
|
||||
<td>@student.FirstName @if (team.Captain == student) { <text>(Cpt.)</text>}</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
@*
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Event</td>
|
||||
<td>Pre-submission</td>
|
||||
<td>RegionalNotes</td>
|
||||
<td>Team Members</td>
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach (var team in Model.Item1)
|
||||
{
|
||||
var students = team.Students;
|
||||
<tr>
|
||||
<td>
|
||||
@team.Name
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
@foreach (var student in students.OrderByDescending(s => (s.Grade + s.TsaYear) * (team.Captain == s ? 2 : 1)).ThenBy(s => s.FirstNameLastName))
|
||||
{
|
||||
<td>@student.FirstNameLastName @if (team.Captain == student) { <text>(Cpt.)</text>}</td>
|
||||
}
|
||||
|
||||
<tr>
|
||||
<td class="event-desc" colspan="4">Team Size: @team.Event.TeamSize, Max Teams: @team.Event.MaxTeamCountState
|
||||
@{
|
||||
if (!team.Event.InterviewOrPresentation)
|
||||
{
|
||||
<span class="activity"> (a)</span>
|
||||
}
|
||||
if (team.Event.Format is EventFormat.Individual)
|
||||
{
|
||||
<span class="activity"> (i)</span>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
<p>
|
||||
(a) denotes an event that has activity other than interview or presentation at state
|
||||
<br />
|
||||
(i) denotes an individual event
|
||||
</p>
|
||||
*@
|
||||
|
||||
@functions
|
||||
{
|
||||
public void GetOrderClass(int pick)
|
||||
{
|
||||
@Html.Raw(LabelHelper.GetOrderClass(pick))
|
||||
}
|
||||
|
||||
private void GetTeamClass(Team team)
|
||||
{
|
||||
// if (team.Event.RegionalEvent)
|
||||
// {
|
||||
// @Html.Raw("regional");
|
||||
// }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user