11 # -*- coding: utf-8 -*-
2+ from django .conf import settings
23from django .contrib .auth .decorators import login_required
34from django .core .urlresolvers import reverse
45from django .http import HttpResponse , Http404 , HttpResponseRedirect
89from django .utils import simplejson
910from django .db .models import Count
1011
12+ from ietf .utils .mail import send_mail
13+
1114from ietf .dbtemplate .models import DBTemplate
1215from ietf .dbtemplate .views import template_edit
1316from ietf .name .models import NomineePositionState
1417from ietf .nomcom .decorators import member_required , private_key_required
1518from ietf .nomcom .forms import (EditPublicKeyForm , NominateForm , MergeForm ,
1619 NomComTemplateForm , PositionForm , PrivateKeyForm )
17- from ietf .nomcom .models import Position , NomineePosition
20+ from ietf .nomcom .models import Position , NomineePosition , Nominee
1821from ietf .nomcom .utils import (get_nomcom_by_year , HOME_TEMPLATE ,
1922 retrieve_nomcom_private_key ,
20- store_nomcom_private_key )
23+ store_nomcom_private_key , NOMINEE_REMINDER_TEMPLATE )
2124
2225
2326def index (request , year ):
@@ -56,20 +59,22 @@ def private_key(request, year):
5659@member_required (role = 'member' )
5760def private_index (request , year ):
5861 nomcom = get_nomcom_by_year (year )
62+ all_nominee_positions = NomineePosition .objects .get_by_nomcom (nomcom )
5963 is_chair = nomcom .group .is_chair (request .user )
6064 message = None
6165 if is_chair and request .method == 'POST' :
6266 action = request .POST .get ('action' )
6367 nominations_to_modify = request .POST .getlist ('selected' )
6468 if nominations_to_modify :
69+ nominations = all_nominee_positions .filter (id__in = nominations_to_modify )
6570 if action == "set_as_accepted" :
66- NomineePosition . objects . filter ( id__in = nominations_to_modify ) .update (state = 'accepted' )
71+ nominations .update (state = 'accepted' )
6772 message = ('success' , 'The selected nominations has been set as accepted' )
6873 elif action == "set_as_declined" :
69- NomineePosition . objects . filter ( id__in = nominations_to_modify ) .update (state = 'declined' )
74+ nominations .update (state = 'declined' )
7075 message = ('success' , 'The selected nominations has been set as declined' )
7176 elif action == "set_as_pending" :
72- NomineePosition . objects . filter ( id__in = nominations_to_modify ) .update (state = 'pending' )
77+ nominations .update (state = 'pending' )
7378 message = ('success' , 'The selected nominations has been set as pending' )
7479 else :
7580 message = ('warning' , "Please, select some nominations to work with" )
@@ -87,21 +92,21 @@ def private_index(request, year):
8792 if selected_position :
8893 filters ['position__id' ] = selected_position
8994
90- nominee_positions = NomineePosition . objects . all ()
95+ nominee_positions = all_nominee_positions
9196 if filters :
9297 nominee_positions = nominee_positions .filter (** filters )
9398
94- stats = NomineePosition . objects .values ('position__name' ).annotate (total = Count ('position' ))
99+ stats = all_nominee_positions .values ('position__name' ).annotate (total = Count ('position' ))
95100 states = list (NomineePositionState .objects .values ('slug' , 'name' )) + [{'slug' : u'questionnaire' , 'name' : u'Questionnaire' }]
96- positions = NomineePosition . objects .values ('position__name' , 'position__id' ).distinct ()
101+ positions = all_nominee_positions .values ('position__name' , 'position__id' ).distinct ()
97102 for s in stats :
98103 for state in states :
99104 if state ['slug' ] == 'questionnaire' :
100- s [state ['slug' ]] = NomineePosition . objects .filter (position__name = s ['position__name' ],
101- questionnaires__isnull = False ).count ()
105+ s [state ['slug' ]] = all_nominee_positions .filter (position__name = s ['position__name' ],
106+ questionnaires__isnull = False ).count ()
102107 else :
103- s [state ['slug' ]] = NomineePosition . objects .filter (position__name = s ['position__name' ],
104- state = state ['slug' ]).count ()
108+ s [state ['slug' ]] = all_nominee_positions .filter (position__name = s ['position__name' ],
109+ state = state ['slug' ]).count ()
105110
106111 return render_to_response ('nomcom/private_index.html' ,
107112 {'nomcom' : nomcom ,
@@ -117,6 +122,39 @@ def private_index(request, year):
117122 'message' : message }, RequestContext (request ))
118123
119124
125+ @member_required (role = 'chair' )
126+ def send_reminder_mail (request , year ):
127+ nomcom = get_nomcom_by_year (year )
128+ nominees = Nominee .objects .get_by_nomcom (nomcom ).filter (nomineeposition__state = 'pending' ).distinct ()
129+ nomcom_template_path = '/nomcom/%s/' % nomcom .group .acronym
130+ mail_path = nomcom_template_path + NOMINEE_REMINDER_TEMPLATE
131+ mail_template = DBTemplate .objects .filter (group = nomcom .group , path = mail_path )
132+ mail_template = mail_template and mail_template [0 ] or None
133+ message = None
134+
135+ if request .method == 'POST' :
136+ selected_nominees = request .POST .getlist ('selected' )
137+ selected_nominees = nominees .filter (id__in = selected_nominees )
138+ if selected_nominees :
139+ subject = 'IETF Nomination Information'
140+ from_email = settings .NOMCOM_FROM_EMAIL
141+ for nominee in nominees :
142+ to_email = nominee .email .address
143+ positions = ', ' .join ([nominee_position .position .name for nominee_position in nominee .nomineeposition_set .all ()
144+ if nominee_position .state .slug == "pending" ])
145+ context = {'positions' : positions }
146+ send_mail (None , to_email , from_email , subject , mail_path , context )
147+ message = ('success' , 'An query has been sent to each person, asking them to accept (or decline) the nominations' )
148+ else :
149+ message = ('warning' , "Please, select some nominee" )
150+ return render_to_response ('nomcom/send_reminder_mail.html' ,
151+ {'nomcom' : nomcom ,
152+ 'year' : year ,
153+ 'nominees' : nominees ,
154+ 'mail_template' : mail_template ,
155+ 'message' : message }, RequestContext (request ))
156+
157+
120158@member_required (role = 'chair' )
121159def private_merge (request , year ):
122160 nomcom = get_nomcom_by_year (year )
0 commit comments