plateforme-tfjm2/draw/models.py

155 lines
3.6 KiB
Python

# Copyright (C) 2023 by Animath
# SPDX-License-Identifier: GPL-3.0-or-later
from django.conf import settings
from django.db import models
from django.utils.text import format_lazy
from django.utils.translation import gettext_lazy as _
from participation.models import Participation, Tournament
class Draw(models.Model):
tournament = models.OneToOneField(
Tournament,
on_delete=models.CASCADE,
verbose_name=_('tournament'),
)
current_round = models.ForeignKey(
'Round',
on_delete=models.CASCADE,
null=True,
default=None,
related_name='+',
verbose_name=_('current round'),
)
class Meta:
verbose_name = _('draw')
verbose_name_plural = _('draws')
class Round(models.Model):
draw = models.ForeignKey(
Draw,
on_delete=models.CASCADE,
verbose_name=_('draw'),
)
number = models.PositiveSmallIntegerField(
choices=[
(1, _('Round 1')),
(2, _('Round 2')),
],
verbose_name=_('number'),
)
current_pool = models.ForeignKey(
'Pool',
on_delete=models.CASCADE,
null=True,
default=None,
related_name='+',
verbose_name=_('current pool'),
)
def __str__(self):
return self.get_number_display()
class Meta:
verbose_name = _('round')
verbose_name_plural = _('rounds')
class Pool(models.Model):
round = models.ForeignKey(
Round,
on_delete=models.CASCADE,
)
letter = models.PositiveSmallIntegerField(
choices=[
(1, 'A'),
(2, 'B'),
(3, 'C'),
],
verbose_name=_('letter'),
)
size = models.PositiveSmallIntegerField(
verbose_name=_('size'),
)
current_team = models.ForeignKey(
'TeamDraw',
on_delete=models.CASCADE,
null=True,
default=None,
related_name='+',
verbose_name=_('current team'),
)
def __str__(self):
return f"{self.letter}{self.round}"
class Meta:
verbose_name = _('pool')
verbose_name_plural = _('pools')
class TeamDraw(models.Model):
participation = models.ForeignKey(
Participation,
on_delete=models.CASCADE,
verbose_name=_('participation'),
)
pool = models.ForeignKey(
Pool,
on_delete=models.CASCADE,
null=True,
default=None,
verbose_name=_('pool'),
)
index = models.PositiveSmallIntegerField(
choices=zip(range(1, 6), range(1, 6)),
null=True,
default=None,
verbose_name=_('index'),
)
accepted = models.PositiveSmallIntegerField(
choices=[
(i, format_lazy(_("Problem #{problem}"), problem=i)) for i in range(1, settings.PROBLEM_COUNT + 1)
],
null=True,
default=None,
verbose_name=_("accepted problem"),
)
last_dice = models.PositiveSmallIntegerField(
choices=zip(range(1, 101), range(1, 101)),
null=True,
default=None,
verbose_name=_("last dice"),
)
purposed = models.PositiveSmallIntegerField(
choices=[
(i, format_lazy(_("Problem #{problem}"), problem=i)) for i in range(1, settings.PROBLEM_COUNT + 1)
],
null=True,
default=None,
verbose_name=_("accepted problem"),
)
rejected = models.JSONField(
default=list,
verbose_name=_('rejected problems'),
)
class Meta:
verbose_name = _('team draw')
verbose_name_plural = _('team draws')