Add stats link, year selector
This commit is contained in:
parent
3ee36932c3
commit
71b90b8202
|
@ -1,5 +1,9 @@
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
### New
|
||||||
|
* Add Stats to the main navigation
|
||||||
|
* Allow selecting year on the Stats page
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* Correctly limit sessions to a single year for stats
|
* Correctly limit sessions to a single year for stats
|
||||||
|
|
||||||
|
|
|
@ -791,11 +791,6 @@ select {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.my-5 {
|
|
||||||
margin-top: 1.25rem;
|
|
||||||
margin-bottom: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.my-6 {
|
.my-6 {
|
||||||
margin-top: 1.5rem;
|
margin-top: 1.5rem;
|
||||||
margin-bottom: 1.5rem;
|
margin-bottom: 1.5rem;
|
||||||
|
@ -805,6 +800,10 @@ select {
|
||||||
margin-bottom: 0.25rem;
|
margin-bottom: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mb-10 {
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.mb-4 {
|
.mb-4 {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
@ -829,6 +828,10 @@ select {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.inline-block {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
.inline {
|
.inline {
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
<li><a class="block py-2 pl-3 pr-4 hover:underline" href="{% url 'add_device' %}">New Device</a></li>
|
<li><a class="block py-2 pl-3 pr-4 hover:underline" href="{% url 'add_device' %}">New Device</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if session_count > 0 %}
|
{% if session_count > 0 %}
|
||||||
|
<li><a class="block py-2 pl-3 pr-4 hover:underline" href="{% url 'stats_current_year' %}">Stats</a></li>
|
||||||
<li><a class="block py-2 pl-3 pr-4 hover:underline" href="{% url 'list_sessions' %}">All Sessions</a></li>
|
<li><a class="block py-2 pl-3 pr-4 hover:underline" href="{% url 'list_sessions' %}">All Sessions</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -6,7 +6,15 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="dark:text-white max-w-sm sm:max-w-xl lg:max-w-3xl mx-auto">
|
<div class="dark:text-white max-w-sm sm:max-w-xl lg:max-w-3xl mx-auto">
|
||||||
<h1 class="text-5xl text-center my-6">Stats for {{ year }}</h1>
|
<div class="flex justify-center items-center">
|
||||||
|
<form method="get" class="text-center">
|
||||||
|
<label class="text-5xl text-center inline-block mb-10" for="yearSelect">Stats for:</label>
|
||||||
|
<select name="year" id="yearSelect" onchange="this.form.submit();" class="mx-2">
|
||||||
|
<option value="2022" {% if year == 2022 %}selected{% endif %}>2022</option>
|
||||||
|
<option value="2023" {% if year == 2023 %}selected{% endif %}>2023</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
<table class="responsive-table">
|
<table class="responsive-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
|
@ -73,6 +73,7 @@ urlpatterns = [
|
||||||
{"filter": "ownership_type"},
|
{"filter": "ownership_type"},
|
||||||
name="list_sessions_by_ownership_type",
|
name="list_sessions_by_ownership_type",
|
||||||
),
|
),
|
||||||
|
path("stats/", views.stats, name="stats_current_year"),
|
||||||
path(
|
path(
|
||||||
"stats/<int:year>",
|
"stats/<int:year>",
|
||||||
views.stats,
|
views.stats,
|
||||||
|
|
|
@ -6,6 +6,8 @@ from common.time import format_duration
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.db.models import Sum, F
|
from django.db.models import Sum, F
|
||||||
|
from django.http import HttpResponseRedirect
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from .forms import (
|
from .forms import (
|
||||||
GameForm,
|
GameForm,
|
||||||
|
@ -230,7 +232,12 @@ def list_sessions(
|
||||||
return render(request, "list_sessions.html", context)
|
return render(request, "list_sessions.html", context)
|
||||||
|
|
||||||
|
|
||||||
def stats(request, year: int):
|
def stats(request, year: int = 0):
|
||||||
|
selected_year = request.GET.get("year")
|
||||||
|
if selected_year:
|
||||||
|
return HttpResponseRedirect(reverse("stats_by_year", args=[selected_year]))
|
||||||
|
if year == 0:
|
||||||
|
year = now_with_tz().year
|
||||||
first_day_of_year = datetime(year, 1, 1)
|
first_day_of_year = datetime(year, 1, 1)
|
||||||
last_day_of_year = datetime(year + 1, 1, 1)
|
last_day_of_year = datetime(year + 1, 1, 1)
|
||||||
year_sessions = Session.objects.filter(
|
year_sessions = Session.objects.filter(
|
||||||
|
|
Loading…
Reference in New Issue