def handle(self, *args, **options): event = viewutil.get_event(options['event']) prizeWinners = prizemail.prize_winners_with_email_pending(event) emailTemplate = options['template'] or event.prizewinneremailtemplate if emailTemplate == None: print("No default prize winner email template specified on event {0}, cannot send e-mails.".format(event.short)) else: prizemail.automail_prize_winners(event, prizeWinners, emailTemplate)
def handle(self, *args, **options): super(Command, self).handle(*args, **options) event = options['event'] prizeWinners = prizemail.prize_winners_with_email_pending(event) emailTemplate = options['template'] or event.prizewinneremailtemplate dryRun = options['dry_run'] if emailTemplate == None: self.message("No default prize winner email template specified on event {0}, cannot send e-mails.".format(event.short)) else: prizemail.automail_prize_winners(event, prizeWinners, emailTemplate, verbosity=self.verbosity, dry_run=dryRun)
def automail_prize_winners(request): currentEvent = viewutil.get_selected_event(request) if currentEvent == None: return HttpResponse("Please select an event first") prizewinners = prizemail.prize_winners_with_email_pending(currentEvent) if request.method == 'POST': form = forms.AutomailPrizeWinnersForm(prizewinners=prizewinners, data=request.POST) if form.is_valid(): prizemail.automail_prize_winners(currentEvent, form.cleaned_data['prizewinners'], form.cleaned_data['emailtemplate'], sender=form.cleaned_data['fromaddress'], replyTo=form.cleaned_data['replyaddress']) viewutil.tracker_log(u'prize', u'Mailed prize notifications', event=currentEvent, user=request.user) return render(request, 'admin/automail_prize_winners_post.html', { 'prizewinners': form.cleaned_data['prizewinners'] }) else: form = forms.AutomailPrizeWinnersForm(prizewinners=prizewinners) return render(request, 'admin/automail_prize_winners.html', { 'form': form })
def testAutoMail(self): models.Prize.objects.update(state='ACCEPTED') donors = list(models.Donor.objects.all()) prizes = list(models.Prize.objects.all()) fullWinnerList = [] donorWins = {} for prize in prizes: if self.rand.getrandbits(1) == 0: winners = [] while len(winners) < prize.maxwinners: d = donors[self.rand.randrange(len(donors))] if d not in winners: winners.append(d) for winner in winners: fullWinnerList.append( models.PrizeWinner.objects.create( winner=winner, prize=prize, pendingcount=1 ) ) donorPrizeList = donorWins.get(winner.id, None) if donorPrizeList is None: donorPrizeList = [] donorWins[winner.id] = donorPrizeList donorPrizeList.append(prize) self.assertSetEqual( {pw.id for pw in prizemail.prize_winners_with_email_pending(self.event)}, {pw.id for pw in fullWinnerList}, ) prizemail.automail_prize_winners( self.event, fullWinnerList, self.templateEmail, sender='*****@*****.**' ) for prizeWinner in fullWinnerList: self.assertTrue(prizeWinner.emailsent) for donor in donors: wonPrizes = donorWins.get(donor.id, []) donorMail = post_office.models.Email.objects.filter(to=donor.email) if len(wonPrizes) == 0: self.assertEqual(0, donorMail.count()) else: self.assertEqual(1, donorMail.count()) eventId, winnerId, prizeIds = self._parseMail(donorMail[0]) self.assertEqual(self.event.id, eventId) self.assertEqual(donor.id, winnerId) self.assertEqual(len(wonPrizes), len(prizeIds)) for prize in wonPrizes: self.assertTrue(prize.id in prizeIds)
def automail_prize_winners(request): if not hasattr(settings, 'EMAIL_HOST'): return HttpResponse("Email not enabled on this server.") currentEvent = viewutil.get_selected_event(request) if currentEvent == None: return HttpResponse("Please select an event first") prizewinners = prizemail.prize_winners_with_email_pending(currentEvent) if request.method == 'POST': form = forms.AutomailPrizeWinnersForm(prizewinners=prizewinners, data=request.POST) if form.is_valid(): for prizeWinner in form.cleaned_data['prizewinners']: prizeWinner.acceptdeadline = form.cleaned_data['acceptdeadline'] prizeWinner.save() prizemail.automail_prize_winners(currentEvent, form.cleaned_data['prizewinners'], form.cleaned_data['emailtemplate'], sender=form.cleaned_data['fromaddress'], replyTo=form.cleaned_data['replyaddress']) viewutil.tracker_log(u'prize', u'Mailed prize winner notifications', event=currentEvent, user=request.user) return render(request, 'admin/automail_prize_winners_post.html', { 'prizewinners': form.cleaned_data['prizewinners'] }) else: form = forms.AutomailPrizeWinnersForm(prizewinners=prizewinners) return render(request, 'admin/automail_prize_winners.html', { 'form': form })
def testAutoMail(self): models.Prize.objects.update(state='ACCEPTED') donors = list(models.Donor.objects.all()) prizes = list(models.Prize.objects.all()) fullWinnerList = [] donorWins = {} for prize in prizes: if self.rand.getrandbits(1) == 0: winners = [] while len(winners) < prize.maxwinners: d = donors[self.rand.randrange(len(donors))] if d not in winners: winners.append(d) for winner in winners: fullWinnerList.append( models.PrizeWinner.objects.create(winner=winner, prize=prize, pendingcount=1)) donorPrizeList = donorWins.get(winner.id, None) if donorPrizeList == None: donorPrizeList = [] donorWins[winner.id] = donorPrizeList donorPrizeList.append(prize) self.assertItemsEqual( prizemail.prize_winners_with_email_pending(self.event), fullWinnerList) prizemail.automail_prize_winners( self.event, fullWinnerList, self.templateEmail, sender='*****@*****.**') for prizeWinner in fullWinnerList: self.assertTrue(prizeWinner.emailsent) for donor in donors: wonPrizes = donorWins.get(donor.id, []) donorMail = post_office.models.Email.objects.filter(to=donor.email) if len(wonPrizes) == 0: self.assertEqual(0, donorMail.count()) else: self.assertEqual(1, donorMail.count()) eventId, winnerId, prizeIds = self._parseMail(donorMail[0]) self.assertEqual(self.event.id, eventId) self.assertEqual(donor.id, winnerId) self.assertEqual(len(wonPrizes), len(prizeIds)) for prize in wonPrizes: self.assertTrue(prize.id in prizeIds)
def automail_prize_winners(request): if not hasattr(settings, 'EMAIL_HOST'): return HttpResponse('Email not enabled on this server.') currentEvent = viewutil.get_selected_event(request) if currentEvent is None: return HttpResponse('Please select an event first') prizewinners = prizemail.prize_winners_with_email_pending(currentEvent) if request.method == 'POST': form = forms.AutomailPrizeWinnersForm(prizewinners=prizewinners, data=request.POST) if form.is_valid(): for prizeWinner in form.cleaned_data['prizewinners']: prizeWinner.acceptdeadline = form.cleaned_data[ 'acceptdeadline'] prizeWinner.save() prizemail.automail_prize_winners( currentEvent, form.cleaned_data['prizewinners'], form.cleaned_data['emailtemplate'], sender=form.cleaned_data['fromaddress'], replyTo=form.cleaned_data['replyaddress'], ) viewutil.tracker_log( 'prize', 'Mailed prize winner notifications', event=currentEvent, user=request.user, ) return render( request, 'admin/automail_prize_winners_post.html', {'prizewinners': form.cleaned_data['prizewinners']}, ) else: form = forms.AutomailPrizeWinnersForm(prizewinners=prizewinners) return render(request, 'admin/automail_prize_winners.html', {'form': form})