This commit is contained in:
javad committed 2026-09-10 11:34:19 +03:30
commit fa9d154db9
260 files changed
+17643

No files matched your search

+72
View File
@@ -0,0 +1,72 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from apps.staff.models import StaffProfile
from apps.staff.forms import StaffProfileAdminForm
from .models import MagicLinkAccessLog, OTPChallenge, TicketMagicLink, User
class MagicLinkAccessLogInline(admin.TabularInline):
model = MagicLinkAccessLog
extra = 0
can_delete = False
fields = ("opened_at", "ip_address", "user_agent")
readonly_fields = fields
def has_add_permission(self, request, obj=None):
return False
@admin.register(TicketMagicLink)
class TicketMagicLinkAdmin(admin.ModelAdmin):
list_display = ("ticket", "recipient_name", "recipient_mobile", "created_unit", "created_by", "created_at", "expires_at", "view_count", "revoked_at")
list_filter = ("created_unit", "created_reason", "revoked_at", "expires_at")
search_fields = ("ticket__ticket_number", "recipient_name", "recipient_mobile", "created_by__username")
readonly_fields = ("ticket", "customer", "token_hash", "created_by", "created_unit", "recipient_name", "recipient_mobile", "created_at", "expires_at", "used_at", "revoked_at", "created_reason", "last_used_ip", "last_user_agent", "view_count")
inlines = (MagicLinkAccessLogInline,)
def get_queryset(self, request):
queryset = super().get_queryset(request).select_related("ticket", "created_unit", "created_by")
if request.user.is_superuser or request.user.has_perm("accounts.view_all_magic_links"):
return queryset
unit_ids = request.user.unit_memberships.filter(is_active=True).values_list("unit_id", flat=True)
return queryset.filter(created_unit_id__in=unit_ids)
def has_add_permission(self, request):
return False
@admin.register(MagicLinkAccessLog)
class MagicLinkAccessLogAdmin(admin.ModelAdmin):
list_display = ("magic_link", "opened_at", "ip_address", "user_agent")
list_filter = ("opened_at",)
search_fields = ("magic_link__ticket__ticket_number", "ip_address", "user_agent")
readonly_fields = ("magic_link", "opened_at", "ip_address", "user_agent")
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False
class StaffProfileInline(admin.StackedInline):
model = StaffProfile
form = StaffProfileAdminForm
extra = 0
max_num = 1
fields = ("primary_unit", "role", "first_name", "last_name", "display_name", "job_title", "avatar", "mobile", "bale_chat_id", "bale_notifications_enabled", "is_customer_selectable", "sort_order", "is_active")
@admin.register(User)
class CustomUserAdmin(UserAdmin):
fieldsets = UserAdmin.fieldsets + (("سامانه تیکت", {"fields": ("mobile", "account_type")}),)
add_fieldsets = UserAdmin.add_fieldsets + (("سامانه تیکت", {"fields": ("mobile", "account_type")}),)
list_display = ("username", "mobile", "account_type", "is_active", "is_staff")
list_filter = UserAdmin.list_filter + ("account_type",)
inlines = (StaffProfileInline,)
def save_model(self, request, obj, form, change):
if obj.account_type == User.AccountType.STAFF:
obj.is_staff = True
super().save_model(request, obj, form, change)
admin.site.register(OTPChallenge)