79 lines
3.5 KiB
Python
79 lines
3.5 KiB
Python
from django.contrib import admin
|
|
from .models import DispatchResponseControl,GroupDispatch,SLAConfig,Ticket,TicketAccessGrant,TicketCategory,TicketEvent,TicketReadState,TicketTag
|
|
@admin.register(Ticket)
|
|
class TicketAdmin(admin.ModelAdmin):
|
|
list_display=("ticket_number","subject","owning_unit","delivery_type","status","priority","owner","last_activity_at")
|
|
list_filter=("owning_unit","assigned_unit","delivery_type","status","priority","category","tags")
|
|
search_fields=("ticket_number","subject","customer__mobile","customer__customer_profile__organization_name")
|
|
filter_horizontal=("tags",)
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
if obj and obj.group_dispatch_id and DispatchResponseControl.objects.filter(dispatch_id=obj.group_dispatch_id).exists():
|
|
return ("group_dispatch", "delivery_type", "customer", "created_by")
|
|
return super().get_readonly_fields(request, obj)
|
|
|
|
def get_queryset(self, request):
|
|
from .dispatch_responses import managed_ticket_q
|
|
return super().get_queryset(request).filter(managed_ticket_q(request.user)).distinct()
|
|
|
|
|
|
class DispatchTicketInline(admin.TabularInline):
|
|
model = Ticket
|
|
extra = 0
|
|
fields = ("ticket_number", "customer", "status", "last_activity_at")
|
|
readonly_fields = fields
|
|
can_delete = False
|
|
|
|
def has_add_permission(self, request, obj=None):
|
|
return False
|
|
|
|
|
|
@admin.register(GroupDispatch)
|
|
class GroupDispatchAdmin(admin.ModelAdmin):
|
|
list_display = ("subject", "unit", "contact_group", "status", "recipient_count", "dispatched_at")
|
|
list_filter = ("unit", "status", "contact_group")
|
|
search_fields = ("subject", "created_by__username")
|
|
readonly_fields = ("recipient_count", "dispatched_at")
|
|
inlines = (DispatchTicketInline,)
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
fields = super().get_readonly_fields(request, obj)
|
|
if obj and DispatchResponseControl.objects.filter(dispatch_id=obj.pk).exists():
|
|
return fields + ("unit", "operation_type", "created_by", "contact_group")
|
|
return fields
|
|
|
|
def get_queryset(self, request):
|
|
from .policies import DispatchPolicy
|
|
from django.db.models import Q
|
|
return super().get_queryset(request).filter(Q(response_control__isnull=True) | Q(pk__in=DispatchPolicy.visible_dispatches(request.user)))
|
|
|
|
|
|
@admin.register(DispatchResponseControl)
|
|
class DispatchResponseControlAdmin(admin.ModelAdmin):
|
|
list_display = ("dispatch", "mode", "notify_sms", "opened_at", "opened_by")
|
|
readonly_fields = tuple(field.name for field in DispatchResponseControl._meta.fields)
|
|
|
|
def get_queryset(self, request):
|
|
from .policies import DispatchPolicy
|
|
return super().get_queryset(request).filter(dispatch__in=DispatchPolicy.visible_dispatches(request.user))
|
|
|
|
def has_add_permission(self, request):
|
|
return False
|
|
|
|
def has_change_permission(self, request, obj=None):
|
|
return False
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
return False
|
|
|
|
|
|
@admin.register(TicketCategory)
|
|
class TicketCategoryAdmin(admin.ModelAdmin):
|
|
list_display=("title","unit","sort_order","show_in_customer_form","is_active")
|
|
list_filter=("unit","show_in_customer_form","is_active")
|
|
search_fields=("title","description","search_keywords","unit__name","unit__search_keywords")
|
|
list_editable=("is_active","show_in_customer_form","sort_order")
|
|
|
|
|
|
admin.site.register([SLAConfig,TicketAccessGrant,TicketEvent,TicketReadState,TicketTag])
|