diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index 2fbb18848..eebbe8533 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -1743,6 +1743,12 @@ Junk body for testing self.assertEqual(len(outbox),1) self.assertTrue(all([str(x.person.pk) in outbox[0].get_payload(decode=True) for x in [nominee1,nominee2]])) + def test_extract_email(self): + url = reverse('ietf.nomcom.views.extract_email_lists',kwargs={'year':self.nc.year()}) + login_testing_unauthorized(self,self.chair.user.username,url) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + class NomComIndexTests(TestCase): def setUp(self): diff --git a/ietf/nomcom/urls.py b/ietf/nomcom/urls.py index 3a9447068..d891e204e 100644 --- a/ietf/nomcom/urls.py +++ b/ietf/nomcom/urls.py @@ -23,6 +23,7 @@ urlpatterns = [ url(r'^(?P\d{4})/private/merge-nominee/?$', views.private_merge_nominee), url(r'^(?P\d{4})/private/merge-person/?$', views.private_merge_person), url(r'^(?P\d{4})/private/send-reminder-mail/(?P\w+)/$', views.send_reminder_mail), + url(r'^(?P\d{4})/private/extract-email-lists/$', views.extract_email_lists), url(r'^(?P\d{4})/private/edit-members/$', views.edit_members), url(r'^(?P\d{4})/private/edit-nomcom/$', views.edit_nomcom), url(r'^(?P\d{4})/private/chair/templates/$', views.list_templates), diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index e196d006f..d5bcb8095 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -1202,3 +1202,23 @@ def edit_members(request, year): 'form': form, }) +@role_required("Nomcom Chair", "Nomcom Advisor") +def extract_email_lists(request, year): + nomcom = get_nomcom_by_year(year) + + pending = nomcom.nominee_set.filter(nomineeposition__state='pending').distinct() + accepted = nomcom.nominee_set.filter(nomineeposition__state='accepted').distinct() + noresp = [n for n in accepted if n.nomineeposition_set.without_questionnaire_response().filter(state='accepted')] + + bypos = {} + for pos in nomcom.position_set.all(): + bypos[pos] = nomcom.nominee_set.filter(nomineeposition__position=pos,nomineeposition__state='accepted').distinct() + + return render(request, 'nomcom/extract_email_lists.html', + {'nomcom': nomcom, + 'year' : year, + 'pending': pending, + 'accepted': accepted, + 'noresp': noresp, + 'bypos': bypos, + }) diff --git a/ietf/templates/nomcom/email_list_panel.html b/ietf/templates/nomcom/email_list_panel.html new file mode 100644 index 000000000..38b69e1e1 --- /dev/null +++ b/ietf/templates/nomcom/email_list_panel.html @@ -0,0 +1,6 @@ +
+

{{title}}

+
+ {% for n in list %}{{n.email.address}}{% if not forloop.last %}, {%endif %}{% endfor %} +
+
diff --git a/ietf/templates/nomcom/extract_email_lists.html b/ietf/templates/nomcom/extract_email_lists.html new file mode 100644 index 000000000..3368750c2 --- /dev/null +++ b/ietf/templates/nomcom/extract_email_lists.html @@ -0,0 +1,32 @@ +{% extends "nomcom/nomcom_private_base.html" %} +{# Copyright The IETF Trust 2015, All Rights Reserved #} +{% load origin %} +{% load bootstrap3 %} + +{% block subtitle %} - Email Lists{% endblock %} + +{% block nomcom_content %} + {% origin %} +

Email lists for {{ nomcom.group }}

+ + {% with title='Nominees Pending Acceptance' list=pending %} + {% include 'nomcom/email_list_panel.html' %} + {% endwith %} + {% with title='Accepted Nominees' list=accepted %} + {% include 'nomcom/email_list_panel.html' %} + {% endwith %} + {% with title='Accepted Nominees Without a Questionnaire Response' list=noresp %} + {% include 'nomcom/email_list_panel.html' %} + {% endwith %} +
+

Accepted Nominees by Position

+
+ {% for pos, accepts in bypos.items %} + {% with title=pos.name list=accepts %} + {% include 'nomcom/email_list_panel.html' %} + {% endwith %} + {% endfor %} +
+
+ +{% endblock nomcom_content %} diff --git a/ietf/templates/nomcom/nomcom_private_base.html b/ietf/templates/nomcom/nomcom_private_base.html index 273707374..cb30a4c9f 100644 --- a/ietf/templates/nomcom/nomcom_private_base.html +++ b/ietf/templates/nomcom/nomcom_private_base.html @@ -31,6 +31,7 @@
  • Classify pending feedback
  • Enter email feedback
  • Enter questionnaire response
  • +
  • Extract email lists
  • Send accept reminder
  • Send questionnaire reminder
  • Request Person Record Merge