Files
shopship/apps/billing/admin.py
T

67 lines
2.4 KiB
Python
Raw Normal View History

2026-08-24 15:54:08 +03:30
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")