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)
Example #6
0
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 })
Example #7
0
    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
            )
Example #9
0
 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
         },
     )