67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
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")
|