Add stats for most sessions, longest session
This commit is contained in:
parent
c55fbe86b5
commit
c9deba7d65
|
@ -51,6 +51,14 @@
|
||||||
<td class="px-2 sm:px-4 md:px-6 md:py-2">Finished ({{ year }})</td>
|
<td class="px-2 sm:px-4 md:px-6 md:py-2">Finished ({{ year }})</td>
|
||||||
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ this_year_finished_this_year.count }}</td>
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ this_year_finished_this_year.count }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="px-2 sm:px-4 md:px-6 md:py-2">Longest session</td>
|
||||||
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ longest_session_time }} ({{ longest_session_game }})</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="px-2 sm:px-4 md:px-6 md:py-2">Most sessions</td>
|
||||||
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ highest_session_count }} ({{ highest_session_count_game }})</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -2,8 +2,8 @@ from datetime import datetime, timedelta
|
||||||
from typing import Any, Callable
|
from typing import Any, Callable
|
||||||
|
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.db.models import Count, F, Prefetch, Q, Sum
|
from django.db.models import Count, ExpressionWrapper, F, Prefetch, Q, Sum, fields
|
||||||
from django.db.models.functions import TruncDate
|
from django.db.models.functions import Extract, TruncDate
|
||||||
from django.http import (
|
from django.http import (
|
||||||
HttpRequest,
|
HttpRequest,
|
||||||
HttpResponse,
|
HttpResponse,
|
||||||
|
@ -321,6 +321,22 @@ def stats(request, year: int = 0):
|
||||||
if year == 0:
|
if year == 0:
|
||||||
year = timezone.now().year
|
year = timezone.now().year
|
||||||
this_year_sessions = Session.objects.filter(timestamp_start__year=year)
|
this_year_sessions = Session.objects.filter(timestamp_start__year=year)
|
||||||
|
this_year_sessions_with_durations = this_year_sessions.annotate(
|
||||||
|
duration=ExpressionWrapper(
|
||||||
|
F("timestamp_end") - F("timestamp_start"),
|
||||||
|
output_field=fields.DurationField(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
longest_session = this_year_sessions_with_durations.order_by("-duration").first()
|
||||||
|
this_year_games_with_session_counts = Game.objects.annotate(
|
||||||
|
session_count=Count(
|
||||||
|
"edition__purchase__session",
|
||||||
|
filter=Q(edition__purchase__session__timestamp_start__year=year),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
game_highest_session_count = this_year_games_with_session_counts.order_by(
|
||||||
|
"-session_count"
|
||||||
|
).first()
|
||||||
selected_currency = "CZK"
|
selected_currency = "CZK"
|
||||||
unique_days = (
|
unique_days = (
|
||||||
this_year_sessions.annotate(date=TruncDate("timestamp_start"))
|
this_year_sessions.annotate(date=TruncDate("timestamp_start"))
|
||||||
|
@ -444,6 +460,13 @@ def stats(request, year: int = 0):
|
||||||
"date_purchased"
|
"date_purchased"
|
||||||
),
|
),
|
||||||
"backlog_decrease_count": backlog_decrease_count,
|
"backlog_decrease_count": backlog_decrease_count,
|
||||||
|
"longest_session_time": format_duration(
|
||||||
|
longest_session.duration if longest_session else timedelta(0),
|
||||||
|
"%2.0Hh%2.0mm",
|
||||||
|
),
|
||||||
|
"longest_session_game": longest_session.purchase.edition.name,
|
||||||
|
"highest_session_count": game_highest_session_count.session_count,
|
||||||
|
"highest_session_count_game": game_highest_session_count.name,
|
||||||
}
|
}
|
||||||
|
|
||||||
request.session["return_path"] = request.path
|
request.session["return_path"] = request.path
|
||||||
|
|
Loading…
Reference in New Issue