Adds system to fix duration if they are not plausible

clubs
Laurent 1 year ago
parent d5f1d7dc90
commit 061ecdea4a
  1. 52
      tournaments/models/match.py
  2. 4
      tournaments/models/team_score.py

@ -5,6 +5,8 @@ from django.utils import timezone, formats
from datetime import timedelta from datetime import timedelta
import uuid import uuid
from ..utils.extensions import format_seconds
class Match(models.Model): class Match(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
round = models.ForeignKey(Round, null=True, blank=True, on_delete=models.CASCADE) round = models.ForeignKey(Round, null=True, blank=True, on_delete=models.CASCADE)
@ -88,7 +90,7 @@ class Match(models.Model):
def time_indication(self): def time_indication(self):
if self.end_date: if self.end_date:
if self.start_date: if self.start_date:
return self.formatted_duration() return self.magic_duration()
else: else:
return '' return ''
elif self.start_date: elif self.start_date:
@ -100,12 +102,36 @@ class Match(models.Model):
else: else:
return 'À venir...' return 'À venir...'
def magic_duration(self):
seconds = (self.end_date - self.start_date).total_seconds()
average_duration = self.average_seconds_duration()
# print(f"{average_duration} / {seconds}")
if (average_duration / 2) > seconds or seconds > (average_duration * 2):
seconds = average_duration
return format_seconds(seconds)
def average_seconds_duration(self):
return 3 * 60 * self.total_number_of_games()
def total_number_of_games(self):
games = 0
for team_score in self.team_scores.all():
games += team_score.number_of_games()
return games
def current_duration(self): def current_duration(self):
if self.start_date: if self.start_date:
if self.end_date: if self.end_date:
return (self.end_date - self.start_date).total_seconds() return (self.end_date - self.start_date).total_seconds()
else: else:
return (timezone.now() - self.start_date).total_seconds() current = (timezone.now() - self.start_date).total_seconds()
if current < self.average_seconds_duration() * 2:
return current
else:
return None
# return (timezone.now() - self.start_date).total_seconds()
else: else:
return 0 return 0
@ -127,17 +153,21 @@ class Match(models.Model):
def formatted_duration(self): def formatted_duration(self):
_seconds = self.current_duration() seconds = self.current_duration()
if seconds is None:
return ''
if _seconds > 0: if seconds > 0:
_hours = int(_seconds / 3600) return format_seconds(seconds)
_minutes = int((_seconds % 3600) / 60) # _hours = int(_seconds / 3600)
return f"{_hours:02d}h{_minutes:02d}min" # _minutes = int((_seconds % 3600) / 60)
# return f"{_hours:02d}h{_minutes:02d}min"
else : else :
_seconds = _seconds * -1 seconds = seconds * -1
_hours = int(_seconds / 3600) return format_seconds(seconds)
_minutes = int((_seconds % 3600) / 60) # _hours = int(_seconds / 3600)
return f"{_hours:02d}h{_minutes:02d}min" # _minutes = int((_seconds % 3600) / 60)
# return f"{_hours:02d}h{_minutes:02d}min"
def live_match(self): def live_match(self):
title = self.name if self.name else self.backup_name() title = self.name if self.name else self.backup_name()

@ -40,3 +40,7 @@ class TeamScore(models.Model):
return [x for x in self.score.split(',')] return [x for x in self.score.split(',')]
else: else:
return [] return []
def number_of_games(self):
scores = self.scores()
return sum(scores)

Loading…
Cancel
Save