fix registration issues

online_registration
Raz 11 months ago
parent da65e39b45
commit b79b7bee91
  1. 10
      tournaments/forms.py
  2. 38
      tournaments/migrations/0098_tournament_enable_online_registration_and_more.py
  3. 20
      tournaments/models/tournament.py
  4. 8
      tournaments/utils/player_search.py
  5. 25
      tournaments/views.py

@ -112,16 +112,6 @@ class AddPlayerForm(forms.Form):
self.cleaned_data['first_name'] = first_name self.cleaned_data['first_name'] = first_name
return first_name return first_name
def clean(self):
cleaned_data = super().clean()
# Retrieve the cleaned licence_id (from the previous step)
licence_id = cleaned_data.get('licence_id')
last_name = cleaned_data.get('last_name')
# Return the cleaned data with any modifications applied
return cleaned_data
class CustomPasswordResetForm(PasswordResetForm): class CustomPasswordResetForm(PasswordResetForm):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
""" """

@ -0,0 +1,38 @@
# Generated by Django 4.2.11 on 2024-11-30 09:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0097_tournament_display_entry_fee_information_and_more'),
]
operations = [
migrations.AddField(
model_name='tournament',
name='enable_online_registration',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='tournament',
name='opening_registration_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='tournament',
name='registration_date_limit',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='tournament',
name='target_team_count',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='tournament',
name='waiting_list_limit',
field=models.IntegerField(blank=True, null=True),
),
]

@ -65,6 +65,11 @@ class Tournament(models.Model):
loser_bracket_mode = models.IntegerField(default=0) loser_bracket_mode = models.IntegerField(default=0)
initial_seed_round = models.IntegerField(default=0) initial_seed_round = models.IntegerField(default=0)
initial_seed_count = models.IntegerField(default=0) initial_seed_count = models.IntegerField(default=0)
enable_online_registration = models.BooleanField(default=False) # Equivalent to Bool = false
registration_date_limit = models.DateTimeField(null=True, blank=True) # Equivalent to Date? = nil
opening_registration_date = models.DateTimeField(null=True, blank=True) # Equivalent to Date? = nil
target_team_count = models.IntegerField(null=True, blank=True) # Equivalent to Int? = nil
waiting_list_limit = models.IntegerField(null=True, blank=True) # Equivalent to Int? = nil
account_is_required = models.BooleanField(default=True) account_is_required = models.BooleanField(default=True)
license_is_required = models.BooleanField(default=True) license_is_required = models.BooleanField(default=True)
minimum_player_per_team = models.IntegerField(default=2) minimum_player_per_team = models.IntegerField(default=2)
@ -881,6 +886,21 @@ class Tournament(models.Model):
return False return False
if self.end_date is not None: if self.end_date is not None:
return False return False
now = datetime.now()
# Check if online registration is enabled
if not self.enable_online_registration:
return False
# Check opening registration date
if self.opening_registration_date is not None and now < self.opening_registration_date:
return False
# Check registration date limit
if self.registration_date_limit is not None and now > self.registration_date_limit:
return False
# All conditions are satisfied
return True return True
class MatchGroup: class MatchGroup:

@ -51,6 +51,7 @@ def get_player_name_from_csv(category, licence_id, base_folder=None):
def search_file(file_path, is_woman): def search_file(file_path, is_woman):
if not file_path or not os.path.exists(file_path): if not file_path or not os.path.exists(file_path):
print("no file found")
return None, False return None, False
last_rank = None last_rank = None
@ -101,11 +102,8 @@ def get_player_name_from_csv(category, licence_id, base_folder=None):
dames_file = find_most_recent_file("CLASSEMENT-PADEL-DAMES-") dames_file = find_most_recent_file("CLASSEMENT-PADEL-DAMES-")
result, found = search_file(dames_file, True) result, found = search_file(dames_file, True)
if found or category is FederalCategory.WOMEN: if found or category is FederalCategory.WOMEN:
return result return result, found
messieurs_file = find_most_recent_file("CLASSEMENT-PADEL-MESSIEURS-") messieurs_file = find_most_recent_file("CLASSEMENT-PADEL-MESSIEURS-")
result, found = search_file(messieurs_file, False) result, found = search_file(messieurs_file, False)
return result return result, found
# Return None if not found in either file
return None

