Stats: add highest session average
This commit is contained in:
parent
87553ebdc5
commit
b505b5b430
|
@ -57,6 +57,12 @@
|
||||||
<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">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>
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ highest_session_count }} ({{ highest_session_count_game }})</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="px-2 sm:px-4 md:px-6 md:py-2">Highest session average</td>
|
||||||
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">
|
||||||
|
{{ highest_session_average }} ({{ highest_session_average_game }})
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<h1 class="text-5xl text-center my-6">Purchases</h1>
|
<h1 class="text-5xl text-center my-6">Purchases</h1>
|
||||||
|
|
|
@ -2,7 +2,7 @@ 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, ExpressionWrapper, F, Prefetch, Q, Sum, fields
|
from django.db.models import Avg, Count, ExpressionWrapper, F, Prefetch, Q, Sum, fields
|
||||||
from django.db.models.functions import Extract, TruncDate
|
from django.db.models.functions import Extract, TruncDate
|
||||||
from django.http import (
|
from django.http import (
|
||||||
HttpRequest,
|
HttpRequest,
|
||||||
|
@ -397,6 +397,14 @@ def stats(request, year: int = 0):
|
||||||
)
|
)
|
||||||
.values("id", "name", "total_playtime")
|
.values("id", "name", "total_playtime")
|
||||||
)
|
)
|
||||||
|
highest_session_average_game = (
|
||||||
|
Game.objects.filter(edition__purchase__session__in=this_year_sessions)
|
||||||
|
.annotate(
|
||||||
|
session_average=Avg("edition__purchase__session__duration_calculated")
|
||||||
|
)
|
||||||
|
.order_by("-session_average")
|
||||||
|
.first()
|
||||||
|
)
|
||||||
top_10_games_by_playtime = games_with_playtime.order_by("-total_playtime")[:10]
|
top_10_games_by_playtime = games_with_playtime.order_by("-total_playtime")[:10]
|
||||||
for game in top_10_games_by_playtime:
|
for game in top_10_games_by_playtime:
|
||||||
game["formatted_playtime"] = format_duration(game["total_playtime"], "%2.0H")
|
game["formatted_playtime"] = format_duration(game["total_playtime"], "%2.0H")
|
||||||
|
@ -467,6 +475,10 @@ def stats(request, year: int = 0):
|
||||||
"longest_session_game": longest_session.purchase.edition.name,
|
"longest_session_game": longest_session.purchase.edition.name,
|
||||||
"highest_session_count": game_highest_session_count.session_count,
|
"highest_session_count": game_highest_session_count.session_count,
|
||||||
"highest_session_count_game": game_highest_session_count.name,
|
"highest_session_count_game": game_highest_session_count.name,
|
||||||
|
"highest_session_average": format_duration(
|
||||||
|
highest_session_average_game.session_average, "%2.0Hh %2.0mm"
|
||||||
|
),
|
||||||
|
"highest_session_average_game": highest_session_average_game,
|
||||||
}
|
}
|
||||||
|
|
||||||
request.session["return_path"] = request.path
|
request.session["return_path"] = request.path
|
||||||
|
|
Loading…
Reference in New Issue