many bug fixes and features added

This commit is contained in:
2026-06-27 12:15:37 -04:00
parent f60174625e
commit 78dbbc2051
51 changed files with 1459 additions and 124 deletions

View File

@@ -0,0 +1,49 @@
@{
var title = ViewBag.ScoringTitle as string ?? "Scoring";
var controller = ViewBag.ScoringController as string ?? "TrackEvent";
var targets = ViewBag.ScoringTargets as IEnumerable<TournamentEventLevelDto> ?? Enumerable.Empty<TournamentEventLevelDto>();
ViewData["Title"] = title;
}
<h2>@title</h2>
<p class="text-muted">Select an event level to score.</p>
<hr />
@if (!targets.Any())
{
<div class="alert alert-info">
No event levels are available for scoring yet. Add event levels to an active tournament from the
<a asp-controller="Tournament" asp-action="Index">Tournaments</a> page.
</div>
}
else
{
@foreach (var grp in targets.GroupBy(t => new { t.TournamentId, t.TournamentName }))
{
<div class="card shadow-sm mb-3">
<div class="card-header text-white" style="background-color: #003366;">
<h5 class="mb-0">@grp.Key.TournamentName</h5>
</div>
<div class="card-body p-0">
<table class="table table-hover mb-0">
<thead>
<tr><th>Event</th><th>Level</th><th>Registrations</th><th></th></tr>
</thead>
<tbody>
@foreach (var t in grp.OrderBy(x => x.EventName).ThenBy(x => x.EventLevelName))
{
<tr>
<td>@t.EventName</td>
<td>@t.EventLevelName</td>
<td>@t.RegistrationCount</td>
<td class="text-end">
<a asp-controller="@controller" asp-action="Index" asp-route-tournamentEventLevelId="@t.TournamentEventLevelId" class="btn btn-sm btn-outline-success">Score</a>
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
}
}

View File

@@ -0,0 +1,82 @@
@{
var pg = ViewBag.Page as int? ?? 1;
var totalPages = ViewBag.TotalPages as int? ?? 0;
var totalItems = ViewBag.TotalItems as int? ?? 0;
var pageSize = ViewBag.PageSize as int? ?? 20; // 0 == All
var request = ViewContext.HttpContext.Request;
// Preserve existing query-string filters (zoneId, level, search, etc.), swapping out
// "page" and "pageSize".
var baseParams = request.Query
.Where(kv => kv.Key != "page" && kv.Key != "pageSize")
.SelectMany(kv => kv.Value.Select(v => $"{Uri.EscapeDataString(kv.Key)}={Uri.EscapeDataString(v ?? string.Empty)}"))
.ToList();
Func<int, int, string> url = (p, ps) =>
{
var ps2 = new List<string>(baseParams) { $"pageSize={ps}", $"page={p}" };
return $"{request.Path}?{string.Join("&", ps2)}";
};
Func<int, string> pageUrl = p => url(p, pageSize);
var prevHref = pg <= 1 ? "#" : pageUrl(pg - 1);
var nextHref = pg >= totalPages ? "#" : pageUrl(pg + 1);
var start = Math.Max(1, pg - 2);
var end = Math.Min(totalPages, pg + 2);
var firstItem = totalItems == 0 ? 0 : (pageSize <= 0 ? 1 : (pg - 1) * pageSize + 1);
var lastItem = pageSize <= 0 ? totalItems : Math.Min(pg * pageSize, totalItems);
}
@if (totalItems > 0)
{
<div class="d-flex justify-content-between align-items-center flex-wrap gap-2 mt-3">
<div class="d-flex align-items-center gap-2">
<span class="small text-muted">Show</span>
<select class="form-select form-select-sm" style="width:auto" onchange="location.href=this.value" aria-label="Items per page">
@foreach (var opt in new[] { 20, 50, 100, 500 })
{
<option value="@url(1, opt)" selected="@(pageSize == opt)">@opt</option>
}
<option value="@url(1, 0)" selected="@(pageSize <= 0)">All</option>
</select>
<span class="small text-muted">per page</span>
</div>
<span class="small text-muted">Showing @firstItem@lastItem of @totalItems</span>
</div>
@if (totalPages > 1)
{
<nav aria-label="Page navigation" class="mt-2">
<ul class="pagination justify-content-center mb-0">
<li class="page-item @(pg <= 1 ? "disabled" : "")">
<a class="page-link" href="@prevHref">Previous</a>
</li>
@if (start > 1)
{
<li class="page-item"><a class="page-link" href="@pageUrl(1)">1</a></li>
@if (start > 2)
{
<li class="page-item disabled"><span class="page-link">…</span></li>
}
}
@for (int i = start; i <= end; i++)
{
<li class="page-item @(i == pg ? "active" : "")">
<a class="page-link" href="@pageUrl(i)">@i</a>
</li>
}
@if (end < totalPages)
{
@if (end < totalPages - 1)
{
<li class="page-item disabled"><span class="page-link">…</span></li>
}
<li class="page-item"><a class="page-link" href="@pageUrl(totalPages)">@totalPages</a></li>
}
<li class="page-item @(pg >= totalPages ? "disabled" : "")">
<a class="page-link" href="@nextHref">Next</a>
</li>
</ul>
</nav>
}
}