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)