checkpoint: views by type working

- Legacy-Id: 9592
This commit is contained in:
Robert Sparks 2015-04-30 21:44:45 +00:00
parent 1e30120710
commit 72b85fc1c7
7 changed files with 144 additions and 3 deletions

View file

@ -67,7 +67,7 @@ def backfill_91_other_meetings(apps, schema_editor):
( 9, 17, 0, 120, 'offagenda', [secr], sea_pearl_12, 'Reception', "Companion's Reception"), # Should this appear on agenda?
( 9, 19, 0, 180, 'offagenda', [isocfell], rainbow_23, 'Dinner', 'ISOC Fellows Reception/Dinner'),
( 9, 19, 0, 180, 'offagenda', [secr], lehua_suite, 'Meeting', 'Huawei'),
( 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'),
( 10, 0, 0, 1440, 'offagenda', [secr], south_pacific_1, 'Terminal Room', 'Terminal Room Open to Attendees'),
( 10, 7, 0, 120, 'lead', [iesg,iab], south_pacific_2, 'Breakfast', 'IESG/IAB Breakfast'),
( 10, 7, 0, 120, 'lead', [nomcom], iolani_67, 'Breakfast', 'Nomcom Breakfast'),

View file

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
def extract_session_type_values(apps, schema_editor):
Session = apps.get_model('meeting', 'Session')
for s in Session.objects.all():
t = s.scheduledsession_set.filter(schedule=models.F('schedule__meeting__agenda')).first()
if t and t.timeslot.type.slug != 'session':
s.type = t.timeslot.type
s.save()
class Migration(migrations.Migration):
dependencies = [
('name', '0004_auto_20150318_1140'),
('meeting', '0005_auto_20150318_1116'),
]
operations = [
migrations.AddField(
model_name='session',
name='type',
field=models.ForeignKey(default='session', to='name.TimeSlotTypeName'),
preserve_default=False,
),
migrations.RunPython(extract_session_type_values),
]

View file

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
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)
class Migration(migrations.Migration):
dependencies = [
('name', '0004_auto_20150318_1140'),
('meeting', '0006_auto_20150429_1224'),
]
operations = [
migrations.AddField(
model_name='room',
name='session_types',
field=models.ManyToManyField(to='name.TimeSlotTypeName', blank=True),
preserve_default=True,
),
migrations.RunPython(extract_room_session_type_values),
]

View file

@ -34,6 +34,9 @@ urlpatterns = patterns('',
(r'^(?P<num>\d+)/agenda.ics$', views.ical_agenda),
(r'^(?P<num>\d+)/agenda(?P<ext>.csv)$', views.agenda),
(r'^(?P<num>\d+)/agenda/by-room$', views.agenda_by_room),
(r'^(?P<num>\d+)/agenda/by-type$', views.agenda_by_type),
(r'^(?P<num>\d+)/agenda/by-type/(?P<type>[a-z]+)$', views.agenda_by_type),
(r'^(?P<num>\d+)/agenda/by-type/(?P<type>[a-z]+)/ics$', views.agenda_by_type_ics),
(r'^(?P<num>\d+)/agendas/edit$', views.edit_agendas),
(r'^(?P<num>\d+)/timeslots/edit$', views.edit_timeslots),
(r'^(?P<num>\d+)/rooms$', ajax.timeslot_roomsurl),

View file

@ -388,7 +388,6 @@ def agenda(request, num=None, name=None, base=None, ext=None):
#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)
@ -400,6 +399,25 @@ def agenda_by_room(request,num=None):
ss_by_day[day].append(ss)
return render(request,"meeting/agenda_by_room.html",{"meeting":meeting,"ss_by_day":ss_by_day})
@role_required('Area Director','Secretariat')
def agenda_by_type(request,num=None,type=None):
meeting = get_meeting(num)
schedule = get_schedule(meeting)
scheduledsessions = schedule.scheduledsession_set.order_by('session__type__slug','timeslot__time')
if type:
scheduledsessions = scheduledsessions.filter(session__type__slug=type)
return render(request,"meeting/agenda_by_type.html",{"meeting":meeting,"scheduledsessions":scheduledsessions})
@role_required('Area Director','Secretariat')
def agenda_by_type_ics(request,num=None,type=None):
meeting = get_meeting(num)
schedule = get_schedule(meeting)
scheduledsessions = schedule.scheduledsession_set.order_by('session__type__slug','timeslot__time')
if type:
scheduledsessions = scheduledsessions.filter(session__type__slug=type)
updated = meeting_updated(meeting)
return render(request,"meeting/agenda.ics",{"schedule":schedule,"updated":updated,"assignments":scheduledsessions},content_type="text/calendar")
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()

View file

@ -53,10 +53,15 @@ def build_timeslots(meeting,room=None):
or adding a room.
'''
slots = meeting.timeslot_set.filter(type='session')
# Don't do anything if the room is not capable of handling sessions
if not room.session_types.filter(slug='session'):
return
if room:
rooms = [room]
else:
rooms = meeting.room_set.all()
rooms = meeting.room_set.filter(session_types__slug='session')
if not slots or room:
# 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

View file

@ -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 %}
<li class="typelistentry {% cycle 'even' 'odd' %}">
{{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>
<td>{{ss.timeslot.get_hidden_location}}</td>
<td class="type-{{ss.session.type.slug}}">{{ss.session.short_name}}</td>
</tr>
{% endfor %}
</table>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
{% endblock %}