""" Django admin interface for Contact submissions. """ from django.contrib import admin from django.utils.html import format_html from django.utils import timezone from .models import ContactSubmission @admin.register(ContactSubmission) class ContactSubmissionAdmin(admin.ModelAdmin): """Admin interface for managing contact submissions.""" list_display = [ 'ticket_number', 'name', 'email', 'category', 'status_badge', 'assigned_to', 'created_at', ] list_filter = [ 'status', 'category', 'created_at', 'assigned_to', ] search_fields = [ 'ticket_number', 'name', 'email', 'subject', 'message', ] readonly_fields = [ 'id', 'ticket_number', 'user', 'created_at', 'updated_at', 'resolved_at', ] fieldsets = ( ('Contact Information', { 'fields': ('ticket_number', 'name', 'email', 'user', 'category') }), ('Message', { 'fields': ('subject', 'message') }), ('Status & Assignment', { 'fields': ('status', 'assigned_to', 'admin_notes') }), ('Resolution', { 'fields': ('resolved_at', 'resolved_by'), 'classes': ('collapse',) }), ('Metadata', { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) def status_badge(self, obj): """Display status with colored badge.""" colors = { 'pending': '#ff9800', 'in_progress': '#2196f3', 'resolved': '#4caf50', 'archived': '#9e9e9e', } color = colors.get(obj.status, '#9e9e9e') return format_html( '{}', color, obj.get_status_display() ) status_badge.short_description = 'Status' def save_model(self, request, obj, form, change): """Auto-set resolved_by when status changes to resolved.""" if change and 'status' in form.changed_data: if obj.status == 'resolved' and not obj.resolved_by: obj.resolved_by = request.user obj.resolved_at = timezone.now() super().save_model(request, obj, form, change) actions = ['mark_as_in_progress', 'mark_as_resolved', 'assign_to_me'] def mark_as_in_progress(self, request, queryset): """Mark selected submissions as in progress.""" updated = queryset.update(status='in_progress') self.message_user(request, f'{updated} submission(s) marked as in progress.') mark_as_in_progress.short_description = "Mark as In Progress" def mark_as_resolved(self, request, queryset): """Mark selected submissions as resolved.""" updated = queryset.filter(status__in=['pending', 'in_progress']).update( status='resolved', resolved_at=timezone.now(), resolved_by=request.user ) self.message_user(request, f'{updated} submission(s) marked as resolved.') mark_as_resolved.short_description = "Mark as Resolved" def assign_to_me(self, request, queryset): """Assign selected submissions to current user.""" updated = queryset.update(assigned_to=request.user) self.message_user(request, f'{updated} submission(s) assigned to you.') assign_to_me.short_description = "Assign to Me"