checkpoint: start of a view showing all sessions associated with a document
- Legacy-Id: 10844
This commit is contained in:
parent
8b87125716
commit
78ca39f237
|
@ -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"),
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
|
|
|
@ -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"])
|
||||
|
||||
|
|
12
ietf/meeting/templatetags/session_filters.py
Normal file
12
ietf/meeting/templatetags/session_filters.py
Normal 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
35
ietf/meeting/utils.py
Normal 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
|
44
ietf/templates/doc/material/all_presentations.html
Normal file
44
ietf/templates/doc/material/all_presentations.html
Normal 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 %}
|
39
ietf/templates/doc/material/presentations-row.html
Normal file
39
ietf/templates/doc/material/presentations-row.html
Normal 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>
|
Loading…
Reference in a new issue