diff --git a/draw/models.py b/draw/models.py new file mode 100644 index 0000000..356f1df --- /dev/null +++ b/draw/models.py @@ -0,0 +1,102 @@ +# 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'), + ) + + 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.IntegerField( + choices=[ + (1, _('Round 1')), + (2, _('Round 2')), + ], + verbose_name=_('number'), + ) + + 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.CharField( + max_length=1, + choices=[ + ('A', 'A'), + ('B', 'B'), + ('C', 'C'), + ], + verbose_name=_('letter'), + ) + + 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'), + ) + + accepted = models.IntegerField( + 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"), + ) + + purposed = models.IntegerField( + 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=[], + verbose_name=_('rejected problems'), + ) + + class Meta: + verbose_name = _('team draw') + verbose_name_plural = _('team draws')