from django.contrib import admin from django.shortcuts import redirect from .models import BazaarPurchase, BazaarSettings, FeatureActivation, FeaturePlan, FeaturePlanTier, GemPack, GemTransaction @admin.register(BazaarSettings) class BazaarSettingsAdmin(admin.ModelAdmin): """تک‌ردیفی — لیست را رد می‌کنیم و مستقیم فرم ویرایش همان یک ردیف را نشان می‌دهیم.""" list_display = ("package_name", "updated_at") def has_add_permission(self, request): return not BazaarSettings.objects.exists() def changelist_view(self, request, extra_context=None): obj = BazaarSettings.get_solo() return redirect("admin:billing_bazaarsettings_change", obj.pk) class FeaturePlanTierInline(admin.TabularInline): model = FeaturePlanTier extra = 1 @admin.register(FeaturePlan) class FeaturePlanAdmin(admin.ModelAdmin): list_display = ("name", "key", "is_purchasable") search_fields = ("name", "key") inlines = [FeaturePlanTierInline] @admin.register(GemPack) class GemPackAdmin(admin.ModelAdmin): list_display = ("display_name", "bazaar_sku", "gem_amount", "is_active", "sort_order") list_editable = ("is_active", "sort_order") search_fields = ("display_name", "bazaar_sku") @admin.register(FeatureActivation) class FeatureActivationAdmin(admin.ModelAdmin): list_display = ("user", "feature", "expires_at", "updated_at") list_filter = ("feature",) search_fields = ("user__phone",) autocomplete_fields = ["user"] @admin.register(GemTransaction) class GemTransactionAdmin(admin.ModelAdmin): list_display = ("user", "amount", "reason", "created_at") list_filter = ("reason",) search_fields = ("user__phone", "note") readonly_fields = ("user", "amount", "reason", "note", "created_at") def has_add_permission(self, request): # تراکنش جم فقط از سرویس‌های داخلی ساخته می‌شود، نه دستی از ادمین — # برای اصلاح دستی از GemTransaction.Reason.ADMIN_ADJUSTMENT در شل/سرویس استفاده کن. return False @admin.register(BazaarPurchase) class BazaarPurchaseAdmin(admin.ModelAdmin): list_display = ("user", "gem_pack", "status", "gems_granted", "created_at", "verified_at") list_filter = ("status",) search_fields = ("user__phone", "purchase_token") readonly_fields = ("purchase_token", "created_at", "verified_at")