Add stats for most sessions, longest session
This commit is contained in:
		@ -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
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user