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)