From bcaa209fa70233247ba64e6ed3fc85143a097fdd Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Wed, 16 Jul 2025 19:02:33 +0300 Subject: [PATCH] Features: 1) Ensure `attributes` field is initialized as a dictionary if not already set; 2) Add logic to mark `system_email_sent` in `attributes` when order is finished; Fixes: 1) Remove redundant logic for `attributes` handling in `emailing.py`; Extra: 1) Minor refactor in `process_order_changes` for better attribute management. --- core/signals.py | 5 +++++ core/utils/emailing.py | 6 ------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/core/signals.py b/core/signals.py index c2f8d3f1..9f63ea63 100644 --- a/core/signals.py +++ b/core/signals.py @@ -65,6 +65,9 @@ def create_promocode_on_user_referring(instance, created, **_kwargs): @receiver(post_save, sender=Order) def process_order_changes(instance, created, **_kwargs): + if type(instance.attributes) is not dict: + instance.attributes = {} + if not created: if instance.status != "PENDING" and instance.user: pending_orders = Order.objects.filter(user=instance.user, status="PENDING") @@ -116,6 +119,8 @@ def process_order_changes(instance, created, **_kwargs): instance.save() if instance.status == "FINISHED" and not instance.attributes.get("system_email_sent", False): + instance.attributes["system_email_sent"] = True + instance.save() send_order_finished_email.delay(instance.uuid) diff --git a/core/utils/emailing.py b/core/utils/emailing.py index 0f8d9388..dcdcdec7 100644 --- a/core/utils/emailing.py +++ b/core/utils/emailing.py @@ -163,10 +163,4 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]: send_thank_you_email(shipped_ops) - if type(order.attributes) is not dict: - order.attributes = {} - - order.attributes["system_email_sent"] = True - order.save() - return True, str(order.uuid)