From 811fec4b1163536d07c7d1691659475fd23f18d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Tue, 2 Jul 2024 17:14:56 +0200 Subject: [PATCH] Ignore manual sessions when calculating session average --- CHANGELOG.md | 1 + games/models.py | 13 +++++++++++++ games/templates/view_game.html | 2 +- games/views.py | 14 ++++++++++++-- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7824f36..8e81e0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * game overview: * sort purchases also by date purchased (on top of date released) * improve header format + * ignore manual sessions when calculating session average * stats: improve purchase name consistency * session list: use display name instead of sort name diff --git a/games/models.py b/games/models.py index 4288f58..da039cd 100644 --- a/games/models.py +++ b/games/models.py @@ -152,6 +152,19 @@ class SessionQuerySet(models.QuerySet): ) return result["duration"] + def calculated_duration_formatted(self): + return format_duration(self.calculated_duration_unformatted()) + + def calculated_duration_unformatted(self): + result = self.aggregate(duration=Sum(F("duration_calculated"))) + return result["duration"] + + def without_manual(self): + return self.exclude(duration_calculated__iexact=0) + + def only_manual(self): + return self.filter(duration_calculated__iexact=0) + class Session(models.Model): class Meta: diff --git a/games/templates/view_game.html b/games/templates/view_game.html index 35061af..422770f 100644 --- a/games/templates/view_game.html +++ b/games/templates/view_game.html @@ -14,7 +14,7 @@

First Released: {{ game.year_released }}

Playtime: - {{ hours_sum }} hours over {{ session_count }} sessions ({{ session_average }}/session) + {{ hours_sum }} hours over {{ session_count }} sessions ({{ session_average_without_manual }}/session)

Played in: diff --git a/games/views.py b/games/views.py index 8a3250c..d354efe 100644 --- a/games/views.py +++ b/games/views.py @@ -175,6 +175,9 @@ def view_game(request, game_id=None): purchase__edition__game=game ) session_count = sessions.count() + session_count_without_manual = ( + Session.objects.without_manual().filter(purchase__edition__game=game).count() + ) playrange_start = sessions.earliest().timestamp_start.strftime("%b %Y") latest_session = sessions.latest() @@ -186,14 +189,21 @@ def view_game(request, game_id=None): else f"{playrange_start} — {playrange_end}" ) total_hours = float(format_duration(sessions.total_duration_unformatted(), "%2.1H")) - + total_hours_without_manual = float( + format_duration(sessions.calculated_duration_unformatted(), "%2.1H") + ) context = { "edition_count": editions.count(), "editions": editions, "game": game, "playrange": playrange, "purchase_count": Purchase.objects.filter(edition__game=game).count(), - "session_average": round(total_hours / int(session_count), 1), + "session_average_without_manual": round( + safe_division( + total_hours_without_manual, int(session_count_without_manual) + ), + 1, + ), "session_count": session_count, "sessions_with_notes_count": sessions.exclude(note="").count(), "sessions": sessions.order_by("-timestamp_start"),