checkpoint: start of a view showing all sessions associated with a document

- Legacy-Id: 10844
This commit is contained in:
Robert Sparks 2016-02-17 16:38:33 +00:00
parent 8b87125716
commit 78ca39f237
7 changed files with 150 additions and 29 deletions

View file

@ -2,6 +2,7 @@ from django.conf.urls import patterns, url
urlpatterns = patterns('ietf.doc.views_material',
url(r'^(?P<action>state|title|abstract|revise)/$', "edit_material", name="material_edit"),
url(r'^meetings/$', "all_presentations", name="all_presentations"),
url(r'^sessions/$', "material_presentations", name="material_presentations"),
(r'^sessions/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/edit/$', "edit_material_presentations"),

View file

@ -18,6 +18,7 @@ from ietf.doc.utils import add_state_change_event, check_common_doc_name_rules
from ietf.group.models import Group
from ietf.group.utils import can_manage_materials
from ietf.meeting.models import Session
from ietf.meeting.utils import group_sessions
@login_required
def choose_material_type(request, acronym):
@ -318,3 +319,19 @@ def material_presentations(request, name, acronym=None, date=None, seq=None, wee
'date': date,
'week_day': week_day,
})
def all_presentations(request, name):
doc = get_object_or_404(Document, name=name)
sessions = doc.session_set.filter(status__in=['sched','schedw','appr','canceled'],
type__in=['session','plenary','other'])
future, in_progress, past = group_sessions(sessions)
return render(request, 'doc/material/all_presentations.html', {
'doc': doc,
'future': future,
'in_progress': in_progress,
'past' : past,
})

View file

@ -60,6 +60,7 @@ from ietf.utils.pipe import pipe
from ietf.settings import MAILING_LIST_INFO_URL
from ietf.mailtrigger.utils import gather_relevant_expansions
from ietf.ietfauth.utils import has_role
from ietf.meeting.utils import group_sessions
def roles(group, role_name):
return Role.objects.filter(group=group, name=role_name).select_related("email", "person")
@ -737,35 +738,7 @@ def meetings(request, acronym=None, group_type=None):
meeting__date__gt=four_years_ago,
type__in=['session','plenary','other'])
def sort_key(session):
if session.meeting.type.slug=='ietf':
official_sessions = session.timeslotassignments.filter(schedule=session.meeting.agenda)
if official_sessions:
return official_sessions.first().timeslot.time
elif session.meeting.date:
return datetime.datetime.combine(session.meeting.date,datetime.datetime.min.time())
else:
return session.requested
else:
# TODO: use timeslots for interims once they have them
return datetime.datetime.combine(session.meeting.date,datetime.datetime.min.time())
for s in sessions:
s.time=sort_key(s)
sessions = sorted(sessions,key=lambda s:s.time,reverse=True)
today = datetime.date.today()
future = []
in_progress = []
past = []
for s in sessions:
if s.meeting.date > today:
future.append(s)
elif s.meeting.end_date() >= today:
in_progress.append(s)
else:
past.append(s)
future, in_progress, past = group_sessions(sessions)
can_edit = has_role(request.user,["Secretariat","Area Director"]) or group.has_role(request.user,["Chair","Secretary"])

View file

@ -0,0 +1,12 @@
from django import template
register = template.Library()
@register.filter
def presented_versions(session,doc):
sp = session.sessionpresentation_set.filter(document=doc)
if not sp:
return "Document not in session"
else:
rev = sp.first().rev
return rev if rev else "(current)"

35
ietf/meeting/utils.py Normal file
View file

@ -0,0 +1,35 @@
import datetime
def group_sessions(sessions):
def sort_key(session):
if session.meeting.type.slug=='ietf':
official_sessions = session.timeslotassignments.filter(schedule=session.meeting.agenda)
if official_sessions:
return official_sessions.first().timeslot.time
elif session.meeting.date:
return datetime.datetime.combine(session.meeting.date,datetime.datetime.min.time())
else:
return session.requested
else:
# TODO: use timeslots for interims once they have them
return datetime.datetime.combine(session.meeting.date,datetime.datetime.min.time())
for s in sessions:
s.time=sort_key(s)
sessions = sorted(sessions,key=lambda s:s.time,reverse=True)
today = datetime.date.today()
future = []
in_progress = []
past = []
for s in sessions:
if s.meeting.date > today:
future.append(s)
elif s.meeting.end_date() >= today:
in_progress.append(s)
else:
past.append(s)
return future, in_progress, past

View file

@ -0,0 +1,44 @@
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% block title %}Sessions linked to {{doc.name}}{% endblock %}
{% block content %}
{% origin %}
<h1>Sessions linked to {{doc.name}}{% if doc.title %}<br><small>{{doc.title}}</small>{% endif %}</h1>
{% if in_progress %}
<div class="panel panel-default" id="inprogressmeets">
<div class="panel-heading">Meetings in progress</div>
<div class="panel-body">
{% with sessions=in_progress %}
{% include "doc/material/presentations-row.html" %}
{% endwith %}
</div>
</div>
{% endif %}
{% if future %}
<div class="panel panel-default" id="futuremeets">
<div class="panel-heading">Future meetings</div>
<div class="panel-body">
{% with sessions=future %}
{% include "doc/material/presentations-row.html" %}
{% endwith %}
</div>
</div>
{% endif %}
{% if past %}
<div class="panel panel-default" id="pastmeets">
<div class="panel-heading">Past meetings</div>
<div class="panel-body">
{% with sessions=past %}
{% include "doc/material/presentations-row.html" %}
{% endwith %}
</div>
</div>
{% endif %}
{% endblock content %}

View file

@ -0,0 +1,39 @@
{% load session_filters %}
<table class="table table-condensed table-striped">
<thead>
<tr>
<th class="col-md-1">Revision</th>
<th class="col-md-2">Meeting</th>
<th class="col-md-2">Session</th>
<th class="col-md-1"></th>
<th class="col-md-1"></th>
<th class="col-md-5"></th>
</tr>
</thead>
<tbody>
{% for s in sessions %}
<tr>
<td>{{s|presented_versions:doc}}</td>
<td>{% ifchanged s.meeting %}{% if s.meeting.type.slug == 'ietf' %}IETF{% endif %}{{s.meeting.number}}{% endifchanged %}</td>
<td>
{% if s.name %}{{ s.name }}<br>{% endif %}
{% if s.status.slug == "sched" %}
{% if s.meeting.type.slug == 'ietf' %}{{s.time|date:"D M d, Y Hi"}}{% else %}{{s.time|date:"D M d, Y"}}{% endif %}
{% else %}
{{s.status}}
{% endif %}
{% comment %}
{% if show_request and s.meeting.type.slug == 'ietf' %}
{% if can_edit %}
<br>
<a class="btn btn-default btn-xs" href="{% url 'sessions_view' num=s.meeting.number acronym=s.group.acronym %}">Edit Session Request</a>
{% endif %}
{% endif %}
{% endcomment %}
</td>
<td>{% if s.agenda %}<a href="{{ s.agenda.get_absolute_url }}">Agenda</a>{% endif %}</td>
<td>{% if s.minutes %}<a href="{{ s.minutes.get_absolute_url }}">Minutes</a>{% endif %}</td>
<td><a href="{% url 'ietf.meeting.views.session_details' num=s.meeting.number acronym=s.group.acronym %}">Materials</a></td>
{% endfor %}
</tbody>
</table>