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
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)
|