def test_accept_deadline_offset(self): # 10 days in the future self.event.prize_accept_deadline_delta = 10 # TODO: it should not take this much set-up to draw a single donor to a single prize amount = Decimal('50.0') targetPrize = randgen.generate_prize( self.rand, event=self.event, sumDonations=False, randomDraw=False, minAmount=amount, maxAmount=amount, maxwinners=1) targetPrize.save() winner = randgen.generate_donor(self.rand) winner.save() winningDonation = randgen.generate_donation( self.rand, donor=winner, minAmount=amount, maxAmount=amount, event=self.event) winningDonation.save() self.assertEqual(1, len(targetPrize.eligible_donors())) self.assertEqual(winner.id, targetPrize.eligible_donors()[0]['donor']) self.assertEqual( 0, len(prizeutil.get_past_due_prize_winners(self.event))) currentDate = datetime.date.today() result, status = prizeutil.draw_prize(targetPrize) prizeWin = models.PrizeWinner.objects.get(prize=targetPrize) self.assertEqual(prizeWin.accept_deadline_date(), currentDate + datetime.timedelta(days=self.event.prize_accept_deadline_delta)) prizeWin.acceptdeadline = datetime.datetime.utcnow().replace( tzinfo=pytz.utc) - datetime.timedelta(days=2) prizeWin.save() self.assertEqual(0, len(targetPrize.eligible_donors())) pastDue = prizeutil.get_past_due_prize_winners(self.event) self.assertEqual( 1, len(prizeutil.get_past_due_prize_winners(self.event))) self.assertEqual(prizeWin, pastDue[0])
def test_accept_deadline_offset(self): # 10 days in the future self.event.prize_accept_deadline_delta = 10 # TODO: it should not take this much set-up to draw a single donor to a single prize amount = Decimal('50.0') targetPrize = randgen.generate_prize(self.rand, event=self.event, sumDonations=False, randomDraw=False, minAmount=amount, maxAmount=amount, maxwinners=1) targetPrize.save() winner = randgen.generate_donor(self.rand) winner.save() winningDonation = randgen.generate_donation(self.rand, donor=winner, minAmount=amount, maxAmount=amount, event=self.event) winningDonation.save() self.assertEqual(1, len(targetPrize.eligible_donors())) self.assertEqual(winner.id, targetPrize.eligible_donors()[0]['donor']) self.assertEqual(0, len(prizeutil.get_past_due_prize_winners(self.event))) currentDate = datetime.date.today() result, status = prizeutil.draw_prize(targetPrize) prizeWin = models.PrizeWinner.objects.get(prize=targetPrize) self.assertEqual( prizeWin.accept_deadline_date(), currentDate + datetime.timedelta(days=self.event.prize_accept_deadline_delta)) prizeWin.acceptdeadline = datetime.datetime.utcnow().replace( tzinfo=pytz.utc) - datetime.timedelta(days=2) prizeWin.save() self.assertEqual(0, len(targetPrize.eligible_donors())) pastDue = prizeutil.get_past_due_prize_winners(self.event) self.assertEqual(1, len(prizeutil.get_past_due_prize_winners(self.event))) self.assertEqual(prizeWin, pastDue[0])
def handle(self, *args, **options): super(Command,self).handle(*args, **options) event = options['event'] dryRun = options['dry_run'] pastDueWinners = prizeutil.get_past_due_prize_winners(event) if not pastDueWinners.exists(): self.message("There are no past-due winners.", 2) elif options['list']: for prizeWinner in pastDueWinners: self.message("Winner #{0} (due {1})".format(prizeWinner.id, prizeWinner.acceptdeadline)) elif options['close']: prizeutil.close_past_due_prize_winners(pastDueWinners, verbosity=self.verbosity, dry_run=dryRun) else: self.message("Invalid option.")
def handle(self, *args, **options): super(Command, self).handle(*args, **options) event = options['event'] dryRun = options['dry_run'] pastDueWinners = prizeutil.get_past_due_prize_winners(event) if not pastDueWinners.exists(): self.message('There are no past-due winners.', 2) elif options['list']: for prizeWinner in pastDueWinners: self.message('Winner #{0} (due {1})'.format( prizeWinner.id, prizeWinner.acceptdeadline)) elif options['close']: prizeutil.close_past_due_prize_winners(pastDueWinners, verbosity=self.verbosity, dry_run=dryRun) else: self.message('Invalid option.')