From faab09595cc48e2fa9b27089bcf0fc20ab99b011 Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Thu, 13 Nov 2025 10:23:15 +0330 Subject: [PATCH] create promotion outside of atomic --- apps/promotions/models.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/promotions/models.py b/apps/promotions/models.py index 54ef57d..eb174cc 100644 --- a/apps/promotions/models.py +++ b/apps/promotions/models.py @@ -215,12 +215,16 @@ class Recipient(BaseModel): base_amount=promotion_amount, ) if recipient and promotion_amount and created: - with transaction.atomic(): - reserved = self.plan.reserve_promotion_amount(promotion_amount) - if reserved: - promotion.promote() - else: - raise Exception('promotion reward not reserved') + try: + with transaction.atomic(): + reserved = self.plan.reserve_promotion_amount(promotion_amount) + if reserved: + promotion.promote() + else: + raise Exception('promotion reward not reserved') + except Exception as e: + promotion.change_state(from_states=[promotion.state], to_state=PaymentStateChoices.EXPECTED_FAILURE, same_ok=True) + promotion.refresh_from_db() return promotion return None