Add season year parameter for 2026 tournament rules

apikeys
Razmig Sarkissian 3 months ago
parent 0fae81c45f
commit a6ca96d2e9
  1. 35
      tournaments/models/enums.py
  2. 22
      tournaments/models/tournament.py
  3. 2
      tournaments/services/tournament_registration.py

@ -13,9 +13,36 @@ class FederalCategory(models.IntegerChoices):
UNLISTED = 3, ''
@staticmethod
def female_in_male_assimilation_addition(rank: int) -> int:
def female_in_male_assimilation_addition(rank: int, season_year: None) -> int:
if rank is None:
return 0
if season_year == 2026:
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
elif 3001 <= rank <= 5000:
return 55000
elif 5001 <= rank <= 10000:
return 70000
else:
return 90000
if 1 <= rank <= 10:
return 400
elif 11 <= rank <= 30:
@ -88,7 +115,10 @@ class FederalLevelCategory(models.IntegerChoices):
return "le "
@staticmethod
def min_player_rank(level=None, category=None, age_category=None) -> int:
def min_player_rank(level=None, category=None, age_category=None, season_year=None) -> int:
if season_year == 2026 and category == FederalCategory.MIXED:
return 0
if level == FederalLevelCategory.P25:
if age_category in [FederalAgeCategory.SENIOR, FederalAgeCategory.A45, FederalAgeCategory.A55]:
return 20000 if category == FederalCategory.MEN else 1000
@ -111,6 +141,7 @@ class FederalLevelCategory(models.IntegerChoices):
class FederalAgeCategory(models.IntegerChoices):
UNLISTED = 0, ''
A09_10 = 100, 'U10'
A11_12 = 120, 'U12'
A13_14 = 140, 'U14'
A15_16 = 160, 'U16'

@ -1420,17 +1420,20 @@ class Tournament(BaseModel):
if birth_year is None:
return reasons if reasons else None
tournament_start_year = self.start_date.year
if self.start_date.month >= 9: # Check if tournament start month is September or later
tournament_start_year += 1
tournament_start_year = self.season_year()
user_age = tournament_start_year - int(birth_year)
# Check age category restrictions
if self.federal_age_category == FederalAgeCategory.A09_10 and user_age > 10:
reasons.append("Ce tournoi est réservé aux 10 ans et moins")
if self.federal_age_category == FederalAgeCategory.A11_12 and user_age > 12:
reasons.append("Ce tournoi est réservé aux 12 ans et moins")
if self.federal_age_category == FederalAgeCategory.A13_14 and user_age > 14:
reasons.append("Ce tournoi est réservé aux 14 ans et moins")
if self.federal_age_category == FederalAgeCategory.A15_16 and user_age < 11:
reasons.append("Ce tournoi est réservé aux 11 ans et plus")
if self.federal_age_category == FederalAgeCategory.A17_18 and user_age < 11:
reasons.append("Ce tournoi est réservé aux 11 ans et plus")
if self.federal_age_category == FederalAgeCategory.A15_16 and user_age > 16:
reasons.append("Ce tournoi est réservé aux 16 ans et moins")
if self.federal_age_category == FederalAgeCategory.A17_18 and user_age > 18:
@ -1445,7 +1448,7 @@ class Tournament(BaseModel):
addon = 0
computedRank = int(data.get("rank", 0))
if is_woman and self.federal_category == FederalCategory.MEN:
addon = FederalCategory.female_in_male_assimilation_addition(computedRank)
addon = FederalCategory.female_in_male_assimilation_addition(computedRank, tournament_start_year)
computedRank = computedRank + addon
if computedRank <= self.min_player_rank():
@ -1455,7 +1458,14 @@ class Tournament(BaseModel):
return reasons if reasons else None
def min_player_rank(self):
return FederalLevelCategory.min_player_rank(self.federal_level_category, self.federal_category, self.federal_age_category)
return FederalLevelCategory.min_player_rank(self.federal_level_category, self.federal_category, self.federal_age_category, self.season_year())
def season_year(self):
local_date = self.local_start_date()
if local_date.month >= 9: # September or later
return local_date.year + 1
else:
return local_date.year
def local_registration_federal_limit(self):
timezone = self.timezone()

@ -563,7 +563,7 @@ class RegistrationCartManager:
# Apply assimilation for women playing in men's tournaments
if is_woman and tournament.federal_category == FederalCategory.MEN and rank_int is not None:
assimilation_addition = FederalCategory.female_in_male_assimilation_addition(rank_int)
assimilation_addition = FederalCategory.female_in_male_assimilation_addition(rank_int, tournament.season_year())
computed_rank = computed_rank + assimilation_addition
print(f"_compute_rank_and_sex: {player_data.get('last_name')}, {sex}, {rank}, {computed_rank}")

Loading…
Cancel
Save