2025-03-22 15:29:19 -10:00

162 lines
4.2 KiB
Python

from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from helpdesk import settings as helpdesk_settings
from helpdesk.models import (
Checklist,
ChecklistTask,
ChecklistTemplate,
CustomField,
EmailTemplate,
EscalationExclusion,
FollowUp,
FollowUpAttachment,
IgnoreEmail,
KBIAttachment,
PreSetReply,
Queue,
Ticket,
TicketChange,
)
if helpdesk_settings.HELPDESK_KB_ENABLED:
from helpdesk.models import KBCategory, KBItem
@admin.register(Queue)
class QueueAdmin(admin.ModelAdmin):
list_display = ("title", "slug", "email_address", "locale", "time_spent")
prepopulated_fields = {"slug": ("title",)}
def time_spent(self, q):
if q.dedicated_time:
return "{} / {}".format(q.time_spent, q.dedicated_time)
elif q.time_spent:
return q.time_spent
else:
return "-"
def delete_queryset(self, request, queryset):
for queue in queryset:
queue.delete()
@admin.register(Ticket)
class TicketAdmin(admin.ModelAdmin):
list_display = (
"title",
"status",
"assigned_to",
"queue",
"hidden_submitter_email",
"time_spent",
)
date_hierarchy = "created"
list_filter = ("queue", "assigned_to", "status")
search_fields = ("id", "title")
def hidden_submitter_email(self, ticket):
if ticket.submitter_email:
username, domain = ticket.submitter_email.split("@")
username = username[:2] + "*" * (len(username) - 2)
domain = domain[:1] + "*" * (len(domain) - 2) + domain[-1:]
return "%s@%s" % (username, domain)
else:
return ticket.submitter_email
hidden_submitter_email.short_description = _("Submitter E-Mail")
def time_spent(self, ticket):
return ticket.time_spent
class TicketChangeInline(admin.StackedInline):
model = TicketChange
extra = 0
class FollowUpAttachmentInline(admin.StackedInline):
model = FollowUpAttachment
extra = 0
class KBIAttachmentInline(admin.StackedInline):
model = KBIAttachment
extra = 0
@admin.register(FollowUp)
class FollowUpAdmin(admin.ModelAdmin):
inlines = [TicketChangeInline, FollowUpAttachmentInline]
list_display = (
"ticket_get_ticket_for_url",
"title",
"date",
"ticket",
"user",
"new_status",
"time_spent",
)
list_filter = ("user", "date", "new_status")
def ticket_get_ticket_for_url(self, obj):
return obj.ticket.ticket_for_url
ticket_get_ticket_for_url.short_description = _("Slug")
if helpdesk_settings.HELPDESK_KB_ENABLED:
@admin.register(KBItem)
class KBItemAdmin(admin.ModelAdmin):
list_display = ("category", "title", "last_updated", "team", "order", "enabled")
inlines = [KBIAttachmentInline]
readonly_fields = ("voted_by", "downvoted_by")
list_display_links = ("title",)
if helpdesk_settings.HELPDESK_KB_ENABLED:
@admin.register(KBCategory)
class KBCategoryAdmin(admin.ModelAdmin):
list_display = ("name", "title", "slug", "public")
@admin.register(CustomField)
class CustomFieldAdmin(admin.ModelAdmin):
list_display = ("name", "label", "data_type")
@admin.register(EmailTemplate)
class EmailTemplateAdmin(admin.ModelAdmin):
list_display = ("template_name", "heading", "locale")
list_filter = ("locale",)
@admin.register(IgnoreEmail)
class IgnoreEmailAdmin(admin.ModelAdmin):
list_display = ("name", "queue_list", "email_address", "keep_in_mailbox")
@admin.register(ChecklistTemplate)
class ChecklistTemplateAdmin(admin.ModelAdmin):
list_display = ("name", "task_list")
search_fields = ("name", "task_list")
class ChecklistTaskInline(admin.TabularInline):
model = ChecklistTask
@admin.register(Checklist)
class ChecklistAdmin(admin.ModelAdmin):
list_display = ("name", "ticket")
search_fields = ("name", "ticket__id", "ticket__title")
autocomplete_fields = ("ticket",)
list_select_related = ("ticket",)
inlines = (ChecklistTaskInline,)
admin.site.register(PreSetReply)
admin.site.register(EscalationExclusion)