@using Microsoft.EntityFrameworkCore @using WebApp.Models @page "/students/event-ranking" @inject AppDbContext Context @rendermode InteractiveServer Student Event Ranks - TSA Chapter Organizer Student Event Ranks @if (_students == null) {

Loading...

} else { Name Grade TSA Year Warnings @for (var i = 1; i <= 10; i++) { var ii = i; @AppIcons.GetOrdinal(ii) } @context.FirstName @context.Grade @context.TsaYear Edit @if (!context.RankedEvents.Any(re => re.OnSiteActivity)) { @AppIcons.OnSiteActivity } @if (!context.RankedEvents.Any(re => re.RegionalEvent)) { @AppIcons.RegionalEvent } @if (context.RankedEvents.All(re => re.EventFormat != EventFormat.Individual)) { @AppIcons.IndividualEvent } @for (var i = 1; i <= 10; i++) { var ii = i; var st = context.EventRankings.FirstOrDefault(e => e.Rank == i); @if (st != null) { @st.EventDefinition.ShortName  } } Event Level of Effort Individual Regional On-site Activity Team Size @for (var i = 0; i < _maxEventStudentRankings; i++) { var i1 = i + 1; @i1 } @context.Event.Name @context.Event.LevelOfEffort @if (context.Event.EventFormat == EventFormat.Individual) { } @if (context.Event.RegionalEvent) { } @if (context.Event.OnSiteActivity) { } [@context.Event.MinTeamSize-@context.Event.MaxTeamSize] @for (var j = 0; j < _maxEventStudentRankings; j++) { var student = j < context.StudentRanking.Length ? context.StudentRanking[j] : null; var eventClass = student != null ? $"event-rank-{student.Item2}" : ""; @if (student != null) { @student.Item1.FirstName } } } @code { private Student[]? _students; private class EventStudentRankings { public EventDefinition Event {get; set; } public Tuple [] StudentRanking { get; set; } } private EventStudentRankings[] _eventStudentRankings; private int _maxEventStudentRankings; protected override async Task OnInitializedAsync() { _students = await Context.Students .Include(e => e.EventRankings) .ThenInclude(e => e.EventDefinition) .OrderBy(e => e.FirstName).ToArrayAsync(); _eventStudentRankings = _students.SelectMany(s => s.EventRankings, (student, ranking) => new { e = ranking.EventDefinition, a = Tuple.Create(student, ranking.Rank) } ) .GroupBy(e => e.e) .Select(e => new EventStudentRankings { Event = e.Key, StudentRanking = e.Select(er => er.a).OrderBy(ser => ser.Item2).ThenByDescending(ser => ser.Item1.Grade + ser.Item1.TsaYear).ToArray() }) .OrderBy(e => e.Event.Name) .ToArray(); var events = await Context.Events.ToArrayAsync(); var remainingEvents = events .Where(e => _eventStudentRankings.All(est => est.Event.Id != e.Id)) .Select(e => new EventStudentRankings { Event = e, StudentRanking = Array.Empty>() }) .OrderBy(e => e.Event.Name) .ToArray(); _eventStudentRankings = _eventStudentRankings.Concat(remainingEvents).ToArray(); _maxEventStudentRankings = _eventStudentRankings.Max(esr => esr.StudentRanking.Length); } }