236 lines
5.5 KiB
Python
236 lines
5.5 KiB
Python
"""
|
|
Appreciation admin - Django admin interface for appreciation models
|
|
"""
|
|
from django.contrib import admin
|
|
|
|
from apps.appreciation.models import (
|
|
Appreciation,
|
|
AppreciationBadge,
|
|
AppreciationCategory,
|
|
AppreciationStats,
|
|
UserBadge,
|
|
)
|
|
|
|
|
|
@admin.register(AppreciationCategory)
|
|
class AppreciationCategoryAdmin(admin.ModelAdmin):
|
|
"""Admin interface for AppreciationCategory"""
|
|
|
|
list_display = [
|
|
'name_en',
|
|
'code',
|
|
'hospital',
|
|
'order',
|
|
'is_active',
|
|
]
|
|
list_filter = ['hospital', 'is_active']
|
|
search_fields = ['name_en', 'name_ar', 'code']
|
|
list_editable = ['order', 'is_active']
|
|
ordering = ['hospital', 'order', 'name_en']
|
|
|
|
|
|
@admin.register(Appreciation)
|
|
class AppreciationAdmin(admin.ModelAdmin):
|
|
"""Admin interface for Appreciation"""
|
|
|
|
list_display = [
|
|
'recipient_name_display',
|
|
'sender_display',
|
|
'category',
|
|
'status',
|
|
'visibility',
|
|
'hospital',
|
|
'sent_at',
|
|
'created_at',
|
|
]
|
|
list_filter = [
|
|
'status',
|
|
'visibility',
|
|
'hospital',
|
|
'category',
|
|
'is_anonymous',
|
|
'sent_at',
|
|
]
|
|
search_fields = [
|
|
'message_en',
|
|
'message_ar',
|
|
'sender__first_name',
|
|
'sender__last_name',
|
|
'sender__email',
|
|
]
|
|
date_hierarchy = 'sent_at'
|
|
readonly_fields = [
|
|
'created_at',
|
|
'updated_at',
|
|
'sent_at',
|
|
'acknowledged_at',
|
|
'notification_sent_at',
|
|
]
|
|
|
|
fieldsets = (
|
|
('Basic Information', {
|
|
'fields': (
|
|
'sender',
|
|
'hospital',
|
|
'department',
|
|
'category',
|
|
)
|
|
}),
|
|
('Recipient', {
|
|
'fields': (
|
|
'recipient_content_type',
|
|
'recipient_object_id',
|
|
)
|
|
}),
|
|
('Content', {
|
|
'fields': (
|
|
'message_en',
|
|
'message_ar',
|
|
)
|
|
}),
|
|
('Settings', {
|
|
'fields': (
|
|
'visibility',
|
|
'is_anonymous',
|
|
)
|
|
}),
|
|
('Status', {
|
|
'fields': (
|
|
'status',
|
|
'sent_at',
|
|
'acknowledged_at',
|
|
'notification_sent',
|
|
'notification_sent_at',
|
|
)
|
|
}),
|
|
('Metadata', {
|
|
'fields': (
|
|
'metadata',
|
|
)
|
|
}),
|
|
('Timestamps', {
|
|
'fields': (
|
|
'created_at',
|
|
'updated_at',
|
|
),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
|
|
def recipient_name_display(self, obj):
|
|
"""Display recipient name in list"""
|
|
try:
|
|
return str(obj.recipient)
|
|
except:
|
|
return "Unknown"
|
|
recipient_name_display.short_description = 'Recipient'
|
|
|
|
def sender_display(self, obj):
|
|
"""Display sender name in list"""
|
|
if obj.is_anonymous:
|
|
return "Anonymous"
|
|
if obj.sender:
|
|
return obj.sender.get_full_name()
|
|
return "System"
|
|
sender_display.short_description = 'Sender'
|
|
|
|
|
|
@admin.register(AppreciationBadge)
|
|
class AppreciationBadgeAdmin(admin.ModelAdmin):
|
|
"""Admin interface for AppreciationBadge"""
|
|
|
|
list_display = [
|
|
'name_en',
|
|
'code',
|
|
'criteria_type',
|
|
'criteria_value',
|
|
'hospital',
|
|
'order',
|
|
'is_active',
|
|
]
|
|
list_filter = [
|
|
'hospital',
|
|
'criteria_type',
|
|
'is_active',
|
|
]
|
|
search_fields = [
|
|
'name_en',
|
|
'name_ar',
|
|
'code',
|
|
'description_en',
|
|
]
|
|
list_editable = ['order', 'is_active']
|
|
ordering = ['hospital', 'order', 'name_en']
|
|
|
|
|
|
@admin.register(UserBadge)
|
|
class UserBadgeAdmin(admin.ModelAdmin):
|
|
"""Admin interface for UserBadge"""
|
|
|
|
list_display = [
|
|
'recipient_name_display',
|
|
'badge',
|
|
'earned_at',
|
|
'appreciation_count',
|
|
]
|
|
list_filter = [
|
|
'badge',
|
|
'earned_at',
|
|
]
|
|
search_fields = [
|
|
'badge__name_en',
|
|
'badge__name_ar',
|
|
]
|
|
date_hierarchy = 'earned_at'
|
|
readonly_fields = ['earned_at', 'created_at', 'updated_at']
|
|
|
|
def recipient_name_display(self, obj):
|
|
"""Display recipient name in list"""
|
|
try:
|
|
return str(obj.recipient)
|
|
except:
|
|
return "Unknown"
|
|
recipient_name_display.short_description = 'Recipient'
|
|
|
|
|
|
@admin.register(AppreciationStats)
|
|
class AppreciationStatsAdmin(admin.ModelAdmin):
|
|
"""Admin interface for AppreciationStats"""
|
|
|
|
list_display = [
|
|
'recipient_name_display',
|
|
'period_display',
|
|
'hospital',
|
|
'department',
|
|
'received_count',
|
|
'sent_count',
|
|
'acknowledged_count',
|
|
'hospital_rank',
|
|
'department_rank',
|
|
]
|
|
list_filter = [
|
|
'hospital',
|
|
'department',
|
|
'year',
|
|
'month',
|
|
]
|
|
search_fields = []
|
|
date_hierarchy = None
|
|
readonly_fields = [
|
|
'created_at',
|
|
'updated_at',
|
|
]
|
|
|
|
def recipient_name_display(self, obj):
|
|
"""Display recipient name in list"""
|
|
try:
|
|
return str(obj.recipient)
|
|
except:
|
|
return "Unknown"
|
|
recipient_name_display.short_description = 'Recipient'
|
|
|
|
def period_display(self, obj):
|
|
"""Display period in list"""
|
|
return f"{obj.year}-{obj.month:02d}"
|
|
period_display.short_description = 'Period'
|