We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 1e30120 commit 72b85fcCopy full SHA for 72b85fc
7 files changed
ietf/meeting/migrations/0005_auto_20150318_1116.py
@@ -67,7 +67,7 @@ def backfill_91_other_meetings(apps, schema_editor):
67
( 9, 17, 0, 120, 'offagenda', [secr], sea_pearl_12, 'Reception', "Companion's Reception"), # Should this appear on agenda?
68
( 9, 19, 0, 180, 'offagenda', [isocfell], rainbow_23, 'Dinner', 'ISOC Fellows Reception/Dinner'),
69
( 9, 19, 0, 180, 'offagenda', [secr], lehua_suite, 'Meeting', 'Huawei'),
70
- ( 9, 21, 0, 180, 'lead', [secr], sea_pearl_12, 'Gathering', 'AMS/IESG/IABIAOC Gathering'),
+ ( 9, 21, 0, 180, 'lead', [secr], sea_pearl_12, 'Gathering', 'AMS/IESG/IAB/IAOC Gathering'),
71
( 10, 0, 0, 1440, 'offagenda', [secr], south_pacific_1, 'Terminal Room', 'Terminal Room Open to Attendees'),
72
( 10, 7, 0, 120, 'lead', [iesg,iab], south_pacific_2, 'Breakfast', 'IESG/IAB Breakfast'),
73
( 10, 7, 0, 120, 'lead', [nomcom], iolani_67, 'Breakfast', 'Nomcom Breakfast'),
ietf/meeting/migrations/0006_auto_20150429_1224.py
@@ -0,0 +1,31 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
6
+def extract_session_type_values(apps, schema_editor):
7
8
+ Session = apps.get_model('meeting', 'Session')
9
10
+ for s in Session.objects.all():
11
+ t = s.scheduledsession_set.filter(schedule=models.F('schedule__meeting__agenda')).first()
12
+ if t and t.timeslot.type.slug != 'session':
13
+ s.type = t.timeslot.type
14
+ s.save()
15
16
+class Migration(migrations.Migration):
17
18
+ dependencies = [
19
+ ('name', '0004_auto_20150318_1140'),
20
+ ('meeting', '0005_auto_20150318_1116'),
21
+ ]
22
23
+ operations = [
24
+ migrations.AddField(
25
+ model_name='session',
26
+ name='type',
27
+ field=models.ForeignKey(default='session', to='name.TimeSlotTypeName'),
28
+ preserve_default=False,
29
+ ),
30
+ migrations.RunPython(extract_session_type_values),
31
ietf/meeting/migrations/0007_auto_20150429_1346.py
@@ -0,0 +1,30 @@
+def extract_room_session_type_values(apps, schema_editor):
+ Room = apps.get_model('meeting', 'Room')
+ for r in Room.objects.all():
+ for ts in r.timeslot_set.all():
+ if ts.scheduledsession_set.filter(schedule=models.F('schedule__meeting__agenda')):
+ r.session_types.add(ts.type)
+ ('meeting', '0006_auto_20150429_1224'),
+ model_name='room',
+ name='session_types',
+ field=models.ManyToManyField(to='name.TimeSlotTypeName', blank=True),
+ preserve_default=True,
+ migrations.RunPython(extract_room_session_type_values),
ietf/meeting/urls.py
@@ -34,6 +34,9 @@
34
(r'^(?P<num>\d+)/agenda.ics$', views.ical_agenda),
35
(r'^(?P<num>\d+)/agenda(?P<ext>.csv)$', views.agenda),
36
(r'^(?P<num>\d+)/agenda/by-room$', views.agenda_by_room),
37
+ (r'^(?P<num>\d+)/agenda/by-type$', views.agenda_by_type),
38
+ (r'^(?P<num>\d+)/agenda/by-type/(?P<type>[a-z]+)$', views.agenda_by_type),
39
+ (r'^(?P<num>\d+)/agenda/by-type/(?P<type>[a-z]+)/ics$', views.agenda_by_type_ics),
40
(r'^(?P<num>\d+)/agendas/edit$', views.edit_agendas),
41
(r'^(?P<num>\d+)/timeslots/edit$', views.edit_timeslots),
42
(r'^(?P<num>\d+)/rooms$', ajax.timeslot_roomsurl),
ietf/meeting/views.py
@@ -388,7 +388,6 @@ def agenda(request, num=None, name=None, base=None, ext=None):
388
389
#TODO - let the IAB in
390
@role_required('Area Director','Secretariat')
391
-@ensure_csrf_cookie
392
def agenda_by_room(request,num=None):
393
meeting = get_meeting(num)
394
schedule = get_schedule(meeting)
@@ -400,6 +399,25 @@ def agenda_by_room(request,num=None):
400
399
ss_by_day[day].append(ss)
401
return render(request,"meeting/agenda_by_room.html",{"meeting":meeting,"ss_by_day":ss_by_day})
402
+@role_required('Area Director','Secretariat')
403
+def agenda_by_type(request,num=None,type=None):
404
+ meeting = get_meeting(num)
405
+ schedule = get_schedule(meeting)
406
+ scheduledsessions = schedule.scheduledsession_set.order_by('session__type__slug','timeslot__time')
407
+ if type:
408
+ scheduledsessions = scheduledsessions.filter(session__type__slug=type)
409
+ return render(request,"meeting/agenda_by_type.html",{"meeting":meeting,"scheduledsessions":scheduledsessions})
410
411
412
+def agenda_by_type_ics(request,num=None,type=None):
413
414
415
416
417
418
+ updated = meeting_updated(meeting)
419
+ return render(request,"meeting/agenda.ics",{"schedule":schedule,"updated":updated,"assignments":scheduledsessions},content_type="text/calendar")
420
421
def read_agenda_file(num, doc):
422
# XXXX FIXME: the path fragment in the code below should be moved to
423
# settings.py. The *_PATH settings should be generalized to format()
ietf/secr/meetings/views.py
@@ -53,10 +53,15 @@ def build_timeslots(meeting,room=None):
53
or adding a room.
54
'''
55
slots = meeting.timeslot_set.filter(type='session')
56
57
+ # Don't do anything if the room is not capable of handling sessions
58
+ if not room.session_types.filter(slug='session'):
59
+ return
60
61
if room:
62
rooms = [room]
63
else:
- rooms = meeting.room_set.all()
64
+ rooms = meeting.room_set.filter(session_types__slug='session')
65
if not slots or room:
66
# if we are just building timeslots for a new room, the room argument was passed,
# then we need to use current meeting times as a template, not the last meeting times
ietf/templates/meeting/agenda_by_type.html
@@ -0,0 +1,54 @@
+{% extends "base.html" %}
+{% block morecss %}
+ul.typelist { list-style:none; padding-left:0; }
+li.typelistentry { font-size:162%; font-weight:700; }
+li.even { background-color:#EDF5FF; }
+li.odd { background-color:white; }
+ul.daylist {list-style:none; padding-left:0; margin-bottom:20px;}
+li.daylistentry { margin-left:2em; font-weight: 400; }
+.sessiontable {margin-left:2em; font-size:62%;}
+.sessiontable td {padding-right: 1em;}
+.typelabel { font-size:162%; font-weight:700; }
+.daylabel { font-size:162%; font-weight:400; }
+.even { background-color:#EDF5FF; }
+.odd { background-color:white; }
+{% comment %}li.sessionlistentry { font-size:62%; }{% endcomment %}
+.type-lead:after { content: " (DO NOT POST)"; color:red; }
+.type-offagenda:after { content:" (not published on agenda)"; }
+{% endblock %}
+{% block title %}Agenda for {{meeting}} by Session Type{% endblock %}
+{% block content %}
+<h1>Agenda for {{meeting}} by Session Type</h1>
+{% regroup scheduledsessions by session.type.slug as type_list %}
+<ul class="typelist">
+{% for type in type_list %}
32
+ <li class="typelistentry {% cycle 'even' 'odd' %}">
33
+ {{type.grouper}} <a id="ical-link" class="btn btn-primary" href="{% url "ietf.meeting.views.agenda_by_type_ics" num=meeting.number type=type.grouper %}">Download to Calendar</a>
+ <ul class="daylist">
+ {% regroup type.list by timeslot.time|date:"l Y-M-d" as daylist %}
+ {% for day in daylist %}
+ <li class="daylistentry">
+ {{ day.grouper }}
+ <table class="sessiontable">
+ {% for ss in day.list %}
+ <tr>
+ <td>{{ss.timeslot.time|date:"H:i"}}-{{ss.timeslot.end_time|date:"H:i"}}</td>
43
+ <td>{{ss.timeslot.get_hidden_location}}</td>
44
+ <td class="type-{{ss.session.type.slug}}">{{ss.session.short_name}}</td>
45
+ </tr>
46
+ {% endfor %}
47
+ </table>
48
+ </li>
49
50
+ </ul>
51
52
+{% endfor %}
+</ul>
0 commit comments