You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
7.7 KiB
193 lines
7.7 KiB
from django.db import models
|
|
import uuid
|
|
|
|
class TournamentPayment(models.IntegerChoices):
|
|
FREE = 0, 'Gratuit'
|
|
UNIT = 1, 'Unité'
|
|
SUBSCRIPTION_UNIT = 2, 'Unité abonnement'
|
|
UNLIMITED = 3, 'Illimité'
|
|
|
|
class FederalCategory(models.IntegerChoices):
|
|
MEN = 0, 'Homme'
|
|
WOMEN = 1, 'Femme'
|
|
MIXED = 2, 'Mixte'
|
|
UNLISTED = 3, ''
|
|
|
|
@staticmethod
|
|
def female_in_male_assimilation_addition(rank: int) -> int:
|
|
if 1 <= rank <= 10:
|
|
return 400
|
|
elif 11 <= rank <= 30:
|
|
return 1000
|
|
elif 31 <= rank <= 60:
|
|
return 2000
|
|
elif 61 <= rank <= 100:
|
|
return 3500
|
|
elif 101 <= rank <= 200:
|
|
return 10000
|
|
elif 201 <= rank <= 500:
|
|
return 15000
|
|
elif 501 <= rank <= 1000:
|
|
return 25000
|
|
elif 1001 <= rank <= 2000:
|
|
return 35000
|
|
elif 2001 <= rank <= 3000:
|
|
return 45000
|
|
else:
|
|
return 50000
|
|
|
|
|
|
class FederalLevelCategory(models.IntegerChoices):
|
|
UNLISTED = 0, 'Animation'
|
|
P25 = 25, 'P25'
|
|
P100 = 100, 'P100'
|
|
P250 = 250, 'P250'
|
|
P500 = 500, 'P500'
|
|
P1000 = 1000, 'P1000'
|
|
P1500 = 1500, 'P1500'
|
|
P2000 = 2000, 'P2000'
|
|
|
|
@staticmethod
|
|
def min_player_rank(level=None, category=None, age_category=None) -> int:
|
|
if level == FederalLevelCategory.P25:
|
|
if age_category in [FederalAgeCategory.SENIOR, FederalAgeCategory.A45, FederalAgeCategory.A55]:
|
|
return 20000 if category == FederalCategory.MEN else 1000
|
|
return 0
|
|
|
|
elif level == FederalLevelCategory.P100:
|
|
if age_category in [FederalAgeCategory.SENIOR, FederalAgeCategory.A45, FederalAgeCategory.A55]:
|
|
return 2000 if category == FederalCategory.MEN else 300
|
|
return 0
|
|
|
|
elif level == FederalLevelCategory.P250:
|
|
if age_category in [FederalAgeCategory.SENIOR, FederalAgeCategory.A45, FederalAgeCategory.A55]:
|
|
if category == FederalCategory.MIXED:
|
|
return 0
|
|
return 500 if category == FederalCategory.MEN else 100
|
|
return 0
|
|
|
|
return 0
|
|
|
|
|
|
class FederalAgeCategory(models.IntegerChoices):
|
|
UNLISTED = 0, ''
|
|
A11_12 = 120, 'U12'
|
|
A13_14 = 140, 'U14'
|
|
A15_16 = 160, 'U16'
|
|
A17_18 = 180, 'U18'
|
|
SENIOR = 200, 'Senior'
|
|
A45 = 450, '+45 ans'
|
|
A55 = 550, '+55 ans'
|
|
|
|
class FederalMatchCategory(models.IntegerChoices):
|
|
TWO_SETS = 0, 'Two sets'
|
|
TWO_SETS_SUPER_TIE = 1, 'Two sets super tie'
|
|
TWO_SETS_FOUR_GAME = 2, 'Two sets of four games'
|
|
NINE_GAMES = 3, 'Nine games'
|
|
SUPER_TIE = 4, 'Super Tie-Break'
|
|
MEGA_TIE = 5, 'Mega Tie-Break'
|
|
TWO_SETS_DECISIVE_POINT = 6, 'Two Sets with decisive point'
|
|
TWO_SETS_DECISIVE_POINT_SUPER_TIE = 7, 'Two Sets with decisive point and super tie-break'
|
|
TWO_SETS_FOUR_GAME_DECISIVE_POINT = 8, 'Two sets of four games with decisive point'
|
|
NINE_GAMES_DECISIVE_POINT = 9, 'Nine games with decisive point'
|
|
TWO_SETS_OF_SUPER_TIE = 10, 'Two sets of Super Tie-Break decisive point'
|
|
SINGLE_SET = 11, 'Single set'
|
|
SINGLE_SET_DECISIVE_POINT = 12, 'Single set with decisive point'
|
|
SINGLE_SET_OF_FOUR_GAMES = 13, 'Single set of four games'
|
|
SINGLE_SET_OF_FOUR_GAMES_DECISIVE_POINT = 14, 'Single set of four games with decisive point'
|
|
|
|
@property
|
|
def format_label_short(self):
|
|
format_mapping = {
|
|
self.TWO_SETS: "A1",
|
|
self.TWO_SETS_SUPER_TIE: "B1",
|
|
self.TWO_SETS_FOUR_GAME: "C1",
|
|
self.NINE_GAMES: "D1",
|
|
self.SUPER_TIE: "E",
|
|
self.TWO_SETS_OF_SUPER_TIE: "G",
|
|
self.MEGA_TIE: "F",
|
|
self.SINGLE_SET: "H1",
|
|
self.SINGLE_SET_DECISIVE_POINT: "H2",
|
|
self.TWO_SETS_DECISIVE_POINT: "A2",
|
|
self.TWO_SETS_DECISIVE_POINT_SUPER_TIE: "B2",
|
|
self.TWO_SETS_FOUR_GAME_DECISIVE_POINT: "C2",
|
|
self.NINE_GAMES_DECISIVE_POINT: "D2",
|
|
self.SINGLE_SET_OF_FOUR_GAMES: "I1"
|
|
}
|
|
return format_mapping.get(self, "")
|
|
|
|
def last_set_is_tie_break(value):
|
|
if value == FederalMatchCategory.TWO_SETS_FOUR_GAME or value == FederalMatchCategory.TWO_SETS_FOUR_GAME_DECISIVE_POINT or value == FederalMatchCategory.TWO_SETS_SUPER_TIE or value == FederalMatchCategory.SUPER_TIE or value == FederalMatchCategory.MEGA_TIE or value == FederalMatchCategory.TWO_SETS_DECISIVE_POINT_SUPER_TIE:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def max_number_of_sets(value):
|
|
if value == FederalMatchCategory.SUPER_TIE or value == FederalMatchCategory.MEGA_TIE or value == FederalMatchCategory.NINE_GAMES or value == FederalMatchCategory.NINE_GAMES_DECISIVE_POINT or value == FederalMatchCategory.SINGLE_SET or value == FederalMatchCategory.SINGLE_SET_DECISIVE_POINT or value == FederalMatchCategory.SINGLE_SET_OF_FOUR_GAMES or value == FederalMatchCategory.SINGLE_SET_OF_FOUR_GAMES_DECISIVE_POINT:
|
|
return 1
|
|
else:
|
|
return 3
|
|
|
|
|
|
class OnlineRegistrationStatus(models.IntegerChoices):
|
|
OPEN = 1, 'Open'
|
|
NOT_ENABLED = 2, 'Not Enabled'
|
|
NOT_STARTED = 3, 'Not Started'
|
|
ENDED = 4, 'Ended'
|
|
WAITING_LIST_POSSIBLE = 5, 'Waiting List Possible'
|
|
WAITING_LIST_FULL = 6, 'Waiting List Full'
|
|
IN_PROGRESS = 7, 'In Progress'
|
|
ENDED_WITH_RESULTS = 8, 'Ended with Results'
|
|
CONFIRMED = 9, 'Confirmed'
|
|
WALKOUT = 10, 'Walkout'
|
|
WAITING_LIST = 11, 'Waiting list'
|
|
CANCELED = 12, 'Canceled'
|
|
USER_IN_PROGRESS = 13, 'User in progress'
|
|
|
|
def status_localized(self) -> str:
|
|
status_map = {
|
|
OnlineRegistrationStatus.OPEN: "Inscription ouverte",
|
|
OnlineRegistrationStatus.NOT_ENABLED: "Inscription désactivée",
|
|
OnlineRegistrationStatus.NOT_STARTED: "Ouverture des inscriptions à venir",
|
|
OnlineRegistrationStatus.ENDED: "Inscription terminée",
|
|
OnlineRegistrationStatus.WAITING_LIST_POSSIBLE: "Liste d'attente",
|
|
OnlineRegistrationStatus.WAITING_LIST_FULL: "Complet",
|
|
OnlineRegistrationStatus.IN_PROGRESS: "En cours",
|
|
OnlineRegistrationStatus.ENDED_WITH_RESULTS: "Tournoi terminé",
|
|
OnlineRegistrationStatus.CONFIRMED: "Inscription\nconfirmée",
|
|
OnlineRegistrationStatus.WALKOUT: "Forfait",
|
|
OnlineRegistrationStatus.WAITING_LIST: "Inscription\nen attente",
|
|
OnlineRegistrationStatus.CANCELED: "Annulé",
|
|
OnlineRegistrationStatus.USER_IN_PROGRESS: "En lice",
|
|
}
|
|
return status_map.get(self, "")
|
|
|
|
def color(self) -> str:
|
|
status_map = {
|
|
OnlineRegistrationStatus.OPEN: "#90ee90", #orange
|
|
OnlineRegistrationStatus.NOT_ENABLED: "#90ee90",
|
|
OnlineRegistrationStatus.NOT_STARTED: "#90ee90",
|
|
OnlineRegistrationStatus.ENDED: "#90ee90", #green
|
|
OnlineRegistrationStatus.WAITING_LIST_POSSIBLE: "#90ee90", #yellow
|
|
OnlineRegistrationStatus.WAITING_LIST_FULL: "#E84038", #red
|
|
OnlineRegistrationStatus.IN_PROGRESS: "#90ee90",
|
|
OnlineRegistrationStatus.ENDED_WITH_RESULTS: "#F39200",
|
|
OnlineRegistrationStatus.CONFIRMED: "#F39200",
|
|
OnlineRegistrationStatus.WALKOUT: "#E84038",
|
|
OnlineRegistrationStatus.WAITING_LIST: "#F39200",
|
|
OnlineRegistrationStatus.CANCELED: "#E84038",
|
|
OnlineRegistrationStatus.USER_IN_PROGRESS: "#F39200",
|
|
}
|
|
return status_map.get(self, "")
|
|
|
|
def text_color(self) -> str:
|
|
status_map = {
|
|
OnlineRegistrationStatus.OPEN: "#707070", #orange
|
|
OnlineRegistrationStatus.WAITING_LIST_POSSIBLE: "#707070", #yellow
|
|
}
|
|
return status_map.get(self, "#FFFFFF")
|
|
|
|
class UserOrigin(models.IntegerChoices):
|
|
ADMIN = 0, 'Admin'
|
|
SITE = 1, 'Site'
|
|
APP = 2, 'App'
|
|
|