first
This commit is contained in:
commit
fa9d154db9
260 files changed
+17643
No files matched your search
@@ -0,0 +1,51 @@
|
||||
from django.contrib import admin
|
||||
from django.utils.html import format_html
|
||||
from django.urls import reverse
|
||||
from .forms import StaffProfileAdminForm
|
||||
from .models import OrganizationalUnit, StaffProfile, UnitMembership
|
||||
|
||||
|
||||
class UnitMembershipInline(admin.TabularInline):
|
||||
model = UnitMembership
|
||||
extra = 0
|
||||
filter_horizontal = ("permissions",)
|
||||
|
||||
|
||||
@admin.register(OrganizationalUnit)
|
||||
class OrganizationalUnitAdmin(admin.ModelAdmin):
|
||||
list_display = ("name", "slug", "sort_order", "show_in_customer_form", "accepts_external_tickets", "is_active", "updated_at")
|
||||
list_filter = ("show_in_customer_form", "accepts_external_tickets", "is_active")
|
||||
search_fields = ("name", "slug")
|
||||
list_editable = ("sort_order", "show_in_customer_form", "accepts_external_tickets", "is_active")
|
||||
filter_horizontal = ("permissions",)
|
||||
inlines = (UnitMembershipInline,)
|
||||
|
||||
|
||||
@admin.register(UnitMembership)
|
||||
class UnitMembershipAdmin(admin.ModelAdmin):
|
||||
list_display = ("user", "unit", "ticket_scope", "is_primary", "is_active")
|
||||
list_filter = ("unit", "ticket_scope", "is_primary", "is_active")
|
||||
search_fields = ("user__username", "user__mobile", "unit__name")
|
||||
filter_horizontal = ("permissions",)
|
||||
|
||||
@admin.register(StaffProfile)
|
||||
class StaffProfileAdmin(admin.ModelAdmin):
|
||||
form = StaffProfileAdminForm
|
||||
list_display = ("display_name", "primary_unit", "role", "sort_order", "job_title", "mobile", "is_active", "is_customer_selectable")
|
||||
list_editable = ("sort_order",)
|
||||
list_filter = ("primary_unit", "role", "is_active", "is_customer_selectable", "bale_notifications_enabled")
|
||||
search_fields = ("first_name", "last_name", "display_name", "mobile", "user__username")
|
||||
fieldsets = (
|
||||
("حساب کاربری", {"fields": ("user",)}),
|
||||
("مشخصات کارشناس", {"fields": ("primary_unit", "role", "first_name", "last_name", "display_name", "job_title", "avatar_preview", "avatar", "mobile")}),
|
||||
("اطلاعرسانی", {"fields": ("bale_chat_id", "bale_notifications_enabled")}),
|
||||
("نمایش و دسترسی", {"fields": ("is_customer_selectable", "sort_order", "is_active")}),
|
||||
)
|
||||
readonly_fields = ("avatar_preview",)
|
||||
|
||||
@admin.display(description="تصویر فعلی")
|
||||
def avatar_preview(self, obj):
|
||||
if not obj or not obj.pk or not obj.avatar:
|
||||
return "تصویری ثبت نشده است."
|
||||
url = reverse("staff_tickets:expert_avatar", args=[obj.user.public_id])
|
||||
return format_html('<img src="{}?v={}" alt="تصویر کارشناس" style="width:96px;height:96px;border-radius:16px;object-fit:cover;border:1px solid #ccd8e5">', url, obj.updated_at.timestamp())
|
||||
Reference in new issue
Block a user