|
8 | 8 |
|
9 | 9 | from ietf.meeting.models import (Meeting, Room, Session, TimeSlot, Constraint, Schedule, |
10 | 10 | SchedTimeSessAssignment, ResourceAssociation, FloorPlan, UrlResource, |
11 | | - SessionPresentation, ImportantDate, SlideSubmission, ) |
| 11 | + SessionPresentation, ImportantDate, SlideSubmission, SchedulingEvent) |
12 | 12 |
|
13 | 13 |
|
14 | 14 | class UrlResourceAdmin(admin.ModelAdmin): |
@@ -80,20 +80,51 @@ def name_lower(self, instance): |
80 | 80 |
|
81 | 81 | admin.site.register(Constraint, ConstraintAdmin) |
82 | 82 |
|
| 83 | +class SchedulingEventInline(admin.TabularInline): |
| 84 | + model = SchedulingEvent |
| 85 | + raw_id_fields = ["by"] |
| 86 | + |
83 | 87 | class SessionAdmin(admin.ModelAdmin): |
84 | | - list_display = ["meeting", "name", "group", "attendees", "requested", "status"] |
| 88 | + list_display = ["meeting", "name", "group", "attendees", "requested", "current_status"] |
85 | 89 | list_filter = ["meeting", ] |
86 | | - raw_id_fields = ["meeting", "group", "requested_by", "materials"] |
| 90 | + raw_id_fields = ["meeting", "group", "materials"] |
87 | 91 | search_fields = ["meeting__number", "name", "group__name", "group__acronym", ] |
88 | | - ordering = ["-requested"] |
89 | | - |
| 92 | + ordering = ["-id"] |
| 93 | + inlines = [SchedulingEventInline] |
| 94 | + |
| 95 | + |
| 96 | + def get_queryset(self, request): |
| 97 | + qs = super(SessionAdmin, self).get_queryset(request) |
| 98 | + return qs.prefetch_related('schedulingevent_set') |
| 99 | + |
| 100 | + def current_status(self, instance): |
| 101 | + events = sorted(instance.schedulingevent_set.all(), key=lambda e: (e.time, e.id)) |
| 102 | + if events: |
| 103 | + return events[-1].time |
| 104 | + else: |
| 105 | + return None |
| 106 | + |
| 107 | + def requested(self, instance): |
| 108 | + events = sorted(instance.schedulingevent_set.all(), key=lambda e: (e.time, e.id)) |
| 109 | + if events: |
| 110 | + return events[0].time |
| 111 | + else: |
| 112 | + return None |
| 113 | + |
90 | 114 | def name_lower(self, instance): |
91 | 115 | return instance.name.name.lower() |
92 | 116 |
|
93 | 117 | name_lower.short_description = "constraint name" # type: ignore # https://github.com/python/mypy/issues/2087 |
94 | 118 |
|
95 | 119 | admin.site.register(Session, SessionAdmin) |
96 | 120 |
|
| 121 | +class SchedulingEventAdmin(admin.ModelAdmin): |
| 122 | + list_display = ["session", "status", "time", "by"] |
| 123 | + raw_id_fields = ["session", "by"] |
| 124 | + ordering = ["-id"] |
| 125 | + |
| 126 | +admin.site.register(SchedulingEvent, SchedulingEventAdmin) |
| 127 | + |
97 | 128 | class ScheduleAdmin(admin.ModelAdmin): |
98 | 129 | list_display = ["name", "meeting", "owner", "visible", "public", "badness"] |
99 | 130 | list_filter = ["meeting", ] |
|
0 commit comments