# 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')