You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

67 lines
2.3 KiB

from django.contrib import admin
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from unfold.admin import ModelAdmin, TabularInline
from unfold.decorators import display
from apps.support.models import SupportMessage, SupportRoom
from utils.admin import dovoodi_admin_site, project_admin_site
class SupportMessageInline(TabularInline):
model = SupportMessage
extra = 1
fields = ('sender_type', 'sender', 'content', 'is_read', 'created_at')
readonly_fields = ('created_at',)
class SupportRoomAdmin(ModelAdmin):
list_display = (
'id',
'display_user',
'display_status',
'unread_by_admin',
'unread_by_user',
'last_message_at',
'created_at',
)
list_filter = ('status', 'created_at', 'last_message_at')
search_fields = ('user__email', 'user__fullname', 'user__device_id')
readonly_fields = ('created_at', 'updated_at', 'last_message_at')
inlines = [SupportMessageInline]
list_per_page = 25
@display(description=_('User / Guest'))
def display_user(self, obj: SupportRoom):
if obj.user.email:
return f"{obj.user.fullname or ''} ({obj.user.email})".strip()
return f"Guest ({str(obj.user.device_id or obj.user_id)[:12]})"
@display(description=_('Status'))
def display_status(self, obj: SupportRoom):
colors = {
'open': '#3B82F6',
'pending': '#F59E0B',
'answered': '#10B981',
'closed': '#6B7280',
}
color = colors.get(obj.status, '#6B7280')
return format_html(
'<span style="color: {}; font-weight: 600;">{}</span>',
color,
obj.get_status_display(),
)
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
if isinstance(instance, SupportMessage) and not instance.pk:
if not instance.sender_id:
instance.sender = request.user
instance.sender_type = SupportMessage.SenderType.SUPPORT
instance.save()
formset.save_m2m()
dovoodi_admin_site.register(SupportRoom, SupportRoomAdmin)
project_admin_site.register(SupportRoom, SupportRoomAdmin)