Skip to content

Commit d649fd5

Browse files
committed
Merged [6465] and [6466] from rjsparks@nostrum.com:
Added the ability to send reminders to complete questionnaires to nominees in the accepted state. Changed the send_reminders management command to not take any arguments and run against all active nomcoms. Removed bugs from the send_reminders management command and added tests for it. Adjusted several dbtemplate titles and content. Fixes bug 1157 - Legacy-Id: 6471 Note: SVN reference [6465] has been migrated to Git commit 22f3564 Note: SVN reference [6466] has been migrated to Git commit a461e6c
1 parent 47071ec commit d649fd5

11 files changed

Lines changed: 903 additions & 81 deletions

File tree

ietf/dbtemplate/fixtures/nomcom_templates.xml

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ $position: Position</field>
9696
</field>
9797
<field to="group.group" name="group" rel="ManyToOneRel"><None></None></field>
9898
</object>
99-
<object p="8" model="dbtemplate.dbtemplate">
100-
<field type="CharField" name="path">/nomcom/defaults/email/nomination_reminder.txt</field>
99+
<object pk="8" model="dbtemplate.dbtemplate">
100+
<field type="CharField" name="path">/nomcom/defaults/email/nomination_accept_reminder.txt</field>
101101
<field type="CharField" name="title">Email sent to nominees asking them to accept (or decline) the nominations.</field>
102102
<field type="TextField" name="variables">$positions: Nomination positions</field>
103103
<field to="name.dbtemplatetypename" name="type" rel="ManyToOneRel">plain</field>
@@ -114,7 +114,7 @@ If you accept, you will need to fill out a questionnaire.
114114
Best regards,</field>
115115
<field to="group.group" name="group" rel="ManyToOneRel"><None></None></field>
116116
</object>
117-
<object p="9" model="dbtemplate.dbtemplate">
117+
<object pk="9" model="dbtemplate.dbtemplate">
118118
<field type="CharField" name="path">/nomcom/defaults/email/nomination_receipt.txt</field>
119119
<field type="CharField" name="title">Email sent to nominator to get a confirmation mail containing feedback in cleartext</field>
120120
<field type="TextField" name="variables">$nominee: Full name of the nominee
@@ -137,7 +137,7 @@ $comments
137137
Thank you,</field>
138138
<field to="group.group" name="group" rel="ManyToOneRel"><None></None></field>
139139
</object>
140-
<object p="10" model="dbtemplate.dbtemplate">
140+
<object pk="10" model="dbtemplate.dbtemplate">
141141
<field type="CharField" name="path">/nomcom/defaults/email/feedback_receipt.txt</field>
142142
<field type="CharField" name="title">Email sent to feedback author to get a confirmation mail containing feedback in cleartext</field>
143143
<field type="TextField" name="variables">$nominee: Full name of the nominee
@@ -158,4 +158,18 @@ $comments
158158
Thank you,</field>
159159
<field to="group.group" name="group" rel="ManyToOneRel"><None></None></field>
160160
</object>
161+
<object pk="11" model="dbtemplate.dbtemplate">
162+
<field type="CharField" name="path">/nomcom/defaults/email/questionnaire_reminder.txt</field>
163+
<field type="CharField" name="title">Email sent to nominees reminding them to complete a questionnaire</field>
164+
<field type="TextField" name="variables">$positions: Nomination positions</field>
165+
<field to="name.dbtemplatetypename" name="type" rel="ManyToOneRel">plain</field>
166+
<field type="TextField" name="content">
167+
Thank you for accepting your nomination for the position of $position.
168+
169+
Please remember to complete and return the questionnaire for this position at your earliest opportunity.
170+
The questionaire is repeated below for your convenience.
171+
172+
--------</field>
173+
<field to="group.group" name="group" rel="ManyToOneRel"><None></None></field>
174+
</object>
161175
</django-objects>
Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,35 @@
11
import datetime
22
import syslog
33
from optparse import make_option
4+
from django.core.management.base import BaseCommand
5+
from ietf.nomcom.models import NomCom, NomineePosition
6+
from nomcom.utils import send_accept_reminder_to_nominee,send_questionnaire_reminder_to_nominee
47

5-
from django.core.management.base import BaseCommand, CommandError
6-
7-
from ietf.nomcom.models import Nominee, NomCom
8-
from nomcom.utils import send_reminder_to_nominee
8+
def log(message):
9+
syslog.syslog(message)
910

11+
def is_time_to_send(nomcom,send_date,nomination_date):
12+
if nomcom.reminder_interval:
13+
days_passed = (send_date - nomination_date).days
14+
return days_passed > 0 and days_passed % nomcom.reminder_interval == 0
15+
else:
16+
return bool(nomcom.reminderdates_set.filter(date=send_date))
1017

1118
class Command(BaseCommand):
12-
help = (u"Send reminders to nominees")
13-
option_list = BaseCommand.option_list + (
14-
make_option('--nomcom-year', dest='year', help='NomCom year'),)
19+
help = (u"Send acceptance and questionnaire reminders to nominees")
1520

1621
def handle(self, *args, **options):
17-
year = options.get('year', None)
18-
help_message = 'Usage: send_reminders --nomcom-year <nomcom-year>'
19-
20-
if not year:
21-
raise CommandError(help_message)
22-
23-
try:
24-
nomcom = NomCom.objects.get(group__acronym__icontains=year,
25-
group__state__slug='active')
26-
except NomCom.DoesNotExist:
27-
raise CommandError("NomCom %s does not exist or it isn't active" % year)
28-
29-
today = datetime.date.today()
30-
31-
if nomcom.reminder_interval:
32-
nominees = Nominee.objects.get_by_nomcom(nomcom).not_duplicated().filter(nomineeposition__state='pending').distinct()
33-
for nominee in nominees:
34-
for nominee_position in nominee.nomineeposition_set.all():
35-
nomination_date = nominee_position.time.date()
36-
if not (today - nomination_date).days <= 0:
37-
if (today - nomination_date).days % nomcom.reminder_interval == 0:
38-
send_reminder_to_nominee(nominee_position)
39-
syslog.syslog(u"Sent reminder to %s" % nominee_position.nominee.email.address)
40-
print u"Sent reminder to %s" % nominee_position.nominee.email.address
41-
else:
42-
if nomcom.reminderdates_set.filter(date=today):
43-
nominees = Nominee.objects.get_by_nomcom(nomcom).not_duplicated().filter(nomineeposition__state='pending').distinct()
44-
for nominee in nominees:
45-
for nominee_position in nominee.nomineeposition_set.pending():
46-
send_reminder_to_nominee(nominee_position)
47-
syslog.syslog(u"Sent reminder to %s" % nominee_position.nominee.email.address)
48-
print u"Sent reminder (by dates) to %s" % nominee_position.nominee.email.address
22+
for nomcom in NomCom.objects.filter(group__state__slug='active'):
23+
for state in ('pending','accepted'):
24+
for nominee_position in NomineePosition.objects.filter(nominee__nomcom=nomcom,
25+
state=state,
26+
nominee__duplicated__isnull=True):
27+
if is_time_to_send(nomcom, datetime.date.today(), nominee_position.time.date()):
28+
if state=='pending':
29+
send_accept_reminder_to_nominee(nominee_position)
30+
log('Sent accept reminder to %s' % nominee_position.nominee.email.address)
31+
elif state=='accepted':
32+
send_questionnaire_reminder_to_nominee(nominee_position)
33+
log('Sent questionnaire reminder to %s' % nominee_position.nominee.email.address)
34+
else:
35+
pass

0 commit comments

Comments
 (0)