HH/apps/projects/admin.py
2025-12-24 12:42:31 +03:00

95 lines
2.8 KiB
Python

"""
Projects admin
"""
from django.contrib import admin
from .models import QIProject, QIProjectTask
class QIProjectTaskInline(admin.TabularInline):
"""Inline admin for QI project tasks"""
model = QIProjectTask
extra = 1
fields = ['order', 'title', 'assigned_to', 'status', 'due_date']
ordering = ['order']
@admin.register(QIProject)
class QIProjectAdmin(admin.ModelAdmin):
"""QI Project admin"""
list_display = [
'name', 'hospital', 'department', 'project_lead',
'status', 'start_date', 'target_completion_date'
]
list_filter = ['status', 'hospital', 'department', 'start_date']
search_fields = ['name', 'name_ar', 'description']
ordering = ['-created_at']
inlines = [QIProjectTaskInline]
filter_horizontal = ['team_members', 'related_actions']
fieldsets = (
(None, {
'fields': ('name', 'name_ar', 'description')
}),
('Organization', {
'fields': ('hospital', 'department')
}),
('Team', {
'fields': ('project_lead', 'team_members')
}),
('Status & Dates', {
'fields': ('status', 'start_date', 'target_completion_date', 'actual_completion_date')
}),
('Related Actions', {
'fields': ('related_actions',),
'classes': ('collapse',)
}),
('Outcomes', {
'fields': ('outcome_description', 'success_metrics'),
'classes': ('collapse',)
}),
('Metadata', {
'fields': ('metadata', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
readonly_fields = ['created_at', 'updated_at']
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.select_related('hospital', 'department', 'project_lead')
@admin.register(QIProjectTask)
class QIProjectTaskAdmin(admin.ModelAdmin):
"""QI Project task admin"""
list_display = [
'project', 'title', 'assigned_to', 'status',
'due_date', 'completed_date'
]
list_filter = ['status', 'project', 'due_date']
search_fields = ['title', 'description', 'project__name']
ordering = ['project', 'order']
fieldsets = (
(None, {
'fields': ('project', 'title', 'description', 'order')
}),
('Assignment', {
'fields': ('assigned_to',)
}),
('Status & Dates', {
'fields': ('status', 'due_date', 'completed_date')
}),
('Metadata', {
'fields': ('created_at', 'updated_at')
}),
)
readonly_fields = ['created_at', 'updated_at']
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.select_related('project', 'assigned_to')