|
|
|
|
@ -4,6 +4,8 @@ import datetime |
|
|
|
|
from ..models import PlayerRegistration, TeamRegistration, Tournament |
|
|
|
|
from ..utils.licence_validator import LicenseValidator |
|
|
|
|
from ..utils.player_search import get_player_name_from_csv |
|
|
|
|
from ..models.enums import FederalCategory |
|
|
|
|
from ..models.player_enums import PlayerSexType, PlayerDataSource |
|
|
|
|
|
|
|
|
|
class RegistrationCartManager: |
|
|
|
|
""" |
|
|
|
|
@ -323,27 +325,59 @@ class RegistrationCartManager: |
|
|
|
|
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 |
|
|
|
|
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( |
|
|
|
|
team_registration=team_registration, |
|
|
|
|
first_name=player_data.get('first_name', ''), |
|
|
|
|
last_name=player_data.get('last_name', '').upper(), |
|
|
|
|
licence_id=player_data.get('licence_id'), |
|
|
|
|
rank=player_data.get('rank'), |
|
|
|
|
captain=is_captain, |
|
|
|
|
source=data_source, |
|
|
|
|
registered_online=True, |
|
|
|
|
first_name=player_data.get('first_name'), |
|
|
|
|
last_name=player_data.get('last_name'), |
|
|
|
|
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'), |
|
|
|
|
tournament_played=player_data.get('tournament_count'), |
|
|
|
|
birthdate=str(player_data.get('birth_year', '')), |
|
|
|
|
captain=(idx == 0), # First player is captain |
|
|
|
|
registered_online=True, |
|
|
|
|
registration_status='CONFIRMED' if self.session['waiting_list_position'] < 0 else 'WAITING' |
|
|
|
|
ligue_name=player_data.get('ligue_name'), |
|
|
|
|
club_name=player_data.get('club_name'), |
|
|
|
|
birthdate=player_data.get('birth_year'), |
|
|
|
|
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 |
|
|
|
|
if self.request.user.is_authenticated and mobile_number: |
|
|
|
|
self.request.user.phone = mobile_number |
|
|
|
|
@ -402,56 +436,27 @@ class RegistrationCartManager: |
|
|
|
|
success, _ = self.add_player(player_data) |
|
|
|
|
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 |
|
|
|
|
def get_or_create_registration_cart_id(request): |
|
|
|
|
cart_manager = RegistrationCartManager(request) |
|
|
|
|
return cart_manager.get_or_create_cart_id() |
|
|
|
|
|
|
|
|
|
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() |
|
|
|
|
if rank is None: |
|
|
|
|
computed_rank = 100000 |
|
|
|
|
else: |
|
|
|
|
computed_rank = rank |
|
|
|
|
|
|
|
|
|
def update_cart_contact_info(request, mobile_number=None): |
|
|
|
|
cart_manager = RegistrationCartManager(request) |
|
|
|
|
return cart_manager.update_contact_info(mobile_number) |
|
|
|
|
# Use the integer enum values |
|
|
|
|
sex = PlayerSexType.FEMALE if is_woman else PlayerSexType.MALE |
|
|
|
|
|
|
|
|
|
def checkout_registration_cart(request): |
|
|
|
|
cart_manager = RegistrationCartManager(request) |
|
|
|
|
return cart_manager.checkout() |
|
|
|
|
# Apply assimilation for women playing in men's tournaments |
|
|
|
|
if is_woman and tournament.federal_category == FederalCategory.MEN: |
|
|
|
|
assimilation_addition = FederalCategory.female_in_male_assimilation_addition(rank) |
|
|
|
|
computed_rank = computed_rank + assimilation_addition |
|
|
|
|
|
|
|
|
|
def clear_registration_cart(request): |
|
|
|
|
cart_manager = RegistrationCartManager(request) |
|
|
|
|
cart_manager.clear_cart() |
|
|
|
|
print(f"_compute_rank_and_sex: {player_data.get('last_name')}, {sex}, {rank}, {computed_rank}") |
|
|
|
|
|
|
|
|
|
def add_authenticated_user_to_cart(request): |
|
|
|
|
cart_manager = RegistrationCartManager(request) |
|
|
|
|
return cart_manager.add_authenticated_user() |
|
|
|
|
return sex, rank, computed_rank |
|
|
|
|
|