From 47901e8555a796a0f89fe8959bebaab2c21e3d85 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Tue, 27 Jan 2015 19:15:25 +0000 Subject: [PATCH] Checkpoint: by-room view and basic leadership meetings support - Legacy-Id: 8930 --- ietf/meeting/helpers.py | 2 ++ ietf/meeting/models.py | 6 +++++- ietf/meeting/test_data.py | 12 ++++++++++++ ietf/meeting/tests_views.py | 9 ++++++++- ietf/meeting/urls.py | 1 + ietf/meeting/views.py | 15 +++++++++++++++ 6 files changed, 43 insertions(+), 2 deletions(-) diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py index 12e82b857..5e25d12b0 100644 --- a/ietf/meeting/helpers.py +++ b/ietf/meeting/helpers.py @@ -67,6 +67,8 @@ def build_all_agenda_slices(meeting): date_slices = {} for ts in meeting.timeslot_set.exclude(type__in=['reg','break']).order_by('time','name'): + #for ts in meeting.timeslot_set.exclude(type__in=['reg','break','other']).order_by('time','name'): + #for ts in meeting.timeslot_set.order_by('time','name'): ymd = ts.time.date() if ymd not in date_slices and ts.location != None: diff --git a/ietf/meeting/models.py b/ietf/meeting/models.py index 1f209676b..bdde2ebfd 100644 --- a/ietf/meeting/models.py +++ b/ietf/meeting/models.py @@ -322,7 +322,7 @@ class TimeSlot(models.Model): return u"%s: %s-%s %s, %s" % (self.meeting.number, self.time.strftime("%m-%d %H:%M"), (self.time + self.duration).strftime("%H:%M"), self.name, location) def end_time(self): return self.time + self.duration - def get_location(self): + def get_hidden_location(self): location = self.location if location: location = location.name @@ -330,6 +330,10 @@ class TimeSlot(models.Model): location = self.meeting.reg_area elif self.type_id == "break": location = self.meeting.break_area + return location + + def get_location(self): + location = self.get_hidden_location() if not self.show_location: location = "" return location diff --git a/ietf/meeting/test_data.py b/ietf/meeting/test_data.py index e7a877f76..c4eaa2fc1 100644 --- a/ietf/meeting/test_data.py +++ b/ietf/meeting/test_data.py @@ -20,6 +20,7 @@ def make_meeting_test_data(): pname = RoomResourceName.objects.create(name='projector',slug='proj') projector = ResourceAssociation.objects.create(name=pname,icon="notfound.png",desc="Basic projector") room = Room.objects.create(meeting=meeting, name="Test Room", capacity=123) + breakfast_room = Room.objects.create(meeting=meeting, name="Breakfast Room", capacity=40) room.resources = [projector] # mars WG @@ -41,6 +42,17 @@ def make_meeting_test_data(): scheduled=datetime.datetime.now()) ScheduledSession.objects.create(timeslot=slot, session=ames_session, schedule=schedule) + # IESG breakfast + breakfast_slot = TimeSlot.objects.create(meeting=meeting, type_id="lead", duration=90 * 60, + location=breakfast_room, + time=datetime.datetime.combine(datetime.date.today(),datetime.time(7,0))) + iesg_session = Session.objects.create(meeting=meeting, group=Group.objects.get(acronym="iesg"), + name="IESG Breakfast", + attendees=25, requested_by=system_person, + requested_duration=20, status_id="schedw", + scheduled=datetime.datetime.now()) + ScheduledSession.objects.create(timeslot=breakfast_slot, session=iesg_session, schedule=schedule) + meeting.agenda = schedule meeting.save() diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index 736c18ff4..afe82785e 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -11,7 +11,7 @@ from pyquery import PyQuery from ietf.doc.models import Document from ietf.meeting.models import Session, TimeSlot from ietf.meeting.test_data import make_meeting_test_data -from ietf.utils.test_utils import TestCase +from ietf.utils.test_utils import TestCase, login_testing_unauthorized class MeetingTests(TestCase): def setUp(self): @@ -98,6 +98,13 @@ class MeetingTests(TestCase): self.assertTrue(session.group.acronym in agenda_content) self.assertTrue(slot.location.name in agenda_content) + def test_agenda_by_room(self): + meeting = make_meeting_test_data() + url = urlreverse("ietf.meeting.views.agenda_by_room",kwargs=dict(num=meeting.number)) + login_testing_unauthorized(self,"secretary",url) + r = self.client.get(url,kwargs=dict(num=meeting.number)) + self.assertTrue(all([x in r.content for x in ['mars','IESG Breakfast','Test Room','Breakfast Room']])) + def test_materials(self): meeting = make_meeting_test_data() session = Session.objects.filter(meeting=meeting, group__acronym="mars").first() diff --git a/ietf/meeting/urls.py b/ietf/meeting/urls.py index f8cce53f7..56a35dd58 100644 --- a/ietf/meeting/urls.py +++ b/ietf/meeting/urls.py @@ -35,6 +35,7 @@ urlpatterns = patterns('', (r'^(?P\d+)/agenda(?P.txt)$', views.agenda), (r'^(?P\d+)/agenda.ics$', views.ical_agenda), (r'^(?P\d+)/agenda(?P.csv)$', views.agenda), + (r'^(?P\d+)/agenda/by-room$', views.agenda_by_room), (r'^(?P\d+)/agendas/edit$', views.edit_agendas), (r'^(?P\d+)/timeslots/edit$', views.edit_timeslots), (r'^(?P\d+)/rooms$', ajax.timeslot_roomsurl), diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 4ea3c54cc..79452846c 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -6,6 +6,7 @@ import re import tarfile import urllib from tempfile import mkstemp +from collections import OrderedDict import debug # pyflakes:ignore @@ -376,6 +377,20 @@ def agenda(request, num=None, name=None, base=None, ext=None): return HttpResponse(render_to_string("meeting/"+base+ext, {"schedule":schedule, "updated": updated}, RequestContext(request)), content_type=mimetype[ext]) +#TODO - let the IAB in +@role_required('Area Director','Secretariat') +@ensure_csrf_cookie +def agenda_by_room(request,num=None): + meeting = get_meeting(num) + schedule = get_schedule(meeting) + ss_by_day = OrderedDict() + for day in schedule.scheduledsession_set.dates('timeslot__time','day'): + ss_by_day[day]=[] + for ss in schedule.scheduledsession_set.order_by('timeslot__location','timeslot__time'): + day = ss.timeslot.time.date() + ss_by_day[day].append(ss) + return render(request,"meeting/agenda_by_room.html",{"meeting":meeting,"ss_by_day":ss_by_day}) + def read_agenda_file(num, doc): # XXXX FIXME: the path fragment in the code below should be moved to # settings.py. The *_PATH settings should be generalized to format()