File size: 4,943 Bytes
3e8a166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# management/admin.py
# -*- coding: utf-8 -*-
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import (
    CustomUser,
    AdminLevel2,
    Panel,
    License,
    EndUser,
    Plan,
    Subscription,
    Payment,
    DiscountCode,
    TelegramUser,
    SecurityToken,
    PushSubscription,
    PaymentMethod,
    PaymentSetting,
    PaymentDetail
)

# تنظیمات ادمین برای مدل CustomUser
@admin.register(CustomUser)
class CustomUserAdmin(BaseUserAdmin):
    list_display = ('username', 'email', 'role', 'is_staff')
    list_filter = ('role', 'is_staff', 'is_superuser', 'is_active')
    search_fields = ('username', 'email')
    ordering = ('username',)
    fieldsets = BaseUserAdmin.fieldsets + (
        ('اطلاعات نقش', {'fields': ('role', 'marzban_admin_id')}),
    )

# تنظیمات ادمین برای مدل AdminLevel2
@admin.register(AdminLevel2)
class AdminLevel2Admin(admin.ModelAdmin):
    # FIXED: 'marzban_api_token' does not exist in the model
    list_display = ('user', 'telegram_chat_id', 'license_expiry_date')
    search_fields = ('user__username',)

# تنظیمات ادمین برای مدل Panel
@admin.register(Panel)
class PanelAdmin(admin.ModelAdmin):
    # FIXED: 'url' and 'api_token' do not exist. Used correct fields.
    list_display = ('name', 'owner', 'marzban_host')
    search_fields = ('name', 'owner__username')

# تنظیمات ادمین برای مدل License
@admin.register(License)
class LicenseAdmin(admin.ModelAdmin):
    # FIXED: Used correct field names from the model ('key', 'owner', etc.)
    list_display = ('key', 'owner', 'is_active', 'created_at', 'expiry_date')
    list_filter = ('is_active',)
    search_fields = ('key', 'owner__username')

# تنظیمات ادمین برای مدل EndUser
@admin.register(EndUser)
class EndUserAdmin(admin.ModelAdmin):
    list_display = ('username', 'panel', 'marzban_user_id')
    search_fields = ('username', 'marzban_user_id')
    list_filter = ('panel',)

# تنظیمات ادمین برای مدل Plan
@admin.register(Plan)
class PlanAdmin(admin.ModelAdmin):
    list_display = ('name', 'panel', 'price', 'duration_days', 'data_limit_gb', 'is_active')
    list_filter = ('is_active', 'panel')
    search_fields = ('name',)

# تنظیمات ادمین برای مدل Subscription
@admin.register(Subscription)
class SubscriptionAdmin(admin.ModelAdmin):
    list_display = ('end_user', 'plan', 'status', 'start_date', 'end_date', 'remaining_data_gb')
    # FIXED: 'is_trial' does not exist in the model
    list_filter = ('status', 'plan', 'panel')
    search_fields = ('end_user__username',)
    date_hierarchy = 'start_date'

# تنظیمات ادمین برای مدل Payment
@admin.register(Payment)
class PaymentAdmin(admin.ModelAdmin):
    list_display = ('subscription', 'admin', 'amount', 'status', 'created_at')
    # IMPROVED: Filtering on image/text fields is not useful. Using status instead.
    list_filter = ('status', 'admin')
    search_fields = ('subscription__end_user__username',)
    date_hierarchy = 'created_at'

# تنظیمات ادمین برای مدل DiscountCode
@admin.register(DiscountCode)
class DiscountCodeAdmin(admin.ModelAdmin):
    list_display = ('code', 'admin', 'discount_percentage', 'is_active')
    list_filter = ('is_active',)
    search_fields = ('code', 'admin__username',)

# تنظیمات ادمین برای مدل TelegramUser
@admin.register(TelegramUser)
class TelegramUserAdmin(admin.ModelAdmin):
    list_display = ('username', 'chat_id', 'admin_id')
    search_fields = ('username', 'chat_id')

# تنظیمات ادمین برای مدل SecurityToken
@admin.register(SecurityToken)
class SecurityTokenAdmin(admin.ModelAdmin):
    list_display = ('admin_id', 'token', 'expiration_date')
    search_fields = ('admin_id', 'token')

# تنظیمات ادمین برای مدل PushSubscription
@admin.register(PushSubscription)
class PushSubscriptionAdmin(admin.ModelAdmin):
    list_display = ('user', 'created_at')
    search_fields = ('user__username',)

# تنظیمات ادمین برای مدل PaymentMethod
@admin.register(PaymentMethod)
class PaymentMethodAdmin(admin.ModelAdmin):
    list_display = ('name', 'is_active', 'can_be_managed_by_level3')
    list_filter = ('is_active', 'can_be_managed_by_level3')

# تنظیمات ادمین برای مدل PaymentSetting
@admin.register(PaymentSetting)
class PaymentSettingAdmin(admin.ModelAdmin):
    list_display = ('admin_level_3', 'payment_method', 'is_active')
    list_filter = ('is_active', 'payment_method')
    search_fields = ('admin_level_3__user__username',)

# تنظیمات ادمین برای مدل PaymentDetail
@admin.register(PaymentDetail)
class PaymentDetailAdmin(admin.ModelAdmin):
    list_display = ('admin_level_3', 'card_number', 'wallet_address')
    search_fields = ('admin_level_3__user__username',)