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