def testAutoMail(self): donors = models.Donor.objects.all() prizes = models.Prize.objects.all() acceptCount = 0 denyCount = 0 pendingCount = 0 donorPrizes = {} for donor in donors: donorPrizes[donor.id] = ([], []) if donor.id % 2 == 0: donor.alias = None donor.save() for prize in prizes: donor = donors[self.rand.randrange(self.numDonors)] prize.provided = donor.alias prize.provideremail = donor.email pickVal = self.rand.randrange(3) if pickVal == 0: prize.state = "ACCEPTED" acceptCount += 1 donorPrizes[donor.id][0].append(prize) elif pickVal == 1: prize.state = "DENIED" denyCount += 1 donorPrizes[donor.id][1].append(prize) else: prize.state = "PENDING" pendingCount += 1 prize.save() processedPrizes = prizemail.prizes_with_submission_email_pending( self.event) self.assertEqual(acceptCount + denyCount, processedPrizes.count()) prizemail.automail_prize_contributors( self.event, processedPrizes, self.templateEmail, sender='*****@*****.**') prizes = models.Prize.objects.all() for prize in prizes: if prize.state == "PENDING": self.assertFalse(prize.acceptemailsent) else: self.assertTrue(prize.acceptemailsent) for donor in donors: acceptedPrizes, deniedPrizes = donorPrizes[donor.id] donorMail = post_office.models.Email.objects.filter(to=donor.email) if len(acceptedPrizes) == 0 and len(deniedPrizes) == 0: self.assertEqual(0, donorMail.count()) else: self.assertEqual(1, donorMail.count()) eventId, name, acceptedIds, deniedIds = self._parseMail(donorMail[ 0]) self.assertEqual(self.event.id, eventId) if donor.alias == None: self.assertEqual(donor.email, name) else: self.assertEqual(donor.alias, name) self.assertEqual(len(acceptedPrizes), len(acceptedIds)) self.assertEqual(len(deniedPrizes), len(deniedIds)) for prize in acceptedPrizes: self.assertTrue(prize.id in acceptedIds) for prize in deniedPrizes: self.assertTrue(prize.id in deniedIds)
def testAutoMail(self): prizeContributors = [] for i in range(0, 10): prizeContributors.append(AuthUser.objects.create( username='******'+str(i), email='u'+str(i)+'@email.com', is_active=True)) prizes = models.Prize.objects.all() acceptCount = 0 denyCount = 0 pendingCount = 0 contributorPrizes = {} for contributor in prizeContributors: contributorPrizes[contributor] = ([], []) for prize in prizes: prize.handler = self.rand.choice(prizeContributors) pickVal = self.rand.randrange(3) if pickVal == 0: prize.state = "ACCEPTED" acceptCount += 1 contributorPrizes[prize.handler][0].append(prize) elif pickVal == 1: prize.state = "DENIED" denyCount += 1 contributorPrizes[prize.handler][1].append(prize) else: prize.state = "PENDING" pendingCount += 1 prize.save() pendingPrizes = reduce( lambda x, y: x + y[0] + y[1], contributorPrizes.values(), []) self.assertItemsEqual( prizemail.prizes_with_submission_email_pending(self.event), pendingPrizes) prizemail.automail_prize_contributors( self.event, pendingPrizes, self.templateEmail, sender='*****@*****.**') for prize in models.Prize.objects.all(): if prize.state == "PENDING": self.assertFalse(prize.acceptemailsent) else: self.assertTrue(prize.acceptemailsent) for contributor in prizeContributors: acceptedPrizes, deniedPrizes = contributorPrizes[contributor] contributorMail = post_office.models.Email.objects.filter( to=contributor.email) if len(acceptedPrizes) == 0 and len(deniedPrizes) == 0: self.assertEqual(0, contributorMail.count()) else: self.assertEqual(1, contributorMail.count()) eventId, handlerId, acceptedIds, deniedIds = self._parseMail( contributorMail[0]) self.assertEqual(self.event.id, eventId) self.assertEqual(contributor.id, handlerId) self.assertEqual(len(acceptedPrizes), len(acceptedIds)) self.assertEqual(len(deniedPrizes), len(deniedIds)) for prize in acceptedPrizes: self.assertTrue(prize.id in acceptedIds) for prize in deniedPrizes: self.assertTrue(prize.id in deniedIds)
def handle(self, *args, **options): event = viewutil.get_event(options['event']) prizes = prizemail.prizes_with_submission_email_pending(event) emailTemplate = options['template'] or event.prizecontributoremailtemplate if emailTemplate == None: print("No default prize accept/deny email template specified on event {0}, cannot send e-mails.".format(event.short)) else: prizemail.automail_prize_contributors(event, prizes, emailTemplate)
def testAutoMail(self): prizeContributors = [] for i in range(0,10): prizeContributors.append(AuthUser.objects.create(username='******'+str(i),email='u'+str(i)+'@email.com',is_active=True)) prizes = models.Prize.objects.all() acceptCount = 0 denyCount = 0 pendingCount = 0 contributorPrizes = {} for contributor in prizeContributors: contributorPrizes[contributor] = ([], []) for prize in prizes: prize.handler = self.rand.choice(prizeContributors) pickVal = self.rand.randrange(3) if pickVal == 0: prize.state = "ACCEPTED" acceptCount += 1 contributorPrizes[prize.handler][0].append(prize) elif pickVal == 1: prize.state = "DENIED" denyCount += 1 contributorPrizes[prize.handler][1].append(prize) else: prize.state = "PENDING" pendingCount += 1 prize.save() pendingPrizes = reduce(lambda x,y: x + y[0] + y[1], contributorPrizes.values(), []) self.assertItemsEqual(prizemail.prizes_with_submission_email_pending(self.event), pendingPrizes) prizemail.automail_prize_contributors( self.event, pendingPrizes, self.templateEmail, sender='*****@*****.**') for prize in models.Prize.objects.all(): if prize.state == "PENDING": self.assertFalse(prize.acceptemailsent) else: self.assertTrue(prize.acceptemailsent) for contributor in prizeContributors: acceptedPrizes, deniedPrizes = contributorPrizes[contributor] contributorMail = post_office.models.Email.objects.filter(to=contributor.email) if len(acceptedPrizes) == 0 and len(deniedPrizes) == 0: self.assertEqual(0, contributorMail.count()) else: self.assertEqual(1, contributorMail.count()) eventId, handlerId, acceptedIds, deniedIds = self._parseMail(contributorMail[0]) self.assertEqual(self.event.id, eventId) self.assertEqual(contributor.id, handlerId) self.assertEqual(len(acceptedPrizes), len(acceptedIds)) self.assertEqual(len(deniedPrizes), len(deniedIds)) for prize in acceptedPrizes: self.assertTrue(prize.id in acceptedIds) for prize in deniedPrizes: self.assertTrue(prize.id in deniedIds)
def handle(self, *args, **options): super(Command, self).handle(*args, **options) event = viewutil.get_event(options['event']) prizes = prizemail.prizes_with_submission_email_pending(event) emailTemplate = options['template'] or event.prizecontributoremailtemplate dryRun = options['dry_run'] if emailTemplate == None: self.message("No default prize accept/deny email template specified on event {0}, cannot send e-mails.".format(event.short)) else: prizemail.automail_prize_contributors(event, prizes, emailTemplate, verbosity=self.verbosity, dry_run=dryRun)
def automail_prize_contributors(request): currentEvent = viewutil.get_selected_event(request) if currentEvent == None: return HttpResponse("Please select an event first") prizes = prizemail.prizes_with_submission_email_pending(currentEvent) if request.method == 'POST': form = forms.AutomailPrizeContributorsForm(prizes=prizes, data=request.POST) if form.is_valid(): prizemail.automail_prize_contributors(currentEvent, form.cleaned_data['prizes'], form.cleaned_data['emailtemplate'], sender=form.cleaned_data['fromaddress'], replyTo=form.cleaned_data['replyaddress']) viewutil.tracker_log(u'prize', u'Mailed prize contributors', event=currentEvent, user=request.user) return render(request, 'admin/automail_prize_contributors_post.html', { 'prizes': form.cleaned_data['prizes'] }) else: form = forms.AutomailPrizeContributorsForm(prizes=prizes) return render(request, 'admin/automail_prize_contributors.html', { 'form': form, 'currentEvent': currentEvent })
def automail_prize_contributors(request, event=None): if not hasattr(settings, 'EMAIL_HOST'): return HttpResponse('Email not enabled on this server.') event = viewutil.get_event(event) if not event.id: return render( request, 'tracker/eventlist.html', { 'events': models.Event.objects.all(), 'pattern': 'admin:automail_prize_contributors', 'subheading': 'Mail Prize Contributors', }, ) prizes = prizemail.prizes_with_submission_email_pending(event) if request.method == 'POST': form = forms.AutomailPrizeContributorsForm(prizes=prizes, data=request.POST) if form.is_valid(): prizemail.automail_prize_contributors( event, form.cleaned_data['prizes'], form.cleaned_data['emailtemplate'], sender=form.cleaned_data['fromaddress'], replyTo=form.cleaned_data['replyaddress'], ) viewutil.tracker_log( 'prize', 'Mailed prize contributors', event=event, user=request.user, ) return render( request, 'admin/tracker/automail_prize_contributors_post.html', {'prizes': form.cleaned_data['prizes']}, ) else: form = forms.AutomailPrizeContributorsForm(prizes=prizes) return render( request, 'admin/tracker/automail_prize_contributors.html', { 'form': form, 'event': event }, )
def handle(self, *args, **options): super(Command, self).handle(*args, **options) event = viewutil.get_event(options["event"]) prizes = prizemail.prizes_with_submission_email_pending(event) emailTemplate = options["template"] or event.prizecontributoremailtemplate dryRun = options["dry_run"] if emailTemplate == None: self.message( "No default prize accept/deny email template specified on event {0}, cannot send e-mails.".format( event.short ) ) else: prizemail.automail_prize_contributors( event, prizes, emailTemplate, verbosity=self.verbosity, dry_run=dryRun )
def automail_prize_contributors(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') prizes = prizemail.prizes_with_submission_email_pending(currentEvent) if request.method == 'POST': form = forms.AutomailPrizeContributorsForm(prizes=prizes, data=request.POST) if form.is_valid(): prizemail.automail_prize_contributors( currentEvent, form.cleaned_data['prizes'], form.cleaned_data['emailtemplate'], sender=form.cleaned_data['fromaddress'], replyTo=form.cleaned_data['replyaddress'], ) viewutil.tracker_log( 'prize', 'Mailed prize contributors', event=currentEvent, user=request.user, ) return render( request, 'admin/automail_prize_contributors_post.html', {'prizes': form.cleaned_data['prizes']}, ) else: form = forms.AutomailPrizeContributorsForm(prizes=prizes) return render( request, 'admin/automail_prize_contributors.html', { 'form': form, 'currentEvent': currentEvent }, )