add status reports to proceedings. add a view for the applicable status report for a given meeting. Commit ready for merge.

- Legacy-Id: 11766
This commit is contained in:
Robert Sparks 2016-08-09 15:42:40 +00:00
parent 57afa06fcd
commit 9b2d73b365
8 changed files with 64 additions and 1 deletions

View file

@ -157,6 +157,14 @@ class Group(GroupInfo):
return self.role_set.filter(**role_kwargs)
return self.role_set.none()
def status_for_meeting(self,meeting):
end_date = meeting.end_date()+datetime.timedelta(days=1)
previous_meeting = meeting.previous_meeting()
status_events = self.groupevent_set.filter(type='status_update',time__lte=end_date).order_by('-time')
if previous_meeting:
status_events = status_events.filter(time__gte=previous_meeting.end_date()+datetime.timedelta(days=1))
return status_events.first()
class GroupHistory(GroupInfo):
group = models.ForeignKey(Group, related_name='history_set')
acronym = models.CharField(max_length=40)

View file

@ -1193,6 +1193,14 @@ class StatusUpdateTests(TestCase):
url = urlreverse('ietf.group.views.all_status')
response = self.client.get(url)
self.assertEqual(response.status_code,200)
def test_view_status_update_for_meeting(self):
chair = RoleFactory(name_id='chair',group__type_id='wg')
GroupEventFactory(type='status_update',group=chair.group)
sess = SessionFactory.create(meeting__type_id='ietf',group=chair.group,meeting__date=datetime.datetime.today()-datetime.timedelta(days=1))
url = urlreverse('ietf.group.views.group_about_status_meeting',kwargs={'acronym':chair.group.acronym,'num':sess.meeting.number})
response = self.client.get(url)
self.assertEqual(response.status_code,200)
class GroupParentLoopTests(TestCase):

View file

@ -14,6 +14,7 @@ urlpatterns = patterns('',
(r'^about/$', 'ietf.group.views.group_about', None, 'group_about'),
(r'^about/status/$', 'ietf.group.views.group_about_status'),
(r'^about/status/edit/$', 'ietf.group.views.group_about_status_edit'),
(r'^about/status/meeting/(?P<num>\d+)/$', 'ietf.group.views.group_about_status_meeting'),
(r'^history/$','ietf.group.views.history'),
(r'^email/$', 'ietf.group.views.email'),
(r'^deps/(?P<output_type>[\w-]+)/$', 'ietf.group.views.dependencies'),

View file

@ -67,6 +67,7 @@ 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
from ietf.meeting.helpers import get_meeting
def roles(group, role_name):
return Role.objects.filter(group=group, name=role_name).select_related("email", "person")
@ -534,6 +535,17 @@ def group_about_status(request, acronym, group_type=None):
}
)
def group_about_status_meeting(request, acronym, num, group_type=None):
meeting = get_meeting(num)
group = get_group_or_404(acronym, group_type)
status_update = group.status_for_meeting(meeting)
return render(request, 'group/group_about_status_meeting.html',
{ 'group' : group,
'status_update': status_update,
'meeting': meeting,
}
)
class StatusUpdateForm(forms.Form):
content = forms.CharField(widget=forms.Textarea, label='Status update', help_text = 'Edit the status update', required=False)
txt = forms.FileField(label='.txt format', help_text='Or upload a .txt file', required=False)

View file

@ -282,6 +282,9 @@ class Meeting(models.Model):
ts = tz.localize(ts)
return ts
def previous_meeting(self):
return Meeting.objects.filter(type=self.type,date__lt=self.date).order_by('-date').first()
class Meta:
ordering = ["-date", "id"]

View file

@ -12,3 +12,7 @@ def hack_recording_title(recording,add_timestamp=False):
return hacked_title
else:
return recording.title
@register.filter
def status_for_meeting(group,meeting):
return group.status_for_meeting(meeting)

View file

@ -0,0 +1,22 @@
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load staticfiles %}
{% load bootstrap3 %}
{% load ietf_filters %}
{% block title %}
Status update for {{ group.type.name }} {{ group.acronym }} at {{meeting}}
{% endblock %}
{% block content %}
{% origin %}
<h1>
Status update for {{ group.type.name }} {{ group.acronym }} at {{meeting}}
</h1>
<pre class="pasted">{{ status_update.desc|default:"(none)"|escape|urlize }}</pre>
<a class="btn btn-default pull-right" href="{% url "ietf.meeting.views.proceedings" num=meeting.number %}">Back</a>
{% endblock %}

View file

@ -38,13 +38,18 @@
{% endif %}
{% if session.all_meeting_bluesheets %}
{% if session.all_meeting_bluesheets|length == 1 %}
<a href="{{session.all_meeting_bluesheets.0.get_absolute_url}}">Bluesheets</a></br>
<a href="{{session.all_meeting_bluesheets.0.get_absolute_url}}">Bluesheets</a><br>
{% else %}
{% for bs in session.all_meeting_bluesheets %}
<a href="{{bs.get_absolute_url}}">Bluesheets {{bs.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i"}}</a></br>
{% endfor %}
{% endif %}
{% endif %}
{% with session.group|status_for_meeting:meeting as status %}
{% if status %}
<a href="{% url 'ietf.group.views.group_about_status_meeting' acronym=session.group.acronym num=meeting.number %}">Status</a><br>
{% endif %}
{% endwith %}
</td>
<td>