Add get_registration_fee methods to registration models

apikeys
Razmig Sarkissian 2 months ago
parent 758bd60c93
commit 84a7047053
  1. 8
      tournaments/models/player_registration.py
  2. 27
      tournaments/models/team_registration.py
  3. 11
      tournaments/services/email_service.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

@ -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)

@ -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()

Loading…
Cancel
Save