from django.shortcuts import render, get_object_or_404 from django.contrib.auth.decorators import login_required from django.http import HttpResponseForbidden from clubs.models import Team from calendars.models import Game, GameResult @login_required def team_statistics(request, team_id): team = get_object_or_404(Team, pk=team_id) # Check if the user is the head coach of the team if request.user != team.head_coach: return HttpResponseForbidden("You are not authorized to view this page.") games = Game.objects.filter(team=team, result__isnull=False).order_by('start_time') wins = 0 losses = 0 runs_scored = 0 runs_allowed = 0 inning_runs = {i: 0 for i in range(1, 10)} streak_counter = 0 current_streak_type = None last_game_result = None for game in games: result = game.result print("DEBUGGER:"+str(result)) print("INNING_RESULTS:"+str(result.inning_results)) sorted_items = sorted(result.inning_results.items(),key=lambda x: int(x[0].split('_')[1])) home_innings = [ item[1].get('home') for item in sorted_items if isinstance(item[1].get('home'), int) ] sorted_items = sorted(result.inning_results.items(),key=lambda x: int(x[0].split('_')[1])) away_innings = [ item[1].get('guest') for item in sorted_items if isinstance(item[1].get('guest'), int) ] home_score = sum(home_innings) away_score = sum(away_innings) print("HOMEINNING:"+str(home_innings)) if game.is_home_game: print("HEIMSPIEL") team_score = home_score opponent_score = away_score print("Teamscore"+str(team_score)) print("Gegnerscore"+str(opponent_score)) else: print("Auswerts") team_score = away_score opponent_score = home_score print("Teamscore"+str(team_score)) print("Gegnerscore"+str(opponent_score)) runs_scored += team_score runs_allowed += opponent_score # W-L Record and Streak if team_score > opponent_score: wins += 1 if last_game_result == 'win': streak_counter += 1 else: streak_counter = 1 last_game_result = 'win' elif team_score < opponent_score: losses += 1 if last_game_result == 'loss': streak_counter += 1 else: streak_counter = 1 last_game_result = 'loss' print("Win:"+str(wins)) print("Looses:"+str(losses)) # Inning Heatmap team_innings = home_innings if game.is_home_game else away_innings for i, runs in enumerate(team_innings): if i + 1 in inning_runs: inning_runs[i + 1] += runs # Winning Percentage (PCT) total_games = wins + losses pct = (wins / total_games) * 100 if total_games > 0 else 0 # Streak if last_game_result == 'win': streak_str = f"Won {streak_counter}" elif last_game_result == 'loss': streak_str = f"Lost {streak_counter}" else: streak_str = "N/A" # Pythagorean Winning Percentage if runs_scored > 0 or runs_allowed > 0: pythagorean_pct = (runs_scored**2 / (runs_scored**2 + runs_allowed**2)) * 100 else: pythagorean_pct = 0 context = { 'team': team, 'wins': wins, 'losses': losses, 'pct': pct, 'streak': streak_str, 'runs_scored': runs_scored, 'runs_allowed': runs_allowed, 'pythagorean_pct': pythagorean_pct, 'inning_runs': inning_runs, } print("DebuggeR:"+str(context)) return render(request, 'team_stats/team_statistics.html', context)