Add display of new constraints and joint sessions to agenda builder interface.

The new timerange, time_relation and wg_adjacent constraints, along with the
joint_with_groups option, are now reflected in the special requests field.
This allows them to be taken into account while scheduling sessions.
 - Legacy-Id: 17378
This commit is contained in:
Sasha Romijn 2020-03-03 15:16:58 +00:00
parent e70579175e
commit 4decb23022
3 changed files with 53 additions and 9 deletions

View file

@ -867,6 +867,13 @@ class Constraint(models.Model):
if self.target is not None:
ct1['target_href'] = urljoin(host_scheme, self.target.json_url())
ct1['meeting_href'] = urljoin(host_scheme, self.meeting.json_url())
if self.time_relation:
ct1['time_relation'] = self.time_relation
ct1['time_relation_display'] = self.get_time_relation_display()
if self.timeranges.count():
ct1['timeranges_cant_meet'] = [t.slug for t in self.timeranges.all()]
timeranges_str = ", ".join([t.desc for t in self.timeranges.all()])
ct1['timeranges_display'] = "Can't meet %s" % timeranges_str
return ct1
@ -1122,6 +1129,7 @@ class Session(models.Model):
sess1['bof'] = str(self.group.is_bof())
sess1['agenda_note'] = self.agenda_note
sess1['attendees'] = str(self.attendees)
sess1['joint_with_groups'] = self.joint_with_groups_acronyms()
# fish out scheduling information - eventually, we should pick
# this out in the caller instead

View file

@ -1,4 +1,4 @@
# Copyright The IETF Trust 2013-2019, All Rights Reserved
# Copyright The IETF Trust 2013-2020, All Rights Reserved
# -*- coding: utf-8 -*-
@ -12,6 +12,7 @@ from django.urls import reverse as urlreverse
import debug # pyflakes:ignore
from ietf.name.models import TimerangeName
from ietf.group.models import Group
from ietf.meeting.models import Schedule, TimeSlot, Session, SchedTimeSessAssignment, Meeting, Constraint
from ietf.meeting.test_data import make_meeting_test_data
@ -119,10 +120,23 @@ class ApiTests(TestCase):
person=Person.objects.get(user__username="ad"),
name_id="bethere")
c_adjacent = Constraint.objects.create(meeting=meeting, source=session.group,
target=Group.objects.get(acronym="irg"),
name_id="wg_adjacent")
c_time_relation = Constraint.objects.create(meeting=meeting, source=session.group,
time_relation='subsequent-days',
name_id="time_relation")
c_timerange = Constraint.objects.create(meeting=meeting, source=session.group,
name_id="timerange")
c_timerange.timeranges.set(TimerangeName.objects.filter(slug__startswith='monday'))
r = self.client.get(urlreverse("ietf.meeting.ajax.session_constraints", kwargs=dict(num=meeting.number, sessionid=session.pk)))
self.assertEqual(r.status_code, 200)
constraints = r.json()
self.assertEqual(set([c_ames.pk, c_person.pk]), set(c["constraint_id"] for c in constraints))
expected_keys = set([c_ames.pk, c_person.pk, c_adjacent.pk, c_time_relation.pk, c_timerange.pk])
self.assertEqual(expected_keys, set(c["constraint_id"] for c in constraints))
def test_meeting_json(self):
meeting = make_meeting_test_data()

View file

@ -1225,12 +1225,30 @@ Session.prototype.generate_info_table = function() {
if(!read_only) {
$("#info_location").html(generate_select_box()+"<button id='info_location_set'>set</button>");
}
if("comments" in this && this.comments.length > 0 && this.comments != "None") {
$("#special_requests").text(this.comments);
} else {
$("#special_requests").text("Special requests: None");
var special_requests_text = '';
if(this.joint_with_groups) {
special_requests_text += 'Joint session with ' + this.joint_with_groups.join(', ') + '. ';
}
if(this.constraints.wg_adjacent) {
for (var target_href in this.constraints.wg_adjacent) {
if (this.constraints.wg_adjacent.hasOwnProperty(target_href)) {
special_requests_text += 'Schedule adjacent with ' + this.constraints.wg_adjacent[target_href].othergroup.acronym + '. ';
}
}
}
if(this.constraints.time_relation) {
special_requests_text += this.constraints.time_relation.time_relation.time_relation_display + '. ';
}
if(this.constraints.timerange) {
special_requests_text += this.constraints.timerange.timerange.timeranges_display + '. ';
}
if("comments" in this && this.comments.length > 0 && this.comments != "None") {
special_requests_text += this.comments;
} else {
special_requests_text += "Special requests: None";
}
$("#special_requests").text(special_requests_text);
this.selectit();
@ -1721,13 +1739,17 @@ Session.prototype.add_constraint_obj = function(obj) {
obj.person = person;
});
} else {
// must be conflic*
// must be conflic*, timerange, time_relation or wg_adjacent
var ogroupname;
if(obj.source_href == this.group_href) {
obj.thisgroup = this.group;
obj.othergroup = find_group_by_href(obj.target_href, "constraint src"+obj.href);
obj.direction = 'ours';
ogroupname = obj.target_href;
if (obj.target_href) {
ogroupname = obj.target_href;
} else {
ogroupname = obj.name;
}
if(this.constraints[listname][ogroupname]) {
console.log("Found multiple instances of",this.group_href,listname,ogroupname);
}