from django.contrib import admin, messages from django.utils.html import format_html from . import bazaar from .models import BazaarCredential, Order, Transaction class TransactionInline(admin.TabularInline): model = Transaction extra = 0 @admin.register(Order) class OrderAdmin(admin.ModelAdmin): list_display = ('id', 'user_id', 'subscription_id', 'amount', 'currency', 'status', 'provider', 'created_at') list_filter = ('status', 'provider', 'currency') inlines = [TransactionInline] @admin.register(Transaction) class TransactionAdmin(admin.ModelAdmin): list_display = ('id', 'order', 'gateway', 'status', 'paid_at') list_filter = ('gateway', 'status') @admin.register(BazaarCredential) class BazaarCredentialAdmin(admin.ModelAdmin): """ اتصالِ یک‌باره به API بازار، بدونِ SSH: action لینکِ «اجازه» را می‌سازد؛ صاحبِ حسابِ بازار بازش می‌کند و بازار به verify برمی‌گردد. خودِ توکن هیچ‌جا نمایش داده نمی‌شود. """ list_display = ('__str__', 'authorized_at', 'pending_since') fields = ('connected', 'authorized_at', 'pending_since') readonly_fields = fields actions = ['make_authorize_link'] @admin.display(boolean=True, description='توکن دارد') def connected(self, obj): return bool(obj.refresh_token) def changelist_view(self, request, extra_context=None): BazaarCredential.objects.get_or_create(pk=1) return super().changelist_view(request, extra_context) def has_add_permission(self, request): return False @admin.action(description='ساختِ لینکِ اتصال به بازار') def make_authorize_link(self, request, queryset): url = bazaar.start_authorization() self.message_user(request, format_html( 'این لینک را صاحبِ حسابِ بازار باز کند و «اجازه» بزند: {0}', url, ), messages.SUCCESS)