201 lines
4.7 KiB
Python
201 lines
4.7 KiB
Python
import os
|
|
from datetime import date
|
|
|
|
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 end"),
|
|
)
|
|
|
|
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(
|
|
default=os.getenv("TFJM_YEAR", date.today().year),
|
|
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")
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
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,
|
|
related_name="teams",
|
|
verbose_name=_("tournament"),
|
|
)
|
|
|
|
inscription_date = models.DateTimeField(
|
|
auto_now_add=True,
|
|
verbose_name=_("inscription date"),
|
|
)
|
|
|
|
validation_status = models.CharField(
|
|
max_length=8,
|
|
choices=[
|
|
("0invalid", _("Registration not validated")),
|
|
("1waiting", _("Waiting for validation")),
|
|
("2valid", _("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(
|
|
default=os.getenv("TFJM_YEAR", date.today().year),
|
|
verbose_name=_("year"),
|
|
)
|
|
|
|
@property
|
|
def valid(self):
|
|
return self.validation_status == "2valid"
|
|
|
|
@property
|
|
def waiting(self):
|
|
return self.validation_status == "1waiting"
|
|
|
|
@property
|
|
def invalid(self):
|
|
return self.validation_status == "0invalid"
|
|
|
|
@property
|
|
def encadrants(self):
|
|
return self.users.all().filter(role="2coach")
|
|
|
|
@property
|
|
def participants(self):
|
|
return self.users.all().filter(role="3participant")
|
|
|
|
class Meta:
|
|
verbose_name = _("team")
|
|
verbose_name_plural = _("teams")
|
|
unique_together = (('name', 'year',), ('trigram', 'year',),)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
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=[
|
|
("0invalid", _("Registration not validated")),
|
|
("1waiting", _("Waiting for validation")),
|
|
("2valid", _("Registration validated")),
|
|
],
|
|
verbose_name=_("validation status"),
|
|
)
|
|
|
|
class Meta:
|
|
verbose_name = _("payment")
|
|
verbose_name_plural = _("payments")
|
|
|
|
def __str__(self):
|
|
return _("Payment of {user}").format(str(self.user))
|