diff --git a/tournaments/models/player_registration.py b/tournaments/models/player_registration.py index d0bc737..0c4000c 100644 --- a/tournaments/models/player_registration.py +++ b/tournaments/models/player_registration.py @@ -211,3 +211,11 @@ class PlayerRegistration(TournamentSubModel): return self.team_registration.tournament.club_member_fee_deduction else: return 0 + + def get_player_registration_fee(self): + if self.club_member and self.team_registration.tournament.club_member_fee_deduction is not None and self.team_registration.tournament.entry_fee is not None: + return self.team_registration.tournament.entry_fee - self.team_registration.tournament.club_member_fee_deduction + elif self.team_registration.tournament.entry_fee is not None: + return self.team_registration.tournament.entry_fee + else: + return 0 diff --git a/tournaments/models/team_registration.py b/tournaments/models/team_registration.py index a52bb0c..6094e9d 100644 --- a/tournaments/models/team_registration.py +++ b/tournaments/models/team_registration.py @@ -93,6 +93,10 @@ class TeamRegistration(TournamentSubModel): def players_sorted_by_rank(self): return self.player_registrations.all().order_by('rank') + @property + def players_sorted_by_captain(self): + return self.player_registrations.all().order_by('-captain') + def player_names(self): names = self.player_names_as_list() str = " - ".join(names) @@ -346,16 +350,32 @@ class TeamRegistration(TournamentSubModel): deadlines = [p.time_to_confirm for p in self.players_sorted_by_rank if p.time_to_confirm is not None] return max(deadlines) if deadlines else None + def confirm_pre_registration(self): + """Confirm the team's pre-registration""" + # Update all players in the team + for player in self.players_sorted_by_rank: + print(f"Updating player {player.first_name} {player.last_name} (ID: {player.id})") + player.registration_status = RegistrationStatus.PENDING + player.save() + def confirm_registration(self, payment_intent_id=None): """Confirm the team's registration after being moved from waiting list""" + print(f"Confirming registration for team {self.id} with payment {payment_intent_id}") + # Update all players in the team for player in self.players_sorted_by_rank: + print(f"Updating player {player.first_name} {player.last_name} (ID: {player.id})") + # # Vérifier si ce joueur a déjà ce payment_id + # if player.payment_id == payment_intent_id and payment_intent_id: + # print(f"Player {player.id} already has payment_id {payment_intent_id}, skipping") + # continue player.time_to_confirm = None player.payment_id = payment_intent_id if payment_intent_id is not None: player.payment_type = PlayerPaymentType.CREDIT_CARD player.registration_status = RegistrationStatus.CONFIRMED player.save() + print(f"✅ Updated player {player.id} with payment {payment_intent_id}") def confirm_if_placed(self): if self.needs_confirmation() is False: @@ -523,3 +543,10 @@ class TeamRegistration(TournamentSubModel): def is_positioned(self): return self.bracket_position is not None or self.group_stage_position is not None + + def get_team_registration_fee(self): + # Get all player registrations for this team + player_registrations = self.players_sorted_by_rank + # Check payment status for each player + payment_statuses = [player.get_player_registration_fee() for player in player_registrations] + return sum(payment_statuses) diff --git a/tournaments/services/email_service.py b/tournaments/services/email_service.py index 70fbb75..9aeafe9 100644 --- a/tournaments/services/email_service.py +++ b/tournaments/services/email_service.py @@ -595,7 +595,7 @@ class TournamentEmailService: @staticmethod def notify_team(team, tournament, message_type: TeamEmailType): # Notify both players separately if there is no captain or the captain is unavailable - players = list(team.players_sorted_by_rank) + players = list(team.players_sorted_by_captain) if len(players) == 2: print("TournamentEmailService.notify_team 2p", team) first_player, second_player = players @@ -693,7 +693,7 @@ class TournamentEmailService: payment: The payment details from Stripe """ tournament = team_registration.tournament - player_registrations = team_registration.players_sorted_by_rank + player_registrations = team_registration.players_sorted_by_captain # Calculate payment amount payment_amount = None @@ -712,10 +712,13 @@ class TournamentEmailService: federal_level_category = FederalLevelCategory(tournament.federal_level_category) tournament_word = federal_level_category.localized_word() tournament_prefix_that = federal_level_category.localized_prefix_that() - + processed_emails = set() for player in player_registrations: if not player.email or not player.registered_online: continue + if player.email in processed_emails: + continue + processed_emails.add(player.email) tournament_details_str = tournament.build_tournament_details_str() other_player = team_registration.get_other_player(player) if len(player_registrations) > 1 else None @@ -774,7 +777,7 @@ class TournamentEmailService: team_registration: The team registration refund_details: The refund details from Stripe """ - player_registrations = team_registration.players_sorted_by_rank + player_registrations = team_registration.players_sorted_by_captain refund_amount = None currency_service = CurrencyService()