plateforme-tfjm2/apps/tournament/models.py

172 lines
4.0 KiB
Python

import os
from django.db import models
from django.utils.translation import gettext_lazy as _
class Tournament(models.Model):
name = models.CharField(
max_length=255,
verbose_name=_("name"),
)
organizers = models.ManyToManyField(
'member.TFJMUser',
related_name="organized_tournaments",
verbose_name=_("organizers"),
)
size = models.PositiveSmallIntegerField(
verbose_name=_("size"),
)
place = models.CharField(
max_length=255,
verbose_name=_("place"),
)
price = models.PositiveSmallIntegerField(
verbose_name=_("price"),
)
description = models.TextField(
verbose_name=_("description"),
)
date_start = models.DateField(
verbose_name=_("date start"),
)
date_end = models.DateField(
verbose_name=_("date start"),
)
date_inscription = models.DateTimeField(
verbose_name=_("date of registration closing"),
)
date_solutions = models.DateTimeField(
verbose_name=_("date of maximal solution submission"),
)
date_syntheses = models.DateTimeField(
verbose_name=_("date of maximal syntheses submission"),
)
final = models.BooleanField(
verbose_name=_("final tournament"),
)
year = models.PositiveIntegerField(
verbose_name=_("year")
)
@classmethod
def get_final(cls):
return cls.objects.get(year=os.getenv("TFJM_YEAR"), final=True)
class Meta:
verbose_name = _("tournament")
verbose_name_plural = _("tournaments")
class Team(models.Model):
name = models.CharField(
max_length=255,
verbose_name=_("name"),
)
trigram = models.CharField(
max_length=3,
verbose_name=_("trigram"),
)
tournament = models.ForeignKey(
Tournament,
on_delete=models.PROTECT,
verbose_name=_("tournament"),
)
inscription_date = models.DateTimeField(
auto_now_add=True,
verbose_name=_("inscription date"),
)
validation_status = models.CharField(
max_length=8,
choices=[
("invalid", _("Registration not validated")),
("waiting", _("Waiting for validation")),
("valid", _("Registration validated")),
],
verbose_name=_("validation status"),
)
selected_for_final = models.BooleanField(
default=False,
verbose_name=_("selected for final"),
)
access_code = models.CharField(
max_length=6,
unique=True,
verbose_name=_("access code"),
)
year = models.PositiveIntegerField(
verbose_name=_("year"),
)
@property
def encadrants(self):
return self.users.filter(role="encadrant")
@property
def participants(self):
return self.users.filter(role="participant")
class Meta:
verbose_name = _("team")
verbose_name_plural = _("teams")
unique_together = (('name', 'year',), ('trigram', 'year',),)
class Payment(models.Model):
user = models.OneToOneField(
'member.TFJMUser',
on_delete=models.CASCADE,
related_name="payment",
verbose_name=_("user"),
)
team = models.ForeignKey(
Team,
on_delete=models.CASCADE,
related_name="payments",
verbose_name=_("team"),
)
method = models.CharField(
max_length=16,
choices=[
("not_paid", _("Not paid")),
("credit_card", _("Credit card")),
("check", _("Bank check")),
("transfer", _("Bank transfer")),
("cash", _("Cash")),
("scholarship", _("Scholarship")),
],
default="not_paid",
verbose_name=_("payment method"),
)
validation_status = models.CharField(
max_length=8,
choices=[
("invalid", _("Registration not validated")),
("waiting", _("Waiting for validation")),
("valid", _("Registration validated")),
],
verbose_name=_("validation status"),
)