155 lines
3.6 KiB
Python
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')
|