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:
parent
57afa06fcd
commit
9b2d73b365
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"]
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
22
ietf/templates/group/group_about_status_meeting.html
Normal file
22
ietf/templates/group/group_about_status_meeting.html
Normal 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 %}
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue