add signal message for shop

sync_v2
Raz 6 months ago
parent 8dd3438ace
commit 6247fee705
  1. 20
      shop/models.py
  2. 32
      shop/signals.py

@ -156,6 +156,26 @@ class Order(models.Model):
def shipping_address_can_be_edited(self):
return self.status in [OrderStatus.PENDING, OrderStatus.PAID, OrderStatus.PREPARED]
def get_shipping_address(self):
"""
Returns a formatted string of the shipping address
"""
if not self.shipping_address:
return "Aucune adresse de livraison fournie"
address_parts = [
self.shipping_address.street_address,
self.shipping_address.apartment if self.shipping_address.apartment else None,
self.shipping_address.city,
self.shipping_address.state if self.shipping_address.state else None,
self.shipping_address.postal_code,
self.shipping_address.country
]
# Filter out None values and join with newlines
formatted_address = '\n'.join(part for part in address_parts if part)
return formatted_address
class OrderItem(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='items')
product = models.ForeignKey(Product, on_delete=models.CASCADE)

@ -70,11 +70,11 @@ def _get_order_details(instance):
# Translate statuses
status_fr_map = {
"PENDING": "EN ATTENTE", "PAID": "PAYÉE",
"SHIPPED": "EXPÉDIÉE", "DELIVERED": "LIVRÉE", "CANCELED": "ANNULÉE"
"SHIPPED": "EXPÉDIÉE", "DELIVERED": "LIVRÉE", "CANCELED": "ANNULÉE", "REFUNDED": "REMBOURSÉE", "PREPARED": "EN COURS DE PRÉPARATION",
}
payment_status_fr_map = {
"UNPAID": "NON PAYÉE", "PAID": "PAYÉE", "FAILED": "ÉCHOUÉE"
"UNPAID": "NON PAYÉE", "PAID": "PAYÉE", "FAILED": "ÉCHOUÉE", "REFUNDED": "REMBOURSÉE",
}
# Calculate discount information
@ -106,7 +106,8 @@ def _get_order_details(instance):
'customer_info': customer_info,
'customer_email': customer_email,
'date_ordered': instance.date_ordered,
'admin_url': f"{settings.SHOP_SITE_ROOT_URL}{reverse('admin:shop_order_change', args=[instance.id])}"
'admin_url': f"{settings.SHOP_SITE_ROOT_URL}{reverse('admin:shop_order_change', args=[instance.id])}",
'shipping_address': instance.get_shipping_address(),
}
def _build_items_list(order_id, action):
@ -153,6 +154,8 @@ Statut de paiement: {order_details['payment_status_fr']}
{order_details['customer_info']}
{order_details['shipping_address']}
Articles:
{items_list}
@ -195,7 +198,8 @@ def _send_customer_notification(instance, order_details, items_list):
order_details['final_price'],
items_list,
contact_email,
shop_url
shop_url,
order_details['shipping_address']
)
# Skip if no email content returned
@ -213,7 +217,7 @@ def _send_customer_notification(instance, order_details, items_list):
def _get_customer_email_content(status, payment_status, order_id, date, status_fr,
total_price, has_coupon, coupon_info, discount_amount,
final_price, items_list, contact_email, shop_url):
final_price, items_list, contact_email, shop_url, shipping_address):
"""Get the appropriate customer email content based on order status."""
# Build price information with coupon details if applicable
@ -230,21 +234,23 @@ Montant payé: {final_price}€"""
'subject': f"Confirmation de votre commande #{order_id} - Padel Club",
'message': _build_payment_confirmation_email(order_id, date, status_fr,
price_info, items_list,
contact_email, shop_url)
contact_email, shop_url, shipping_address)
}
# Order status update email
elif status in [OrderStatus.SHIPPED, OrderStatus.DELIVERED, OrderStatus.CANCELED]:
elif status in [OrderStatus.SHIPPED, OrderStatus.DELIVERED, OrderStatus.CANCELED, OrderStatus.PREPARED, OrderStatus.REFUNDED]:
status_message = {
OrderStatus.PREPARED: "Votre commande est en cours de préparation.",
OrderStatus.SHIPPED: "Votre commande a été expédiée et est en cours de livraison.",
OrderStatus.DELIVERED: "Votre commande a été livrée. Nous espérons que vous apprécierez vos produits !",
OrderStatus.REFUNDED: "Votre commande a été annulée et son remboursement est en cours de traitement.",
OrderStatus.CANCELED: "Votre commande a été annulée. Si vous n'êtes pas à l'origine de cette annulation, veuillez nous contacter immédiatement."
}.get(status, "")
return {
'subject': f"Mise à jour de votre commande #{order_id} - Padel Club",
'message': _build_status_update_email(order_id, date, status_message, status_fr,
price_info, items_list, contact_email)
price_info, items_list, contact_email, shipping_address)
}
# Payment issue notification
@ -266,7 +272,7 @@ Montant payé: {final_price}€"""
# No email needed
return None
def _build_payment_confirmation_email(order_id, date, status_fr, price_info, items_list, contact_email, shop_url):
def _build_payment_confirmation_email(order_id, date, status_fr, price_info, items_list, contact_email, shop_url, shipping_address):
"""Build payment confirmation email message."""
return f"""
Bonjour,
@ -282,7 +288,10 @@ Détail de votre commande :
{items_list}
IMPORTANT - COMMENT RÉCUPÉRER VOTRE COMMANDE :
Notre boutique fonctionne entre amis 'Padel Club'. Nous allons préparer votre commande et vous la remettre en main propre lors d'une prochaine session de padel ! Aucune expédition n'est prévue, nous vous remettrons directement vos articles sur place.
Notre boutique fonctionne entre amis 'Padel Club'.
Nous allons préparer votre commande et vous la remettre en main propre lors d'une prochaine session de padel !
Si jamais la livraison est possible, nous vous expédierons votre commande à l'adresse indiquée. Vous serez alors notifiés par email lorsque votre commande sera expédiée.
{shipping_address}
Pour toute question concernant votre commande, n'hésitez pas à contacter notre service client :
{contact_email}
@ -295,7 +304,7 @@ Merci de votre confiance et à bientôt sur Padel Club !
L'équipe Padel Club
"""
def _build_status_update_email(order_id, date, status_message, status_fr, price_info, items_list, contact_email):
def _build_status_update_email(order_id, date, status_message, status_fr, price_info, items_list, contact_email, shipping_address):
"""Build status update email message."""
return f"""
Bonjour,
@ -303,6 +312,7 @@ Bonjour,
Mise à jour concernant votre commande Padel Club #{order_id} du {date} :
{status_message}
{shipping_address}
Statut actuel: {status_fr}
{price_info}

Loading…
Cancel
Save