mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-07-03 20:02:49 +02:00
Validate teams
This commit is contained in:
@ -1,3 +1,7 @@
|
||||
import os
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
from django import forms
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
@ -7,6 +11,17 @@ from tournament.models import Tournament, Team
|
||||
|
||||
|
||||
class TournamentForm(forms.ModelForm):
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
||||
if not self.instance.pk:
|
||||
if Tournament.objects.filter(name=cleaned_data["data"], year=os.getenv("TFJM_YEAR")):
|
||||
self.add_error("name", _("This tournament already exists."))
|
||||
if cleaned_data["final"] and Tournament.objects.filter(final=True, year=os.getenv("TFJM_YEAR")):
|
||||
self.add_error("name", _("The final tournament was already defined."))
|
||||
|
||||
return cleaned_data
|
||||
|
||||
class Meta:
|
||||
model = Tournament
|
||||
fields = '__all__'
|
||||
@ -25,6 +40,14 @@ class OrganizerForm(forms.ModelForm):
|
||||
model = TFJMUser
|
||||
fields = ('last_name', 'first_name', 'email', 'is_superuser',)
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
||||
if TFJMUser.objects.filter(email=cleaned_data["email"], year=os.getenv("TFJM_YEAR")).exists():
|
||||
self.add_error("trigram", _("This organizer already exist."))
|
||||
|
||||
return cleaned_data
|
||||
|
||||
def save(self, commit=True):
|
||||
user = self.instance
|
||||
user.role = '0admin' if user.is_superuser else '1organizer'
|
||||
@ -32,10 +55,34 @@ class OrganizerForm(forms.ModelForm):
|
||||
|
||||
|
||||
class TeamForm(forms.ModelForm):
|
||||
tournament = forms.ModelChoiceField(
|
||||
Tournament.objects.filter(date_inscription__gte=datetime.today(), final=False),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Team
|
||||
fields = ('name', 'trigram', 'tournament',)
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
||||
cleaned_data["trigram"] = cleaned_data["trigram"].upper()
|
||||
|
||||
if not re.match("[A-Z]{3}", cleaned_data["trigram"]):
|
||||
self.add_error("trigram", _("The trigram must be composed of three upcase letters."))
|
||||
|
||||
if not self.instance.pk:
|
||||
if Team.objects.filter(trigram=cleaned_data["trigram"], year=os.getenv("TFJM_YEAR")).exists():
|
||||
self.add_error("trigram", _("This trigram is already used."))
|
||||
|
||||
if Team.objects.filter(name=cleaned_data["name"], year=os.getenv("TFJM_YEAR")).exists():
|
||||
self.add_error("name", _("This name is already used."))
|
||||
|
||||
if cleaned_data["tournament"].date_inscription < datetime.today():
|
||||
self.add_error("tournament", _("This tournament is already closed."))
|
||||
|
||||
return cleaned_data
|
||||
|
||||
|
||||
class JoinTeam(forms.Form):
|
||||
access_code = forms.CharField(
|
||||
@ -46,10 +93,16 @@ class JoinTeam(forms.Form):
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
||||
if not re.match("[a-z0-9]{6}", cleaned_data["access_code"]):
|
||||
self.add_error('access_code', _("The access code must be composed of 6 alphanumeric characters."))
|
||||
|
||||
team = Team.objects.filter(access_code=cleaned_data["access_code"])
|
||||
if not team.exists():
|
||||
self.add_error('access_code', _("This access code is invalid."))
|
||||
cleaned_data["team"] = team.get()
|
||||
team = team.get()
|
||||
if not team.invalid:
|
||||
self.add_error('access_code', _("The team is already validated."))
|
||||
cleaned_data["team"] = team
|
||||
|
||||
return cleaned_data
|
||||
|
||||
|
Reference in New Issue
Block a user