You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.7 KiB
51 lines
1.7 KiB
from django.contrib import admin
|
|
from unfold.admin import ModelAdmin
|
|
from unfold.decorators import display
|
|
from apps.meetings.models import MeetingRequest, MeetingStatus
|
|
|
|
|
|
@admin.register(MeetingRequest)
|
|
class MeetingRequestAdmin(ModelAdmin):
|
|
list_display = (
|
|
'title',
|
|
'requester_institution',
|
|
'recipient_institution',
|
|
'meeting_date',
|
|
'meeting_time',
|
|
'duration_minutes',
|
|
'display_status',
|
|
'created_by',
|
|
'created_at',
|
|
)
|
|
list_filter = ('status', 'meeting_date', 'requester_institution', 'recipient_institution')
|
|
search_fields = (
|
|
'title',
|
|
'agenda',
|
|
'requester_institution__name',
|
|
'recipient_institution__name',
|
|
'created_by__email',
|
|
)
|
|
actions = ['mark_as_scheduled', 'mark_as_completed', 'mark_as_cancelled']
|
|
|
|
@display(description="Status", label=True)
|
|
def display_status(self, obj):
|
|
color_map = {
|
|
MeetingStatus.PENDING: "amber",
|
|
MeetingStatus.SCHEDULED: "blue",
|
|
MeetingStatus.COMPLETED: "green",
|
|
MeetingStatus.CANCELLED: "gray",
|
|
MeetingStatus.DECLINED: "red",
|
|
}
|
|
return obj.get_status_display(), color_map.get(obj.status, "gray")
|
|
|
|
@admin.action(description="Mark selected meetings as Scheduled")
|
|
def mark_as_scheduled(self, request, queryset):
|
|
queryset.update(status=MeetingStatus.SCHEDULED)
|
|
|
|
@admin.action(description="Mark selected meetings as Completed")
|
|
def mark_as_completed(self, request, queryset):
|
|
queryset.update(status=MeetingStatus.COMPLETED)
|
|
|
|
@admin.action(description="Mark selected meetings as Cancelled")
|
|
def mark_as_cancelled(self, request, queryset):
|
|
queryset.update(status=MeetingStatus.CANCELLED)
|