Skip to content

Commit 06fe583

Browse files
committed
Merged /branch/iola/meeting-improvement-r16992@17152 from olau@iola.dk:
* Renamed Meeting.agenda to Meeting.schedule together with a bunch of related internal things * Moved Session.status, .requested, and .requested_by to a new SchedulingEvent. * Turned sessions into regular sessions and non-sessions into misc. sessions in the UI and code to avoid ambiguity. This doesn't change the data in the DB except for uses of TimeSlotTypeName where 'session' is now 'regular'. - Legacy-Id: 17153
2 parents 8c94e41 + db232ff commit 06fe583

77 files changed

Lines changed: 1650 additions & 1101 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ietf/api/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def get(self, request):
6969
person = get_object_or_404(self.model, user=request.user)
7070
expand = ['searchrule', 'documentauthor', 'ad_document_set', 'ad_dochistory_set', 'docevent',
7171
'ballotpositiondocevent', 'deletedevent', 'email_set', 'groupevent', 'role', 'rolehistory', 'iprdisclosurebase',
72-
'iprevent', 'liaisonstatementevent', 'whitelisted', 'schedule', 'constraint', 'session', 'message',
72+
'iprevent', 'liaisonstatementevent', 'whitelisted', 'schedule', 'constraint', 'schedulingevent', 'message',
7373
'sendqueue', 'nominee', 'topicfeedbacklastseen', 'alias', 'email', 'apikeys', 'personevent',
7474
'reviewersettings', 'reviewsecretarysettings', 'unavailableperiod', 'reviewwish',
7575
'nextreviewerinteam', 'reviewrequest', 'meetingregistration', 'submissionevent', 'preapproval',

ietf/doc/tests.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
from ietf.group.models import Group
4040
from ietf.group.factories import GroupFactory, RoleFactory
4141
from ietf.ipr.factories import HolderIprDisclosureFactory
42-
from ietf.meeting.models import Meeting, Session, SessionPresentation
42+
from ietf.meeting.models import Meeting, Session, SessionPresentation, SchedulingEvent
4343
from ietf.meeting.factories import MeetingFactory, SessionFactory
4444
from ietf.name.models import SessionStatusName, BallotPositionName
4545
from ietf.person.models import Person
@@ -712,11 +712,14 @@ def test_document_material(self):
712712
name = "session-72-mars-1",
713713
meeting = Meeting.objects.get(number='72'),
714714
group = Group.objects.get(acronym='mars'),
715-
status = SessionStatusName.objects.create(slug='scheduled', name='Scheduled'),
716715
modified = datetime.datetime.now(),
717-
requested_by = Person.objects.get(user__username="marschairman"),
718-
type_id = "session",
719-
)
716+
type_id = 'regular',
717+
)
718+
SchedulingEvent.objects.create(
719+
session=session,
720+
status=SessionStatusName.objects.create(slug='scheduled'),
721+
by = Person.objects.get(user__username="marschairman"),
722+
)
720723
SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)
721724

722725
r = self.client.get(urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=doc.name)))

ietf/doc/tests_material.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from ietf.group.factories import RoleFactory
2121
from ietf.group.models import Group
2222
from ietf.meeting.factories import MeetingFactory
23-
from ietf.meeting.models import Meeting, Session, SessionPresentation
23+
from ietf.meeting.models import Meeting, Session, SessionPresentation, SchedulingEvent
2424
from ietf.name.models import SessionStatusName
2525
from ietf.person.models import Person
2626
from ietf.utils.test_utils import TestCase, login_testing_unauthorized
@@ -158,11 +158,14 @@ def test_revise(self):
158158
name = "session-42-mars-1",
159159
meeting = Meeting.objects.get(number='42'),
160160
group = Group.objects.get(acronym='mars'),
161-
status = SessionStatusName.objects.create(slug='scheduled', name='Scheduled'),
162161
modified = datetime.datetime.now(),
163-
requested_by = Person.objects.get(user__username="marschairman"),
164-
type_id="session",
165-
)
162+
type_id='regular',
163+
)
164+
SchedulingEvent.objects.create(
165+
session=session,
166+
status=SessionStatusName.objects.create(slug='scheduled'),
167+
by = Person.objects.get(user__username="marschairman"),
168+
)
166169
SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)
167170

168171
url = urlreverse('ietf.doc.views_material.edit_material', kwargs=dict(name=doc.name, action="revise"))

ietf/doc/views_doc.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
from ietf.doc.mails import email_comment
7575
from ietf.mailtrigger.utils import gather_relevant_expansions
7676
from ietf.meeting.models import Session
77-
from ietf.meeting.utils import group_sessions, get_upcoming_manageable_sessions, sort_sessions
77+
from ietf.meeting.utils import group_sessions, get_upcoming_manageable_sessions, sort_sessions, add_event_info_to_session_qs
7878
from ietf.review.models import ReviewAssignment
7979
from ietf.review.utils import can_request_review_of_doc, review_assignments_to_list_for_docs
8080
from ietf.review.utils import no_review_from_teams_on_doc
@@ -1353,9 +1353,9 @@ def add_sessionpresentation(request,name):
13531353
def all_presentations(request, name):
13541354
doc = get_object_or_404(Document, name=name)
13551355