@ -545,7 +545,6 @@ def send_email(mail, name):
email = EmailMessage(subject, body, to=[mail]) email = EmailMessage(subject, body, to=[mail])
email.send() email.send()
@csrf_exempt
def signup(request): def signup(request):
next_url = request.GET.get('next', '/') # Get the 'next' parameter from the request next_url = request.GET.get('next', '/') # Get the 'next' parameter from the request
print('next_url', next_url) print('next_url', next_url)
@ -653,19 +652,22 @@ def register_tournament(request, tournament_id):
'user_without_licence': user_without_licence 'user_without_licence': user_without_licence
}) })
elif add_player_form.names_is_valid(): elif add_player_form.names_is_valid():
add_player_form = AddPlayerForm() if player_data.get('rank', None) is None:
player_data['rank'] = request.session['last_rank']
player_data['is_woman'] = request.session['is_woman']
request.session['team_registration'].append(player_data) request.session['team_registration'].append(player_data)
if request.user.is_authenticated and request.user.licence_id is None: if request.user.is_authenticated and request.user.licence_id is None:
request.session['user_without_licence'] = False request.session['user_without_licence'] = False
request.user.licence_id = validator.computed_licence_id request.user.licence_id = validator.computed_licence_id
request.user.save() request.user.save()
request.session.modified = True # Ensure session is updated request.session.modified = True # Ensure session is updated
add_player_form = AddPlayerForm()
else: else:
if add_player_form.first_tournament is False: if add_player_form.first_tournament is False:
# Retrieve player names from the CSV file # Retrieve player names from the CSV file
data = get_player_name_from_csv(tournament.federal_category, licence_id) data, found = get_player_name_from_csv(tournament.federal_category, licence_id)
if data: if found and data:
player_data['first_name'] = data['first_name'] player_data['first_name'] = data['first_name']
player_data['last_name'] = data['last_name'] player_data['last_name'] = data['last_name']
player_data['rank'] = data['rank'] player_data['rank'] = data['rank']
@ -675,6 +677,10 @@ def register_tournament(request, tournament_id):
request.session.modified = True # Ensure session is updated request.session.modified = True # Ensure session is updated
add_player_form = AddPlayerForm() add_player_form = AddPlayerForm()
else: else:
if data:
request.session['last_rank'] = data['rank']
request.session['is_woman'] = data['is_woman']
request.session.modified = True # Ensure session is updated
add_player_form.first_tournament = True add_player_form.first_tournament = True
@ -699,7 +705,6 @@ def register_tournament(request, tournament_id):
if player_licence_id.startswith(stripped_license): if player_licence_id.startswith(stripped_license):
is_captain = True is_captain = True
is_woman = player_data.get('is_woman', False) is_woman = player_data.get('is_woman', False)
rank = player_data.get('rank', 0) rank = player_data.get('rank', 0)
computed_rank = None computed_rank = None
@ -711,8 +716,8 @@ def register_tournament(request, tournament_id):
is_woman = player_data.get('is_woman', False) == True is_woman = player_data.get('is_woman', False) == True
if is_woman: if is_woman:
sex = PlayerSexType.FEMALE sex = PlayerSexType.FEMALE
if tournament.federal_category is FederalCategory.WOMEN and is_woman: if tournament.federal_category == FederalCategory.MEN and is_woman:
computed_rank += FederalCategory.female_in_male_assimilation_addition(rank) computed_rank = str(int(computed_rank) + FederalCategory.female_in_male_assimilation_addition(int(rank)))
player_registration = PlayerRegistration.objects.create( player_registration = PlayerRegistration.objects.create(
@ -767,8 +772,8 @@ def register_tournament(request, tournament_id):
'licence_id': validator.computed_licence_id 'licence_id': validator.computed_licence_id
} }
data = get_player_name_from_csv(tournament.federal_category, user_licence_id) data, found = get_player_name_from_csv(tournament.federal_category, user_licence_id)
if data: if found and data:
player_data['rank'] = data['rank'] player_data['rank'] = data['rank']
player_data['points'] = data.get('points', None) player_data['points'] = data.get('points', None)
player_data['assimilation'] = data.get('assimilation', None) player_data['assimilation'] = data.get('assimilation', None)
@ -826,7 +831,7 @@ def validate_license_id(licence_id, tournament):
# Loop through each team and check if any of its players has the same licence_id # Loop through each team and check if any of its players has the same licence_id
for team in teams: for team in teams:
for player in team.playerregistration_set.all(): for player in team.playerregistration_set.all():
if player.licence_id.startswith(licence_id): if player.licence_id is not None and player.licence_id.startswith(licence_id):
return True return True
# If all checks pass, return True (you can add further logic here if needed) # If all checks pass, return True (you can add further logic here if needed)

Loading…
Cancel
Save