From df596a90d5d58aecb5bd868699b6ead872b34f7f Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Fri, 22 May 2026 19:16:03 +0330 Subject: [PATCH] fix rolback items --- backend/order/admin.py | 17 +++++++++++++++++ backend/order/tasks.py | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/backend/order/admin.py b/backend/order/admin.py index 651d078..4e47d11 100644 --- a/backend/order/admin.py +++ b/backend/order/admin.py @@ -18,6 +18,7 @@ from django.shortcuts import redirect from .permissons import ShopOrderAdminPermission from django.urls import reverse from django.utils.safestring import mark_safe +from azbankgateways.models.enum import PaymentStatus class OrderItemModelInline(StackedInline): model = OrderItemModel @@ -271,6 +272,22 @@ class OrderAdmin(ModelAdmin, ImportExportModelAdmin): logging.debug("This record is verify now.", extra={"pk": bank_record.pk}) elif bank_record.order and not bank_record.order.is_paid: bank_record.order.rollback_stock() + + failed_statuses = [ + PaymentStatus.CANCEL_BY_USER, + PaymentStatus.EXPIRE_GATEWAY_TOKEN, + PaymentStatus.EXPIRE_VERIFY_PAYMENT, + PaymentStatus.ERROR, + ] + failed_records = bank_models.Bank.objects.filter( + status__in=failed_statuses, + order__isnull=False, + order__is_paid=False, + order__is_stock_rolled_back=False, + ).select_related('order') + + for bank_record in failed_records: + bank_record.order.rollback_stock() messages.success(request, f"با موفقیت اپدیت شد") return redirect("admin:order_ordermodel_changelist") diff --git a/backend/order/tasks.py b/backend/order/tasks.py index a0a9e56..b645538 100644 --- a/backend/order/tasks.py +++ b/backend/order/tasks.py @@ -4,6 +4,7 @@ from azbankgateways import ( models as bank_models, default_settings as settings, ) +from azbankgateways.models.enum import PaymentStatus from .models import OrderModel from account.models import PushSubscription import ghasedak_sms @@ -30,6 +31,23 @@ def udpate_bank_status(): elif bank_record.order: order = bank_record.order order.rollback_stock() + + failed_statuses = [ + PaymentStatus.CANCEL_BY_USER, + PaymentStatus.EXPIRE_GATEWAY_TOKEN, + PaymentStatus.EXPIRE_VERIFY_PAYMENT, + PaymentStatus.ERROR, + ] + failed_records = bank_models.Bank.objects.filter( + status__in=failed_statuses, + order__isnull=False, + order__is_paid=False, + order__is_stock_rolled_back=False, + ).select_related('order') + + for bank_record in failed_records: + bank_record.order.rollback_stock() + return 'update bank record is done'