add final rankings

clubs
Razmig Sarkissian 1 year ago
parent ca672ee1e3
commit 710106bd34
  1. 23
      tournaments/migrations/0052_teamregistration_final_ranking_and_more.py
  2. 2
      tournaments/models/__init__.py
  3. 2
      tournaments/models/match.py
  4. 4
      tournaments/models/team_registration.py
  5. 62
      tournaments/models/tournament.py
  6. 4
      tournaments/templates/tournaments/navigation_tournament.html
  7. 13
      tournaments/templates/tournaments/ranking_row.html
  8. 35
      tournaments/templates/tournaments/rankings.html
  9. 1
      tournaments/urls.py
  10. 10
      tournaments/views.py

@ -0,0 +1,23 @@
# Generated by Django 4.2.11 on 2024-05-21 16:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0051_club_court_count_alter_tournament_court_count'),
]
operations = [
migrations.AddField(
model_name='teamregistration',
name='final_ranking',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='teamregistration',
name='points_earned',
field=models.IntegerField(blank=True, null=True),
),
]

@ -5,7 +5,7 @@ from .date_interval import DateInterval
from .enums import TournamentPayment, FederalCategory, FederalLevelCategory, FederalAgeCategory, FederalMatchCategory
from .player_enums import PlayerSexType, PlayerDataSource, PlayerPaymentType
from .event import Event
from .tournament import Tournament, TeamSummon, TeamSortingType, TeamList, TeamListDisplay
from .tournament import Tournament, TeamSummon, TeamSortingType, TeamList
from .group_stage import GroupStage
from .round import Round
from .match import Match, LiveMatch

@ -90,6 +90,8 @@ class Match(models.Model):
def started(self):
if self.start_date:
return timezone.now() > self.start_date
elif self.end_date:
return True
else:
return False

@ -27,6 +27,10 @@ class TeamRegistration(models.Model):
confirmation_date = models.DateTimeField(null=True, blank=True)
qualified = models.BooleanField(default=False)
final_ranking = models.IntegerField(null=True, blank=True)
points_earned = models.IntegerField(null=True, blank=True)
def __str__(self):
if self.name:
return f"{self.name}: {self.player_names()}"

@ -91,6 +91,19 @@ class Tournament(models.Model):
summons.sort(key=lambda s: s.weight)
return summons
def rankings(self):
rankings = []
for team_registration in self.teamregistration_set.all():
if team_registration.walk_out is False and team_registration.final_ranking is not None:
names = team_registration.team_names()
ranking = team_registration.final_ranking
points = team_registration.points_earned
team = TeamRanking(names, ranking, points, team_registration.logo)
rankings.append(team)
rankings.sort(key=lambda s: s.ranking)
return rankings
def teams(self):
bracket_teams = []
group_stage_teams = []
@ -144,22 +157,16 @@ class Tournament(models.Model):
bracket_teams.sort(key=lambda s: s.weight)
group_stage_teams.sort(key=lambda s: s.weight)
final_bracket_teams = []
for team in bracket_teams:
display_team = TeamListDisplay(team.names, team.weight, team.date, team.initial_weight, "Tableau", team.image)
final_bracket_teams.append(display_team)
team.set_stage("Tableau")
final_group_stage_teams = []
for team in group_stage_teams:
display_team = TeamListDisplay(team.names, team.weight, team.date, team.initial_weight, "Poule", team.image)
final_group_stage_teams.append(display_team)
team.set_stage("Poule")
final_waiting_teams = []
for team in waiting_teams:
display_team = TeamListDisplay(team.names, team.weight, team.date, team.initial_weight, "Attente", team.image)
final_waiting_teams.append(display_team)
team.set_stage("Liste d'attente")
final_teams = final_bracket_teams + final_group_stage_teams + final_waiting_teams
final_teams = bracket_teams + group_stage_teams + waiting_teams
return final_teams
def match_groups(self, broadcasted, group_stage_id, round_id):
@ -342,6 +349,12 @@ class Tournament(models.Model):
matches.sort(key=lambda m: m.start_date, reverse=True)
return matches
def display_rankings(self):
return True
# if self.end_date is not None:
# return True
# return False
def display_teams(self):
if self.end_date is not None:
return True
@ -469,6 +482,10 @@ class TeamList:
self.weight = weight
self.initial_weight = initial_weight
self.image = image
self.stage = ""
def set_stage(self, stage):
self.stage = stage
def to_dict(self):
return {
@ -477,23 +494,28 @@ class TeamList:
"weight": self.weight,
"initial_weight": self.initial_weight,
"image": self.image,
"stage": self.stage,
}
class TeamListDisplay:
def __init__(self, names, weight, date, initial_weight, stage, image):
class TeamRanking:
def __init__(self, names, ranking, points, image):
self.names = names
self.date = date
self.weight = weight
self.initial_weight = initial_weight
self.stage = stage
self.ranking = ranking
self.points = points
self.image = image
def ranking_display(self):
return f"{self.ranking + 1}"
def points_earned_display(self):
if self.points is None:
return ""
return f"+{self.points} pts"
def to_dict(self):
return {
"names": self.names,
"date": self.date,
"weight": self.weight,
"initial_weight": self.initial_weight,
"stage": self.stage,
"ranking": self.ranking_display(),
"points": self.points_earned_display(),
"image": self.image,
}

@ -15,4 +15,8 @@
<a href="{% url 'tournament-teams' tournament.id %}" class="mybox">Équipes</a>
{% endif %}
{% if tournament.display_rankings %}
<a href="{% url 'tournament-rankings' tournament.id %}" class="mybox">Classement</a>
{% endif %}
</nav>

@ -0,0 +1,13 @@
{% load static %}
<div class="table-row-4-colums bottom-border">
<div class="table-cell table-cell-large semibold">
{% for name in ranking.names %}
<div>{{ name }}</div>
{% endfor %}
</div>
<div class="table-cell center">{{ ranking.ranking }}</div>
<div class="table-cell"><div class="mybox center">{{ ranking.points }}</div></div>
</div>

@ -0,0 +1,35 @@
{% extends 'tournaments/base.html' %}
{% block head_title %}Classement{% endblock %}
{% block first_title %}{{ tournament.display_name }}{% endblock %}
{% block second_title %}Classement{% endblock %}
{% if tournament.display_rankings %}
{% block content %}
{% load static %}
{% include 'tournaments/navigation_tournament.html' %}
{% if rankings %}
<div class="grid-x padding-bottom">
<div class="cell medium-6 large-6 my-block">
<div class="bubble">
{% for ranking in rankings %}
{% include 'tournaments/ranking_row.html' %}
{% endfor %}
</div>
</div>
</div>
{% endif %}
{% endblock %}
{% endif %}

@ -10,6 +10,7 @@ urlpatterns = [
include([
path('', views.tournament, name='tournament'),
path('teams/', views.tournament_teams, name='tournament-teams'),
path('rankings/', views.tournament_rankings, name='tournament-rankings'),
path('summons/', views.tournament_summons, name='tournament-summons'),
path('broadcast/summons/', views.tournament_broadcasted_summons, name='broadcasted-summons'),
path('summons/json/', views.tournament_summons_json, name='tournament-summons-json'),

@ -97,6 +97,16 @@ def tournament(request, tournament_id):
'match_groups': match_groups,
})
def tournament_rankings(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
rankings = tournament.rankings()
return render(request, 'tournaments/rankings.html', {
'tournament': tournament,
'rankings': rankings,
})
def tournament_teams(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)

Loading…
Cancel
Save