73 lines
3.2 KiB
Python
73 lines
3.2 KiB
Python
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)
|