fix clean up message

timetoconfirm
Raz 7 months ago
parent 70d286cb52
commit 4af00495b1
  1. 8
      tournaments/custom_views.py
  2. 127
      tournaments/services/tournament_registration.py
  3. 21
      tournaments/views.py

@ -38,5 +38,11 @@ class CustomLoginView(auth_views.LoginView):
for key in keys_to_clear: for key in keys_to_clear:
del request.session[key] del request.session[key]
messages.get_messages(request).used = True storage = messages.get_messages(request)
for _ in storage:
pass
if len(storage._loaded_messages) == 1:
del storage._loaded_messages[0]
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)

@ -4,6 +4,8 @@ import datetime
from ..models import PlayerRegistration, TeamRegistration, Tournament from ..models import PlayerRegistration, TeamRegistration, Tournament
from ..utils.licence_validator import LicenseValidator from ..utils.licence_validator import LicenseValidator
from ..utils.player_search import get_player_name_from_csv from ..utils.player_search import get_player_name_from_csv
from ..models.enums import FederalCategory
from ..models.player_enums import PlayerSexType, PlayerDataSource
class RegistrationCartManager: class RegistrationCartManager:
""" """
@ -323,27 +325,59 @@ class RegistrationCartManager:
walk_out=False walk_out=False
) )
# Identify captain from user's license
stripped_license = None
if self.request.user.is_authenticated and self.request.user.licence_id:
validator = LicenseValidator(self.request.user.licence_id)
stripped_license = validator.stripped_license
# Create player registrations # Create player registrations
for idx, player_data in enumerate(players): for player_data in players:
# Determine if this player is the captain
is_captain = False
player_licence_id = player_data.get('licence_id')
if player_licence_id and stripped_license:
if stripped_license.lower() in player_licence_id.lower():
is_captain = True
# Compute rank and sex using the original logic
sex, rank, computed_rank = self._compute_rank_and_sex(
tournament,
player_data
)
# Determine data source
data_source = None
if player_data.get('found_in_french_federation', False) == True:
data_source = PlayerDataSource.FRENCH_FEDERATION # Now using the enum value
# Create player registration with all the original fields
PlayerRegistration.objects.create( PlayerRegistration.objects.create(
team_registration=team_registration, team_registration=team_registration,
first_name=player_data.get('first_name', ''), captain=is_captain,
last_name=player_data.get('last_name', '').upper(), source=data_source,
licence_id=player_data.get('licence_id'), registered_online=True,
rank=player_data.get('rank'), first_name=player_data.get('first_name'),
last_name=player_data.get('last_name'),
points=player_data.get('points'), points=player_data.get('points'),
club_name=player_data.get('club_name'),
ligue_name=player_data.get('ligue_name'),
email=player_data.get('email'),
phone_number=player_data.get('phone'),
assimilation=player_data.get('assimilation'), assimilation=player_data.get('assimilation'),
tournament_played=player_data.get('tournament_count'), tournament_played=player_data.get('tournament_count'),
birthdate=str(player_data.get('birth_year', '')), ligue_name=player_data.get('ligue_name'),
captain=(idx == 0), # First player is captain club_name=player_data.get('club_name'),
registered_online=True, birthdate=player_data.get('birth_year'),
registration_status='CONFIRMED' if self.session['waiting_list_position'] < 0 else 'WAITING' sex=sex,
rank=rank,
computed_rank=computed_rank,
licence_id=player_data.get('licence_id'),
email=player_data.get('email'),
phone_number=player_data.get('mobile_number', mobile_number),
registration_status='CONFIRMED' if self.session.get('waiting_list_position', 0) < 0 else 'WAITING'
) )
# Calculate and set team weight
team_registration.set_weight()
team_registration.save()
# Update user phone if provided # Update user phone if provided
if self.request.user.is_authenticated and mobile_number: if self.request.user.is_authenticated and mobile_number:
self.request.user.phone = mobile_number self.request.user.phone = mobile_number
@ -402,56 +436,27 @@ class RegistrationCartManager:
success, _ = self.add_player(player_data) success, _ = self.add_player(player_data)
return success return success
def _compute_rank_and_sex(self, tournament, player_data):
"""
Compute the player's sex, rank, and computed rank based on tournament category.
This reimplements the original logic from TournamentRegistrationRepository.
"""
is_woman = player_data.get('is_woman', False)
rank = player_data.get('rank', None)
# For backward compatibility with existing code that uses the function-based approach if rank is None:
def get_or_create_registration_cart_id(request): computed_rank = 100000
cart_manager = RegistrationCartManager(request) else:
return cart_manager.get_or_create_cart_id() computed_rank = rank
def get_cart_expiry(request):
cart_manager = RegistrationCartManager(request)
return cart_manager.get_cart_expiry()
def is_cart_expired(request):
cart_manager = RegistrationCartManager(request)
return cart_manager.is_cart_expired()
def reset_cart_expiry(request):
cart_manager = RegistrationCartManager(request)
cart_manager.reset_cart_expiry()
def get_tournament_from_cart(request):
cart_manager = RegistrationCartManager(request)
return cart_manager.get_tournament_id()
def initialize_registration_cart(request, tournament_id):
cart_manager = RegistrationCartManager(request)
return cart_manager.initialize_cart(tournament_id)
def get_registration_cart_data(request):
cart_manager = RegistrationCartManager(request)
return cart_manager.get_cart_data()
def add_player_to_cart(request, player_data):
cart_manager = RegistrationCartManager(request)
return cart_manager.add_player(player_data)
def remove_player_from_cart(request):
cart_manager = RegistrationCartManager(request)
return cart_manager.remove_player()
def update_cart_contact_info(request, mobile_number=None): # Use the integer enum values
cart_manager = RegistrationCartManager(request) sex = PlayerSexType.FEMALE if is_woman else PlayerSexType.MALE
return cart_manager.update_contact_info(mobile_number)
def checkout_registration_cart(request): # Apply assimilation for women playing in men's tournaments
cart_manager = RegistrationCartManager(request) if is_woman and tournament.federal_category == FederalCategory.MEN:
return cart_manager.checkout() assimilation_addition = FederalCategory.female_in_male_assimilation_addition(rank)
computed_rank = computed_rank + assimilation_addition
def clear_registration_cart(request): print(f"_compute_rank_and_sex: {player_data.get('last_name')}, {sex}, {rank}, {computed_rank}")
cart_manager = RegistrationCartManager(request)
cart_manager.clear_cart()
def add_authenticated_user_to_cart(request): return sex, rank, computed_rank
cart_manager = RegistrationCartManager(request)
return cart_manager.add_authenticated_user()