1356-
1357-
sessions = doc.session_set.filter(status__in=['sched','schedw','appr','canceled'],
1358-
type__in=['session','plenary','other'])
1356+
sessions = add_event_info_to_session_qs(
1357+
doc.session_set.filter(type__in=['regular','plenary','other'])
1358+
).filter(current_status__in=['sched','schedw','appr','canceled'])
13591359

13601360
future, in_progress, recent, past = group_sessions(sessions)
13611361

ietf/group/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def interim_approval_roles(self):
7070
return list(set([ role for role in self.parent.role_set.filter(name__in=['ad', 'chair']) ]))
7171

7272
def is_bof(self):
73-
return (self.state.slug in ["bof", "bof-conc"])
73+
return self.state_id in ["bof", "bof-conc"]
7474

7575
class Meta:
7676
abstract = True

ietf/group/views.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
from ietf.ietfauth.utils import has_role, is_authorized_in_group
8989
from ietf.mailtrigger.utils import gather_relevant_expansions
9090
from ietf.meeting.helpers import get_meeting
91-
from ietf.meeting.utils import group_sessions
91+
from ietf.meeting.utils import group_sessions, add_event_info_to_session_qs
9292
from ietf.name.models import GroupTypeName, StreamName
9393
from ietf.person.models import Email
9494
from ietf.review.models import (ReviewRequest, ReviewAssignment, ReviewerSettings,
@@ -750,9 +750,14 @@ def meetings(request, acronym=None, group_type=None):
750750

751751
four_years_ago = datetime.datetime.now()-datetime.timedelta(days=4*365)
752752

753-
sessions = group.session_set.filter(status__in=['sched','schedw','appr','canceled'],
754-
meeting__date__gt=four_years_ago,
755-
type__in=['session','plenary','other'])
753+
sessions = add_event_info_to_session_qs(
754+
group.session_set.filter(
755+
meeting__date__gt=four_years_ago,
756+
type__in=['regular','plenary','other']
757+
)
758+
).filter(
759+
current_status__in=['sched','schedw','appr','canceled'],
760+
)
756761

757762
future, in_progress, recent, past = group_sessions(sessions)
758763

ietf/mailtrigger/models.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,10 @@ def gather_session_requester(self, **kwargs):
356356
addrs=[]
357357
if 'session' in kwargs:
358358
session = kwargs['session']
359-
addrs.append(session.requested_by.role_email('chair').address)
359+
from ietf.meeting.models import SchedulingEvent
360+
first_event = SchedulingEvent.objects.filter(session=session).select_related('by').order_by('time', 'id').first()
361+
if first_event and first_event.status_id in ['appw', 'schedw']:
362+
addrs.append(first_event.by.role_email('chair').address)
360363
return addrs
361364

362365
def gather_review_team_ads(self, **kwargs):

ietf/meeting/admin.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from ietf.meeting.models import (Meeting, Room, Session, TimeSlot, Constraint, Schedule,
1010
SchedTimeSessAssignment, ResourceAssociation, FloorPlan, UrlResource,
11-
SessionPresentation, ImportantDate, SlideSubmission, )
11+
SessionPresentation, ImportantDate, SlideSubmission, SchedulingEvent)
1212

1313

1414
class UrlResourceAdmin(admin.ModelAdmin):
@@ -80,20 +80,51 @@ def name_lower(self, instance):
8080

8181
admin.site.register(Constraint, ConstraintAdmin)
8282

83+
class SchedulingEventInline(admin.TabularInline):
84+
model = SchedulingEvent
85+
raw_id_fields = ["by"]
86+
8387
class SessionAdmin(admin.ModelAdmin):
84-
list_display = ["meeting", "name", "group", "attendees", "requested", "status"]
88+
list_display = ["meeting", "name", "group", "attendees", "requested", "current_status"]
8589
list_filter = ["meeting", ]
86-
raw_id_fields = ["meeting", "group", "requested_by", "materials"]
90+
raw_id_fields = ["meeting", "group", "materials"]
8791
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+
90114
def name_lower(self, instance):
91115
return instance.name.name.lower()
92116

93117
name_lower.short_description = "constraint name" # type: ignore # https://github.com/python/mypy/issues/2087
94118

95119
admin.site.register(Session, SessionAdmin)
96120

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+
97128
class ScheduleAdmin(admin.ModelAdmin):
98129
list_display = ["name", "meeting", "owner", "visible", "public", "badness"]
99130
list_filter = ["meeting", ]

0 commit comments

Comments
 (0)