fix issue on new page team

clubs
Razmig Sarkissian 2 years ago
parent 96362c2b5c
commit d9a5358080
  1. 18
      tournaments/migrations/0050_alter_tournament_team_sorting.py
  2. 2
      tournaments/models/__init__.py
  3. 2
      tournaments/models/group_stage.py
  4. 19
      tournaments/models/team_registration.py
  5. 104
      tournaments/models/tournament.py

@ -0,0 +1,18 @@
# Generated by Django 4.2.11 on 2024-05-16 17:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0049_purchase_revocation_date'),
]
operations = [
migrations.AlterField(
model_name='tournament',
name='team_sorting',
field=models.IntegerField(choices=[(1, 'Rank'), (2, 'Inscription Date')], default=2),
),
]

@ -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
from .tournament import Tournament, TeamSummon, TeamSortingType, TeamList, TeamListDisplay
from .group_stage import GroupStage
from .round import Round
from .match import Match, LiveMatch

@ -21,7 +21,7 @@ class GroupStage(models.Model):
if self.name:
return self.name
else:
return f"Poule {self.index}"
return f"Poule {self.index + 1}"
def next_match(self, player_registration):
matches = self.matches_for_registration(player_registration).filter(end_date__isnull=False).order_by('start_date')

@ -70,21 +70,12 @@ class TeamRegistration(models.Model):
return self.group_stage.name()
else:
return "--"
for player in top_two_players:
rank = player.rank if player.rank is not None else 0
weight += rank
return weight
def is_valid_for_summon(self):
return len(self.playerregistration_set.all()) > 0
def is_valid_for_display(self):
return len(self.playerregistration_set.all()) > 0 and self.walk_out is False
def base_start_stage(self):
if self.group_stage_position is not None:
return "Poule"
if self.bracket_position is not None:
return "Tableau"
return "Attente"
def initial_weight(self):
if self.locked_weight is None:
return self.weight
else:
return self.locked_weight

@ -1,9 +1,18 @@
from django.db import models
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from tournaments.models import group_stage
from . import Event, TournamentPayment, FederalMatchCategory, FederalCategory, FederalLevelCategory, FederalAgeCategory
import uuid
from django.utils import timezone, formats
from datetime import datetime
class TeamSortingType(models.IntegerChoices):
RANK = 1, 'Rank'
INSCRIPTION_DATE = 2, 'Inscription Date'
class Tournament(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
event = models.ForeignKey(Event, blank=True, null=True, on_delete=models.CASCADE)
@ -21,7 +30,7 @@ class Tournament(models.Model):
rank_source_date = models.DateTimeField(null=True, blank=True)
day_duration = models.IntegerField(default=0)
team_count = models.IntegerField(default=0)
team_sorting = models.IntegerField(default=0)
team_sorting = models.IntegerField(default=TeamSortingType.INSCRIPTION_DATE, choices=TeamSortingType.choices)
federal_category = models.IntegerField(default=FederalCategory.MEN, choices=FederalCategory.choices) # optional ?
federal_level_category = models.IntegerField(default=FederalLevelCategory.P100, choices=FederalLevelCategory.choices)
federal_age_category = models.IntegerField(default=FederalAgeCategory.SENIOR, choices=FederalAgeCategory.choices)
@ -83,17 +92,75 @@ class Tournament(models.Model):
return summons
def teams(self):
bracket_teams = []
group_stage_teams = []
waiting_teams = []
teams = []
wildcard_bracket = []
wildcard_group_stage = []
complete_teams = []
for team_registration in self.teamregistration_set.all():
if team_registration.is_valid_for_display():
if team_registration.walk_out is False:
names = team_registration.team_names()
weight = team_registration.weight
stage = team_registration.base_start_stage()
team = Team(names, weight, stage, team_registration.logo)
initial_weight = team_registration.initial_weight()
date = team_registration.registration_date
team = TeamList(names, weight, date, initial_weight, team_registration.logo)
teams.append(team)
if team_registration.wild_card_bracket:
wildcard_bracket.append(team)
elif team_registration.wild_card_group_stage:
wildcard_group_stage.append(team)
else:
complete_teams.append(team)
seeds_count = min(self.team_count, len(teams)) - self.group_stage_count * self.teams_per_group_stage - len(wildcard_bracket)
group_stage_members_count = self.group_stage_count * self.teams_per_group_stage - len(wildcard_group_stage)
if group_stage_members_count < 0:
group_stage_members_count = 0
if seeds_count < 0:
seeds_count = 0
if self.team_sorting == TeamSortingType.INSCRIPTION_DATE:
complete_teams.sort(key=lambda s: (s.date, s.initial_weight))
else:
complete_teams.sort(key=lambda s: (s.initial_weight, s.date))
teams.sort(key=lambda s: s.weight)
return teams
selected_teams = complete_teams[:self.team_count]
selected_teams.sort(key=lambda s: s.initial_weight)
bracket_teams = selected_teams[:seeds_count] + wildcard_bracket
group_stage_teams = selected_teams[-group_stage_members_count:] + wildcard_group_stage
waiting_list_count = len(complete_teams) - self.team_count
if waiting_list_count < 0:
waiting_list_count = 0
waiting_teams = complete_teams[-waiting_list_count:]
if self.team_sorting == TeamSortingType.INSCRIPTION_DATE:
waiting_teams.sort(key=lambda s: (s.date, s.initial_weight))
else:
waiting_teams.sort(key=lambda s: (s.initial_weight, s.date))
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)
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)
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)
final_teams = final_bracket_teams + final_group_stage_teams + final_waiting_teams
return final_teams
def match_groups(self, broadcasted, group_stage_id, round_id):
@ -391,17 +458,38 @@ class TeamSummon:
"image": self.image,
}
class Team:
def __init__(self, names, weight, stage, image):
class TeamList:
def __init__(self, names, weight, date, initial_weight, image):
self.names = names
self.date = date
self.weight = weight
self.initial_weight = initial_weight
self.image = image
def to_dict(self):
return {
"names": self.names,
"date": self.date,
"weight": self.weight,
"initial_weight": self.initial_weight,
"image": self.image,
}
class TeamListDisplay:
def __init__(self, names, weight, date, initial_weight, stage, image):
self.names = names
self.date = date
self.weight = weight
self.initial_weight = initial_weight
self.stage = stage
self.image = image
def to_dict(self):
return {
"names": self.names,
"date": self.date,
"weight": self.weight,
"initial_weight": self.initial_weight,
"stage": self.stage,
"image": self.image,
}

Loading…
Cancel
Save