Skip to content

Commit 4ce6b93

Browse files
committed
Add a page for the nomcom-chair and the secretariat to view who the datatracker thinks is nomcom eligible. Related to ietf-tools#2257. Commit ready for merge.
- Legacy-Id: 14533
1 parent ae16217 commit 4ce6b93

5 files changed

Lines changed: 77 additions & 0 deletions

File tree

ietf/nomcom/tests.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,6 +1749,12 @@ def test_extract_email(self):
17491749
response = self.client.get(url)
17501750
self.assertEqual(response.status_code, 200)
17511751

1752+
def test_eligible(self):
1753+
url = reverse('ietf.nomcom.views.eligible',kwargs={'year':self.nc.year()})
1754+
login_testing_unauthorized(self,self.chair.user.username,url)
1755+
response = self.client.get(url)
1756+
self.assertEqual(response.status_code, 200)
1757+
17521758

17531759
class NomComIndexTests(TestCase):
17541760
def setUp(self):

ietf/nomcom/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
url(r'^(?P<year>\d{4})/private/chair/topic/add/$', views.edit_topic),
3737
url(r'^(?P<year>\d{4})/private/chair/topic/(?P<topic_id>\d+)/$', views.edit_topic),
3838
url(r'^(?P<year>\d{4})/private/chair/topic/(?P<topic_id>\d+)/remove/$', views.remove_topic),
39+
url(r'^(?P<year>\d{4})/private/chair/eligible/$', views.eligible ),
3940

4041
url(r'^(?P<year>\d{4})/$', views.year_index),
4142
url(r'^(?P<year>\d{4})/requirements/$', views.requirements),

ietf/nomcom/views.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from ietf.name.models import NomineePositionStateName, FeedbackTypeName
1919
from ietf.group.models import Group, GroupEvent
2020
from ietf.message.models import Message
21+
from ietf.meeting.models import Meeting
2122

2223
from ietf.nomcom.decorators import nomcom_private_key_required
2324
from ietf.nomcom.forms import (NominateForm, NominateNewPersonForm, FeedbackForm, QuestionnaireForm,
@@ -1223,3 +1224,32 @@ def extract_email_lists(request, year):
12231224
'noresp': noresp,
12241225
'bypos': bypos,
12251226
})
1227+
1228+
@role_required("Nomcom Chair", "Nomcom Advisor", "Secretariat")
1229+
def eligible(request, year):
1230+
nomcom = get_nomcom_by_year(year)
1231+
1232+
date = datetime.date.today()
1233+
previous_five = Meeting.objects.filter(type='ietf',date__lte=date).order_by('-date')[:5]
1234+
attendees = {}
1235+
potentials = set()
1236+
for m in previous_five:
1237+
registration_emails = m.meetingregistration_set.values_list('email',flat=True)
1238+
attendees[m] = Person.objects.filter(email__address__in=registration_emails).distinct()
1239+
potentials.update(attendees[m].exclude(role__group__type_id='area',role__group__state='active',role__name_id='ad').exclude(role__group__acronym='iab',role__name_id__in=['member','chair']).exclude(role__group__acronym='iaoc',role__name_id__in=['member','chair']))
1240+
eligible_persons = []
1241+
for p in potentials:
1242+
count = 0
1243+
for m in previous_five:
1244+
if p in attendees[m]:
1245+
count += 1
1246+
if count >= 3:
1247+
eligible_persons.append(p)
1248+
1249+
eligible_persons.sort(key=lambda p: p.last_name() )
1250+
1251+
return render(request, 'nomcom/eligible.html',
1252+
{'nomcom':nomcom,
1253+
'year':year,
1254+
'eligible_persons':eligible_persons,
1255+
})
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{% extends "nomcom/nomcom_private_base.html" %}
2+
{# Copyright The IETF Trust 2015, All Rights Reserved #}
3+
{% load origin %}
4+
{% load bootstrap3 %}
5+
{% load staticfiles %}
6+
7+
{% block subtitle %} - Eligible People{% endblock %}
8+
9+
{% block pagehead %}
10+
<link rel="stylesheet" href="{% static "jquery.tablesorter/css/theme.bootstrap.min.css" %}">
11+
{% endblock %}
12+
13+
{% block nomcom_content %}
14+
{% origin %}
15+
<h2>Eligible People for {{ nomcom.group }}</h2>
16+
17+
<p class="alert alert-info">
18+
This calculation is experimental and is likely wrong. Check carefully against the secretariat eligibility tools if it matters. This page lists people who would be nomcom eligible if the selection were made <em>today</em>. Thus if today is not between the spring and summer IETF meetings, the list won't reflect eligibility at the time actual selections will be made.
19+
</p>
20+
<table class="table table-condensed table-striped tablesorter">
21+
<thead>
22+
<th>Last Name</th>
23+
<th>First Name</th>
24+
<th>Email Addresses</th>
25+
</thead>
26+
27+
{% for p in eligible_persons %}
28+
<tr>
29+
<td><a href="{% url 'ietf.person.views.profile' p.plain_name %}">{{p.last_name}}</a></td>
30+
<td>{{p.first_name}}</td>
31+
<td>{% for e in p.email_set.all %}{{e.address}}{% if not forloop.last %}, {% endif %}{% endfor %}</td>
32+
</tr>
33+
{% endfor %}
34+
</table>
35+
{% endblock nomcom_content %}
36+
37+
{% block js %}
38+
<script src="{% static "jquery.tablesorter/js/jquery.tablesorter.combined.min.js" %}"></script>
39+
{% endblock %}

ietf/templates/nomcom/nomcom_private_base.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ <h1>NomCom {{ year }} {% if nomcom.group.state_id == 'conclude' %}(Concluded){%
4545
{% if nomcom.group.state_id == 'active' %}
4646
<li {% if selected == "edit_members" %}class="active"{% endif %}><a href="{% url 'ietf.nomcom.views.edit_members' year %}">Edit Members</a></li>
4747
{% endif %}
48+
<li {% if selected == "view_eligible" %}class="active"{% endif %}><a href="{% url 'ietf.nomcom.views.eligible' year %}">View Eligible</a></li>
4849
<li {% if selected == "help" %}class="active"{% endif %}><a href="{% url 'ietf.nomcom.views.configuration_help' year %}">Configuration Help</a></li>
4950
<li role="presentation" class="dropdown-header">Other Tools</li>
5051
<li {% if selected == "announce" %}class="active"{% endif %}><a href="{% url 'ietf.secr.announcement.views.main'%}">Announcement Tool</a></li>

0 commit comments

Comments
 (0)