@ -1228,10 +1228,12 @@ def register_tournament(request, tournament_id):
# If registration was successful, render success page immediately # If registration was successful, render success page immediately
if registration_successful: if registration_successful:
storage = messages.get_messages(request) storage = messages.get_messages(request)
for message in storage: for _ in storage:
# Iterate through messages to clear them pass
pass # This actually consumes the messages
storage.used = True # Mark all messages as used if len(storage._loaded_messages) == 1:
del storage._loaded_messages[0]
context = { context = {
'tournament': tournament, 'tournament': tournament,
'registration_successful': True, 'registration_successful': True,
@ -1263,11 +1265,14 @@ def register_tournament(request, tournament_id):
# We're returning from Stripe, don't reinitialize the cart # We're returning from Stripe, don't reinitialize the cart
pass pass
else: else:
print("Initializing cart")
storage = messages.get_messages(request) storage = messages.get_messages(request)
for message in storage: for _ in storage:
# Iterate through messages to clear them pass
pass # This actually consumes the messages
storage.used = True # Mark all messages as used if len(storage._loaded_messages) == 1:
del storage._loaded_messages[0]
# ALWAYS initialize a fresh cart when entering the registration page (GET request) # ALWAYS initialize a fresh cart when entering the registration page (GET request)
# This ensures no old cart data persists # This ensures no old cart data persists

Loading…
Cancel
Save