From b79b7bee916b1ac025f44dee7beacb834073dfb3 Mon Sep 17 00:00:00 2001 From: Raz Date: Sat, 30 Nov 2024 10:37:28 +0100 Subject: [PATCH] fix registration issues --- tournaments/forms.py | 10 ----- ...ent_enable_online_registration_and_more.py | 38 +++++++++++++++++++ tournaments/models/tournament.py | 20 ++++++++++ tournaments/utils/player_search.py | 8 ++-- tournaments/views.py | 25 +++++++----- 5 files changed, 76 insertions(+), 25 deletions(-) create mode 100644 tournaments/migrations/0098_tournament_enable_online_registration_and_more.py diff --git a/tournaments/forms.py b/tournaments/forms.py index 18fe5a6..14677bd 100644 --- a/tournaments/forms.py +++ b/tournaments/forms.py @@ -112,16 +112,6 @@ class AddPlayerForm(forms.Form): self.cleaned_data['first_name'] = 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): def save(self, *args, **kwargs): """ diff --git a/tournaments/migrations/0098_tournament_enable_online_registration_and_more.py b/tournaments/migrations/0098_tournament_enable_online_registration_and_more.py new file mode 100644 index 0000000..3d3a120 --- /dev/null +++ b/tournaments/migrations/0098_tournament_enable_online_registration_and_more.py @@ -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), + ), + ] diff --git a/tournaments/models/tournament.py b/tournaments/models/tournament.py index 36e88c2..93f0447 100644 --- a/tournaments/models/tournament.py +++ b/tournaments/models/tournament.py @@ -65,6 +65,11 @@ class Tournament(models.Model): loser_bracket_mode = models.IntegerField(default=0) initial_seed_round = 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) license_is_required = models.BooleanField(default=True) minimum_player_per_team = models.IntegerField(default=2) @@ -881,6 +886,21 @@ class Tournament(models.Model): return False if self.end_date is not None: 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 class MatchGroup: diff --git a/tournaments/utils/player_search.py b/tournaments/utils/player_search.py index dc9b5b4..46fcbba 100644 --- a/tournaments/utils/player_search.py +++ b/tournaments/utils/player_search.py @@ -51,6 +51,7 @@ def get_player_name_from_csv(category, licence_id, base_folder=None): def search_file(file_path, is_woman): if not file_path or not os.path.exists(file_path): + print("no file found") return None, False 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-") result, found = search_file(dames_file, True) if found or category is FederalCategory.WOMEN: - return result + return result, found messieurs_file = find_most_recent_file("CLASSEMENT-PADEL-MESSIEURS-") result, found = search_file(messieurs_file, False) - return result - - # Return None if not found in either file - return None + return result, found diff --git a/tournaments/views.py b/tournaments/views.py index 63a5476..58eb842 100644 --- a/tournaments/views.py +++ b/tournaments/views.py @@ -545,7 +545,6 @@ def send_email(mail, name): email = EmailMessage(subject, body, to=[mail]) email.send() -@csrf_exempt def signup(request): next_url = request.GET.get('next', '/') # Get the 'next' parameter from the request print('next_url', next_url) @@ -653,19 +652,22 @@ def register_tournament(request, tournament_id): 'user_without_licence': user_without_licence }) 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) if request.user.is_authenticated and request.user.licence_id is None: request.session['user_without_licence'] = False request.user.licence_id = validator.computed_licence_id request.user.save() request.session.modified = True # Ensure session is updated + add_player_form = AddPlayerForm() else: if add_player_form.first_tournament is False: # Retrieve player names from the CSV file - data = get_player_name_from_csv(tournament.federal_category, licence_id) - if data: + data, found = get_player_name_from_csv(tournament.federal_category, licence_id) + if found and data: player_data['first_name'] = data['first_name'] player_data['last_name'] = data['last_name'] player_data['rank'] = data['rank'] @@ -675,6 +677,10 @@ def register_tournament(request, tournament_id): request.session.modified = True # Ensure session is updated add_player_form = AddPlayerForm() 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 @@ -699,7 +705,6 @@ def register_tournament(request, tournament_id): if player_licence_id.startswith(stripped_license): is_captain = True - is_woman = player_data.get('is_woman', False) rank = player_data.get('rank', 0) computed_rank = None @@ -711,8 +716,8 @@ def register_tournament(request, tournament_id): is_woman = player_data.get('is_woman', False) == True if is_woman: sex = PlayerSexType.FEMALE - if tournament.federal_category is FederalCategory.WOMEN and is_woman: - computed_rank += FederalCategory.female_in_male_assimilation_addition(rank) + if tournament.federal_category == FederalCategory.MEN and is_woman: + computed_rank = str(int(computed_rank) + FederalCategory.female_in_male_assimilation_addition(int(rank))) player_registration = PlayerRegistration.objects.create( @@ -767,8 +772,8 @@ def register_tournament(request, tournament_id): 'licence_id': validator.computed_licence_id } - data = get_player_name_from_csv(tournament.federal_category, user_licence_id) - if data: + data, found = get_player_name_from_csv(tournament.federal_category, user_licence_id) + if found and data: player_data['rank'] = data['rank'] player_data['points'] = data.get('points', 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 for team in teams: 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 # If all checks pass, return True (you can add further logic here if needed)