@ -66,6 +66,21 @@ def _get_order_details(instance):
" UNPAID " : " NON PAYÉE " , " PAID " : " PAYÉE " , " FAILED " : " ÉCHOUÉE "
}
# Calculate discount information
has_coupon = instance . coupon is not None
coupon_info = " "
final_price = instance . total_price
if has_coupon :
coupon_code = instance . coupon . code
discount_amount = instance . discount_amount
final_price = instance . get_total_after_discount ( )
if instance . coupon . discount_percent > 0 :
coupon_info = f " Code promo: { coupon_code } ( { instance . coupon . discount_percent } %) "
else :
coupon_info = f " Code promo: { coupon_code } (€ { discount_amount } ) "
return {
' order_id ' : instance . id ,
' status ' : instance . status ,
@ -73,6 +88,10 @@ def _get_order_details(instance):
' payment_status ' : instance . payment_status ,
' payment_status_fr ' : payment_status_fr_map . get ( instance . payment_status , instance . payment_status ) ,
' total_price ' : instance . total_price ,
' has_coupon ' : has_coupon ,
' coupon_info ' : coupon_info ,
' discount_amount ' : instance . discount_amount if has_coupon else 0 ,
' final_price ' : final_price ,
' customer_info ' : customer_info ,
' customer_email ' : customer_email ,
' date_ordered ' : instance . date_ordered ,
@ -101,13 +120,22 @@ def _send_internal_notification(instance, action, order_details, items_list):
""" Send notification email to shop managers. """
action_fr = _translate_action ( action )
# Build price information with coupon details if applicable
price_info = f " Prix total: { order_details [ ' total_price ' ] } € "
if order_details [ ' has_coupon ' ] :
price_info = f """
Prix total : { order_details [ ' total_price ' ] } €
{ order_details [ ' coupon_info ' ] }
Réduction : - { order_details [ ' discount_amount ' ] } €
Montant payé : { order_details [ ' final_price ' ] } € """
subject = f " Commande # { order_details [ ' order_id ' ] } { action_fr } : { order_details [ ' status_fr ' ] } "
message = f """
La commande #{order_details['order_id']} a été {action_fr.lower()}
Statut : { order_details [ ' status_fr ' ] }
Statut de paiement : { order_details [ ' payment_status_fr ' ] }
Prix total : { order_details [ ' total_price ' ] } €
{ price_info }
{ order_details [ ' customer_info ' ] }
@ -147,6 +175,10 @@ def _send_customer_notification(instance, order_details, items_list):
date_formatted ,
order_details [ ' status_fr ' ] ,
order_details [ ' total_price ' ] ,
order_details [ ' has_coupon ' ] ,
order_details [ ' coupon_info ' ] ,
order_details [ ' discount_amount ' ] ,
order_details [ ' final_price ' ] ,
items_list ,
contact_email ,
shop_url
@ -166,15 +198,24 @@ def _send_customer_notification(instance, order_details, items_list):
)
def _get_customer_email_content ( status , payment_status , order_id , date , status_fr ,
total_price , items_list , contact_email , shop_url ) :
total_price , has_coupon , coupon_info , discount_amount ,
final_price , items_list , contact_email , shop_url ) :
""" Get the appropriate customer email content based on order status. """
# Build price information with coupon details if applicable
price_info = f " Prix total: { total_price } € "
if has_coupon :
price_info = f """ Prix total: { total_price } €
{ coupon_info }
Réduction : - { discount_amount } €
Montant payé : { final_price } € """
# Payment confirmation email
if status == OrderStatus . PAID and payment_status == " PAID " :
return {
' subject ' : f " Confirmation de votre commande # { order_id } - PadelClub " ,
' subject ' : f " Confirmation de votre commande # { order_id } - Padel Club " ,
' message ' : _build_payment_confirmation_email ( order_id , date , status_fr ,
total_price , items_list ,
price_info , items_list ,
contact_email , shop_url )
}
@ -187,41 +228,41 @@ def _get_customer_email_content(status, payment_status, order_id, date, status_f
} . get ( status , " " )
return {
' subject ' : f " Mise à jour de votre commande # { order_id } - PadelClub " ,
' subject ' : f " Mise à jour de votre commande # { order_id } - Padel Club " ,
' message ' : _build_status_update_email ( order_id , date , status_message , status_fr ,
total_ price, items_list , contact_email )
price_info , items_list , contact_email )
}
# Payment issue notification
elif payment_status == " FAILED " :
return {
' subject ' : f " Problème de paiement pour votre commande # { order_id } - PadelClub " ,
' message ' : _build_payment_issue_email ( order_id , date , total_ price,
' subject ' : f " Problème de paiement pour votre commande # { order_id } - Padel Club " ,
' message ' : _build_payment_issue_email ( order_id , date , price_info ,
items_list , contact_email , shop_url )
}
# Payment reminder for unpaid orders
elif payment_status == " UNPAID " and status != OrderStatus . PENDING :
return {
' subject ' : f " Rappel de paiement pour votre commande # { order_id } - PadelClub " ,
' message ' : _build_payment_reminder_email ( order_id , date , total_ price,
' subject ' : f " Rappel de paiement pour votre commande # { order_id } - Padel Club " ,
' message ' : _build_payment_reminder_email ( order_id , date , price_info ,
items_list , contact_email )
}
# No email needed
return None
def _build_payment_confirmation_email ( order_id , date , status_fr , total_ price, items_list , contact_email , shop_url ) :
def _build_payment_confirmation_email ( order_id , date , status_fr , price_info , items_list , contact_email , shop_url ) :
""" Build payment confirmation email message. """
return f """
Bonjour ,
Nous vous remercions pour votre commande sur PadelClub !
Nous vous remercions pour votre commande sur Padel Club !
Récapitulatif de votre commande #{order_id} du {date} :
Statut : { status_fr }
Prix total : { total_ price} €
{ price_info }
Détail de votre commande :
{ items_list }
@ -234,22 +275,22 @@ Pour toute question concernant votre commande, n'hésitez pas à contacter notre
Visitez notre boutique pour découvrir d ' autres produits :
{ shop_url }
Merci de votre confiance et à bientôt sur PadelClub !
Merci de votre confiance et à bientôt sur Padel Club !
L ' équipe PadelClub
L ' équipe Padel Club
"""
def _build_status_update_email ( order_id , date , status_message , status_fr , total_ price, items_list , contact_email ) :
def _build_status_update_email ( order_id , date , status_message , status_fr , price_info , items_list , contact_email ) :
""" Build status update email message. """
return f """
Bonjour ,
Mise à jour concernant votre commande PadelClub #{order_id} du {date} :
Mise à jour concernant votre commande Padel Club #{order_id} du {date} :
{ status_message }
Statut actuel : { status_fr }
Prix total : { total_ price} €
{ price_info }
Détail de votre commande :
{ items_list }
@ -257,21 +298,21 @@ Détail de votre commande :
Pour toute question concernant votre commande , n ' hésitez pas à contacter notre service client :
{ contact_email }
Merci de votre confiance et à bientôt sur PadelClub !
Merci de votre confiance et à bientôt sur Padel Club !
L ' équipe PadelClub
L ' équipe Padel Club
"""
def _build_payment_issue_email ( order_id , date , total_ price, items_list , contact_email , shop_url ) :
def _build_payment_issue_email ( order_id , date , price_info , items_list , contact_email , shop_url ) :
""" Build payment issue email message. """
return f """
Bonjour ,
Nous avons rencontré un problème lors du traitement du paiement de votre commande PadelClub #{order_id}.
Nous avons rencontré un problème lors du traitement du paiement de votre commande Padel Club #{order_id}.
Détails de la commande :
Date : { date }
Prix total : { total_ price} €
{ price_info }
Articles :
{ items_list }
@ -284,18 +325,18 @@ Vous pouvez également visiter notre boutique pour finaliser votre achat :
Merci de votre compréhension .
L ' équipe PadelClub
L ' équipe Padel Club
"""
def _build_payment_reminder_email ( order_id , date , total_ price, items_list , contact_email ) :
def _build_payment_reminder_email ( order_id , date , price_info , items_list , contact_email ) :
""" Build payment reminder email message. """
return f """
Bonjour ,
Nous vous rappelons que votre commande PadelClub #{order_id} du {date} n'a pas encore été payée.
Nous vous rappelons que votre commande Padel Club #{order_id} du {date} n'a pas encore été payée.
Détails de la commande :
Prix total : { total_ price} €
{ price_info }
Articles :
{ items_list }
@ -307,7 +348,7 @@ Si vous rencontrez des difficultés ou si vous avez des questions, n'hésitez pa
Merci de votre confiance .
L ' équipe PadelClub
L ' équipe Padel Club
"""
@receiver ( user_logged_in )