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", "bale_chat_id", "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", "bale_chat_id", "supervisor_mobile_1", "supervisor_mobile_2", "supervisor_mobile_3", "supervisor_mobile_4") list_editable = ("sort_order", "show_in_customer_form", "accepts_external_tickets", "is_active") filter_horizontal = ("permissions",) inlines = (UnitMembershipInline,) fieldsets = ( ("مشخصات واحد", {"fields": ("name", "slug", "description", "search_keywords", "sort_order")}), ("اطلاع‌رسانی بله و سرپرستان", {"fields": ("bale_chat_id", "supervisor_mobile_1", "supervisor_mobile_2", "supervisor_mobile_3", "supervisor_mobile_4")}), ("نمایش و دسترسی", {"fields": ("permissions", "show_in_customer_form", "accepts_external_tickets", "is_active")}), ) @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('تصویر کارشناس', url, obj.updated_at.timestamp())