misc. changes

This commit is contained in:
2024-11-24 23:25:59 +01:00
parent b059038ea8
commit 771cea72ad
11 changed files with 85 additions and 15 deletions

View File

@@ -24,12 +24,12 @@ namespace pointMaster.Controllers
vm.links.Add(new NavUrl("Patruljer", "/Patrulje"));
vm.links.Add(new NavUrl("Point", "/Point"));
vm.links.Add(new NavUrl("Poster", "/Poster"));
vm.links.Add(new NavUrl("Statistikker", "/stats"));
vm.links.Add(new NavUrl("Statistikker", "/Stats"));
}
if (User.Identity != null && User.Identity.IsAuthenticated)
{
vm.links.Add(new NavUrl("Giv point", "/point/givpoint"));
vm.links.Add(new NavUrl("Vælg post", "/point/skiftpost"));
vm.links.Add(new NavUrl("Giv point", "/Point/GivPoint"));
vm.links.Add(new NavUrl("Vælg post", "/Point/SkiftPost"));
vm.links.Add(new NavUrl("Log ud", "/account/signout"));
}
else

View File

@@ -6,7 +6,6 @@ using pointMaster.Models;
namespace pointMaster.Controllers
{
[Authorize(Policy = Roles.Postmaster)]
public class PointController : Controller
{
private readonly DataContext context;
@@ -15,7 +14,7 @@ namespace pointMaster.Controllers
{
this.context = context;
}
[Authorize(Policy = Roles.Postmaster)]
public async Task<IActionResult> Index()
{
var vm = new PointViewModel();
@@ -31,7 +30,7 @@ namespace pointMaster.Controllers
return View(vm);
}
[Authorize(Policy = Roles.Postmaster)]
public async Task<IActionResult> SkiftPatrulje()
{
var vm = new SkiftPatruljeViewModel();
@@ -52,6 +51,28 @@ namespace pointMaster.Controllers
public async Task<IActionResult> GivPoint(int id = 0)
{
if (!HttpContext.User.Identity.IsAuthenticated)
{
var patruljeData = new PatruljeInfoModel();
var data = await context.Patruljer.Include(x => x.Points).ThenInclude(x => x.Poster).FirstOrDefaultAsync(x => x.Id == id);
if (data != null)
{
patruljeData.patrulje = data;
patruljeData.totalPoints = data.Points.Sum(x => x.Points);
patruljeData.totalTurnout = data.Points.Sum(x => x.Turnout);
}
else
{
return NotFound();
}
return View("PatruljeInfo", patruljeData);
}
if (id == 0)
{
if (string.IsNullOrEmpty(Request.Cookies["Post"]))
@@ -98,6 +119,7 @@ namespace pointMaster.Controllers
return View(vm);
}
[Authorize(Policy = Roles.Postmaster)]
[HttpPost]
public async Task<IActionResult> GivPoint(int id, GivPointViewModel point)
{
@@ -129,6 +151,7 @@ namespace pointMaster.Controllers
return RedirectToAction("Index");
}
[Authorize(Policy = Roles.Postmaster)]
public async Task<IActionResult> SkiftPost()
{
var vm = new SelectPostViewModel();
@@ -138,6 +161,7 @@ namespace pointMaster.Controllers
return View(vm);
}
[Authorize(Policy = Roles.Postmaster)]
public IActionResult SelectPost(int id)
{
var cookieOptions = new CookieOptions();
@@ -150,6 +174,7 @@ namespace pointMaster.Controllers
return Redirect("/");
}
[Authorize(Policy = Roles.Editor)]
public ActionResult DeletePoint(int id)
{
var point = context.Points.FirstOrDefault(p => p.Id == id);
@@ -183,4 +208,10 @@ namespace pointMaster.Controllers
public List<Point> points { get; set; } = null!;
public bool AllowedToDelete { get; set; } = false;
}
public class PatruljeInfoModel
{
public Patrulje patrulje { get; set; } = null!;
public int totalPoints { get; set; }
public int totalTurnout { get; set; }
}
}

View File

@@ -6,6 +6,7 @@ using pointMaster.Data;
namespace pointMaster.Controllers
{
[Authorize(Policy = Roles.Editor)]
[ApiController]
[Route("api")]
public class StatsApiController : ControllerBase
@@ -17,7 +18,6 @@ namespace pointMaster.Controllers
this.dataContext = dataContext;
}
[Authorize(Policy = Roles.Editor)]
[HttpGet("GetPointsOverTime")]
public async Task<object> GetList()
{

View File

@@ -9,7 +9,7 @@
{
<div class="border m-4 p-4 rounded">
<div class="d-flex flex-row justify-content-between">
<h2>@patrulje.Name</h2>
<h2><span>@patrulje.Id</span> @patrulje.Name</h2>
<p>Points: @Model.patruljePoints[patrulje.Id]</p>
<p>Turnout: @Model.patruljeTurnout[patrulje.Id]</p>
<div class="my-auto">

View File

@@ -2,6 +2,7 @@
@{
ViewData["Title"] = "Point";
}
<h1>Point</h1>
<a asp-action="GivPoint" asp-controller="Point" class="btn btn-primary">Giv point</a>
<table class="table table-striped">
<thead>

View File

@@ -0,0 +1,34 @@
@model pointMaster.Controllers.PatruljeInfoModel
<h1>@Model.patrulje.Name</h1>
<p>Total points: @Model.totalPoints</p>
<p>total turnout: @Model.totalTurnout</p>
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Post navn</th>
<th scope="col">Points</th>
<th scope="col">Turnout</th>
</tr>
</thead>
<tbody>
@if (Model.patrulje.Points.Any())
{
@foreach (var point in Model.patrulje.Points)
{
<tr>
<td scope="row">@point.Poster.Name</td>
<td scope="row">@point.Turnout</td>
<td scope="row">@point.Points</td>
</tr>
}
}
else
{
<tr>
<td colspan="3">Ingen point givet</td>
</tr>
}
</tbody>
</table>

View File

@@ -10,6 +10,6 @@
<ul class="list-group">
@foreach (var patrulje in Model.Patruljer)
{
<a asp-action="GivPoint" asp-controller="Point" asp-route-id="@patrulje.Id" class="btn btn-primary mb-2">@patrulje.Name</a>
<a asp-action="GivPoint" asp-controller="Point" asp-route-id="@patrulje.Id" class="list-group-item">@patrulje.Name</a>
}
</ul>

View File

@@ -6,6 +6,6 @@
<ul class="list-group">
@foreach(var item in Model.Poster)
{
<a asp-action="SelectPost" asp-route-id="@item.Id" class="btn btn-primary">@item.Name</a>
<a asp-action="SelectPost" asp-route-id="@item.Id" class="list-group-item">@item.Name</a>
}
</ul>

View File

@@ -15,7 +15,10 @@
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<div class="navbar-brand">
<img src="~/favicon.svg" class="pe-2" />
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">pointMaster</a>
</div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>

View File

@@ -4,4 +4,4 @@
@{
ViewData["title"] = "Stats";
}
<hello-world></hello-world>
<stats></stats>

View File

@@ -1,10 +1,11 @@
import { createApp } from "vue";
import HelloWorld from "./components/HelloWorld.vue";
import Stats from "./components/Stats.vue";
import Test from "./components/Test.vue";
const app = createApp({});
app.component("hello-world", Stats);
app.component("stats", Stats);
(window as any).app = app;