From c07d4b802b0b913697583de8342004d81c157b42 Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Thu, 28 May 2026 10:34:34 +0330 Subject: [PATCH] add update torb web hock to admin --- backend/product/admin.py | 55 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/backend/product/admin.py b/backend/product/admin.py index a8c33f3..81cf961 100644 --- a/backend/product/admin.py +++ b/backend/product/admin.py @@ -414,7 +414,7 @@ class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdm # compressed_fields = True warn_unsaved_form = True # list_per_page = 2 - actions_list = ['redirect_to_learn', 'update_products_price'] + actions_list = ['redirect_to_learn', 'update_products_price', 'resync_all_torob'] list_display = ['display_image', 'shop__shop_name', 'view', 'rating', 'category', 'created_at' ,'show_in_website', ] fieldsets = ( ('فیلد های اصلی', {'fields': ('name', 'description', 'category', 'image', 'related_products','show_in_trends', 'show_in_most_viewed', 'show_in_lot_of_discount', 'show_in_top_seller', 'shop', 'show_in_bot', 'bot_banner'), "classes": ["tab"],}), @@ -497,6 +497,57 @@ class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdm messages.success(request, f"قیمت {ProductVariant.objects.all().count()} تنوع محصول اپدیت شد") return redirect("admin:product_productmodel_changelist") + @action(description="ارسال مجدد همه محصولات به ترب") + def resync_all_torob(self, request): + from django.conf import settings + from product.tasks import send_torob_product_webhook + + if not getattr(settings, "TOROB_PRODUCT_WEBHOOK_TOKEN", None): + messages.error(request, "توکن وبهوک ترب در تنظیمات وجود ندارد") + return redirect("admin:product_productmodel_changelist") + + product_ids = list( + ProductModel.objects.exclude(slug__isnull=True).exclude(slug="").values_list("id", flat=True) + ) + if not product_ids: + messages.warning(request, "محصولی برای ارسال یافت نشد") + return redirect("admin:product_productmodel_changelist") + + chunk_size = 50 + queued = 0 + for start in range(0, len(product_ids), chunk_size): + send_torob_product_webhook.delay(product_ids[start:start + chunk_size]) + queued += 1 + + messages.success( + request, + f"{len(product_ids)} محصول در {queued} بسته برای ارسال به ترب در صف قرار گرفت", + ) + return redirect("admin:product_productmodel_changelist") + + def resync_selected_torob(self, request, queryset): + from django.conf import settings + from product.tasks import send_torob_product_webhook + + if not getattr(settings, "TOROB_PRODUCT_WEBHOOK_TOKEN", None): + messages.error(request, "توکن وبهوک ترب در تنظیمات وجود ندارد") + return + + product_ids = list( + queryset.exclude(slug__isnull=True).exclude(slug="").values_list("id", flat=True) + ) + if not product_ids: + messages.warning(request, "محصول معتبری انتخاب نشد") + return + + chunk_size = 50 + for start in range(0, len(product_ids), chunk_size): + send_torob_product_webhook.delay(product_ids[start:start + chunk_size]) + + messages.success(request, f"{len(product_ids)} محصول برای ارسال به ترب در صف قرار گرفت") + + resync_selected_torob.short_description = "ارسال محصولات انتخاب شده به ترب" + def bulk_update_subcategory_action(self, request, queryset): """اکشن برای تغییر دسته‌بندی چند محصول همزمان""" @@ -535,7 +586,7 @@ class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdm ) bulk_update_subcategory_action.short_description = "تغییر دسته‌بندی محصولات انتخاب شده" - actions = ['bulk_update_subcategory_action'] + actions = ['bulk_update_subcategory_action', 'resync_selected_torob']