@ -1583,9 +1583,14 @@ def proceed_to_payment(request, tournament_id):
messages . error ( request , f " Erreur lors de la création de la session de paiement: { str ( e ) } " )
messages . error ( request , f " Erreur lors de la création de la session de paiement: { str ( e ) } " )
return redirect ( ' tournament-info ' , tournament_id = tournament_id )
return redirect ( ' tournament-info ' , tournament_id = tournament_id )
@login_required
def tournament_payment_success ( request , tournament_id ) :
def tournament_payment_success ( request , tournament_id ) :
""" Handle successful Stripe payment for tournament registration """
""" Handle successful Stripe payment for tournament registration """
# For unauthenticated users, process payment and redirect directly to registration page
if not request . user . is_authenticated :
return _handle_unauthenticated_payment_success ( request , tournament_id )
# Original logic for authenticated users
# Get checkout session ID from session
# Get checkout session ID from session
checkout_session_id = request . session . get ( ' stripe_checkout_session_id ' )
checkout_session_id = request . session . get ( ' stripe_checkout_session_id ' )
if not checkout_session_id :
if not checkout_session_id :
@ -1641,6 +1646,68 @@ def tournament_payment_success(request, tournament_id):
# For direct payments, go to tournament info
# For direct payments, go to tournament info
return redirect ( ' tournament-info ' , tournament_id = tournament_id )
return redirect ( ' tournament-info ' , tournament_id = tournament_id )
def _handle_unauthenticated_payment_success ( request , tournament_id ) :
""" Handle payment success for unauthenticated users """
print ( f " [PAYMENT SUCCESS] Handling unauthenticated user payment for tournament { tournament_id } " )
# Get checkout session ID from session
checkout_session_id = request . session . get ( ' stripe_checkout_session_id ' )
if not checkout_session_id :
print ( f " [PAYMENT SUCCESS] No checkout session ID found " )
messages . error ( request , " Session de paiement introuvable. " )
return redirect ( ' register_tournament ' , tournament_id = tournament_id )
try :
# Verify payment status with Stripe
stripe . api_key = settings . STRIPE_SECRET_KEY
print ( f " [PAYMENT SUCCESS] Retrieving checkout session: { checkout_session_id } " )
stripe_account_id = request . session . get ( ' stripe_account_id ' )
if not stripe_account_id :
checkout_session = stripe . checkout . Session . retrieve ( checkout_session_id )
else :
checkout_session = stripe . checkout . Session . retrieve ( checkout_session_id , stripe_account = stripe_account_id )
print ( f " [PAYMENT SUCCESS] Payment status: { checkout_session . payment_status } " )
if checkout_session . payment_status == ' paid ' :
# Process the payment success
payment_service = PaymentService ( request )
success = payment_service . process_successful_payment ( checkout_session )
print ( f " [PAYMENT SUCCESS] Payment processing success: { success } " )
if success :
# Always set success flags for unauthenticated users since they come from registration
request . session [ ' registration_successful ' ] = True
request . session [ ' registration_paid ' ] = True
# Clear payment-related session data
for key in [ ' stripe_checkout_session_id ' , ' team_registration_id ' , ' payment_source_page ' , ' stripe_account_id ' ] :
if key in request . session :
del request . session [ key ]
print ( f " [PAYMENT SUCCESS] Redirecting to registration page with success flags " )
# Redirect directly to registration page with success context
return redirect ( ' register_tournament ' , tournament_id = tournament_id )
else :
messages . error ( request , " Erreur lors du traitement du paiement. " )
else :
messages . error ( request , " Le paiement n ' a pas été complété. " )
except Exception as e :
print ( f " [PAYMENT SUCCESS] Payment processing error: { str ( e ) } " )
messages . error ( request , f " Erreur lors de la vérification du paiement: { str ( e ) } " )
# Clean up session variables even if there was an error
for key in [ ' stripe_checkout_session_id ' , ' team_registration_id ' , ' payment_source_page ' , ' stripe_account_id ' ] :
if key in request . session :
del request . session [ key ]
# Always redirect to registration page for unauthenticated users
return redirect ( ' register_tournament ' , tournament_id = tournament_id )
@csrf_protect
@csrf_protect
def register_tournament ( request , tournament_id ) :
def register_tournament ( request , tournament_id ) :
tournament = get_object_or_404 ( Tournament , id = tournament_id )
tournament = get_object_or_404 ( Tournament , id = tournament_id )
@ -1657,7 +1724,7 @@ def register_tournament(request, tournament_id):
# Check for registration_successful flag
# Check for registration_successful flag
registration_successful = request . session . pop ( ' registration_successful ' , False )
registration_successful = request . session . pop ( ' registration_successful ' , False )
registration_paid = request . session . pop ( ' registration_paid ' , False )
registration_paid = request . session . pop ( ' registration_paid ' , False )
registered_team = None
# Handle payment cancellation - check for cancelled team registration
# Handle payment cancellation - check for cancelled team registration
cancel_team_registration_id = request . session . pop ( ' cancel_team_registration_id ' , None )
cancel_team_registration_id = request . session . pop ( ' cancel_team_registration_id ' , None )
if cancel_team_registration_id :
if cancel_team_registration_id :
@ -1676,7 +1743,8 @@ def register_tournament(request, tournament_id):
if not team_registration . is_paid ( ) :
if not team_registration . is_paid ( ) :
team_registration . delete ( )
team_registration . delete ( )
print ( f " [PAYMENT CANCEL] Deleted unpaid team registration { cancel_team_registration_id } " )
print ( f " [PAYMENT CANCEL] Deleted unpaid team registration { cancel_team_registration_id } " )
else :
registered_team = team_registration
except TeamRegistration . DoesNotExist :
except TeamRegistration . DoesNotExist :
print ( f " [PAYMENT CANCEL] Team registration { cancel_team_registration_id } not found " )
print ( f " [PAYMENT CANCEL] Team registration { cancel_team_registration_id } not found " )
except Exception as e :
except Exception as e :
@ -1702,6 +1770,7 @@ def register_tournament(request, tournament_id):
' tournament ' : tournament ,
' tournament ' : tournament ,
' registration_successful ' : True ,
' registration_successful ' : True ,
' registration_paid ' : registration_paid ,
' registration_paid ' : registration_paid ,
' registered_team ' : registered_team ,
' current_players ' : [ ] ,
' current_players ' : [ ] ,
' cart_data ' : { ' players ' : [ ] }
' cart_data ' : { ' players ' : [ ] }
}
}
@ -1823,6 +1892,7 @@ def handle_add_player_request(request, tournament, cart_manager, context):
if team_form . is_valid ( ) :
if team_form . is_valid ( ) :
# Update cart with mobile number before adding player
# Update cart with mobile number before adding player
cart_manager . update_contact_info (
cart_manager . update_contact_info (
email = team_form . cleaned_data . get ( ' email ' ) ,
mobile_number = team_form . cleaned_data . get ( ' mobile_number ' )
mobile_number = team_form . cleaned_data . get ( ' mobile_number ' )
)
)
@ -1834,7 +1904,7 @@ def handle_add_player_request(request, tournament, cart_manager, context):
context [ ' current_players ' ] = cart_data [ ' players ' ]
context [ ' current_players ' ] = cart_data [ ' players ' ]
context [ ' cart_data ' ] = cart_data
context [ ' cart_data ' ] = cart_data
context [ ' team_form ' ] = TournamentRegistrationForm ( initial = {
context [ ' team_form ' ] = TournamentRegistrationForm ( initial = {
' email ' : request . user . email if request . user . is_authenticated else ' ' ,
' email ' : request . user . email if request . user . is_authenticated else cart_data . get ( ' email ' , ' ' ) ,
' mobile_number ' : cart_data . get ( ' mobile_number ' , ' ' )
' mobile_number ' : cart_data . get ( ' mobile_number ' , ' ' )
} )
} )
@ -1898,6 +1968,7 @@ def handle_register_team_request(request, tournament, cart_manager, context):
# Update cart with contact info
# Update cart with contact info
cart_manager . update_contact_info (
cart_manager . update_contact_info (
email = team_form . cleaned_data . get ( ' email ' ) ,
mobile_number = team_form . cleaned_data . get ( ' mobile_number ' )
mobile_number = team_form . cleaned_data . get ( ' mobile_number ' )
)
)
@ -1922,6 +1993,7 @@ def handle_register_team_request(request, tournament, cart_manager, context):
)
)
context [ ' registration_successful ' ] = True
context [ ' registration_successful ' ] = True
context [ ' registered_team ' ] = result
context [ ' registration_paid ' ] = False
context [ ' registration_paid ' ] = False
context [ ' current_players ' ] = [ ]
context [ ' current_players ' ] = [ ]
context [ ' add_player_form ' ] = None # No more adding players after success
context [ ' add_player_form ' ] = None # No more adding players after success
@ -1939,6 +2011,7 @@ def handle_payment_request(request, cart_manager, context, tournament_id):
if team_form . is_valid ( ) :
if team_form . is_valid ( ) :
# Update cart with contact info
# Update cart with contact info
cart_manager . update_contact_info (
cart_manager . update_contact_info (
email = team_form . cleaned_data . get ( ' email ' ) ,
mobile_number = team_form . cleaned_data . get ( ' mobile_number ' )
mobile_number = team_form . cleaned_data . get ( ' mobile_number ' )
)
)