mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-22 16:31:13 -05:00
Refactor code structure and remove redundant changes
This commit is contained in:
115
django-backend/apps/contact/admin.py
Normal file
115
django-backend/apps/contact/admin.py
Normal file
@@ -0,0 +1,115 @@
|
||||
"""
|
||||
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(
|
||||
'<span style="background-color: {}; color: white; padding: 3px 10px; '
|
||||
'border-radius: 3px; font-weight: bold;">{}</span>',
|
||||
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"
|
||||
Reference in New Issue
Block a user