You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
padelclub_backend/tournaments/models/team_score.py

78 lines
2.7 KiB

from django.db import models
from . import SideStoreModel, Match, TeamRegistration, PlayerRegistration, FederalMatchCategory
import uuid
class TeamScore(SideStoreModel):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
match = models.ForeignKey(Match, on_delete=models.CASCADE, related_name="team_scores")
team_registration = models.ForeignKey(TeamRegistration, on_delete=models.CASCADE, null=True, blank=True)
score = models.CharField(max_length=50, null=True, blank=True)
walk_out = models.IntegerField(null=True, blank=True) # TODO type of WO: forfeit, injury...
lucky_loser = models.IntegerField(null=True, blank=True)
def __str__(self):
return f"{self.match.stage_name()} #{self.match.index}: {self.player_names()}"
def tournament(self):
if self.team_registration:
return self.team_registration.tournament
elif self.match:
return self.match.tournament()
else:
return None
def tournament_id(self):
return self.tournament().id
def player_names(self):
if self.team_registration:
if self.team_registration.name:
return self.team_registration.name
else:
names = self.team_registration.team_names()
return " - ".join(names)
else:
return "--"
def shortened_team_names(self):
names = []
if self.team_registration:
names = self.team_registration.shortened_team_names()
return names
def team_names(self):
names = []
if self.team_registration:
if self.team_registration.name:
names.append(self.team_registration.name)
else:
names = self.team_registration.team_names()
return names
def scores(self):
if self.score:
return [int(x) for x in self.score.split(',')]
else:
return []
def scores_array(self):
if self.score:
return [x for x in self.score.split(',')]
else:
return []
def estimated_number_of_games(self):
scores = self.scores()
format = FederalMatchCategory.NINE_GAMES_DECISIVE_POINT
games = 0.0
if self.match.format:
format = self.match.format
if FederalMatchCategory.last_set_is_tie_break(format) and len(scores) == FederalMatchCategory.max_number_of_sets(format):
points = scores.pop()
games += points / 7 # we take 7 points in average for a game
games += sum(scores)
return games
def number_of_games(self):
scores = self.scores()
return sum(scores)