This repository has been archived by the owner on Jan 5, 2019. It is now read-only.
forked from GamesDoneQuick/donation-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
prizemail.py
83 lines (77 loc) · 3.25 KB
/
prizemail.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import django.core.mail as mail
from django.db.models import Q
from models import *
import tracker.filters as filters
import tracker.viewutil as viewutil
import smtplib
import settings
import post_office.mail
from collections import Counter
def prize_winners_with_email_pending(event):
return PrizeWinner.objects.filter(prize__event=event, pendingcount__gt=0, emailsent=False)
def automail_prize_winners(event, prizeWinners, mailTemplate, sender=None, replyTo=None):
if not sender:
sender = viewutil.get_default_email_host_user()
if not replyTo:
replyTo = viewutil.get_default_email_host_user()
winnerDict = {}
for prizeWinner in prizeWinners:
if prizeWinner.winner.id in winnerDict.keys():
winList = winnerDict[prizeWinner.winner.id]
else:
winList = []
winnerDict[prizeWinner.winner.id] = winList
winList.append(prizeWinner)
for winnerk, prizesWon in winnerDict.iteritems():
winner = prizesWon[0].winner
prizesList = []
for prizeWon in prizesWon:
prizesList.append(prizeWon.prize)
formatContext = {
'event': event,
'winner': winner,
'prizes': prizesList,
'prizeWins': prizesWon, # this includes the full prizewinner object, which has the list of pending wins. 'prizes' is kept in the dict for backwards compatibility
'multi': len(prizesList) > 1,
'replyaddress': replyTo,
}
post_office.mail.send(recipients=[winner.email], sender=sender, template=mailTemplate.name, context=formatContext, headers={'Reply-to': replyTo})
for prizeWon in prizesWon:
prizeWon.emailsent = True
prizeWon.save()
def estimate_contributor_name(prizes):
nonEmptyNames = list(sorted(filter(lambda prize: prize.provided, prizes)))
if len(nonEmptyNames) == 0:
return None
counter = Counter()
for prize in prizes:
counter[prize.provided] += 1
return list(reversed(sorted(counter.items(), key=lambda x: x[1])))[0][0]
def prizes_with_submission_email_pending(event):
return Prize.objects.filter(Q(state='ACCEPTED') | Q(state='DENIED'), acceptemailsent=False, event=event)
def automail_prize_contributors(event, prizes, mailTemplate, sender=None, replyTo=None):
if not sender:
sender = viewutil.get_default_email_host_user()
if not replyTo:
replyTo = viewutil.get_default_email_host_user()
providerDict = {}
for prize in prizes:
if prize.provideremail in providerDict.keys():
prizeList = providerDict[prize.provideremail]
else:
prizeList = []
providerDict[prize.provideremail] = prizeList
prizeList.append(prize)
for providerEmail, prizeList in providerDict.iteritems():
denied = list(filter(lambda prize: prize.state == 'DENIED', prizeList))
estimatedName = estimate_contributor_name(prizeList)
formatContext = {
'event': event,
'contributorName': estimatedName if estimatedName != None else providerEmail,
'acceptedPrizes': list(filter(lambda prize: prize.state == 'ACCEPTED', prizeList)),
'deniedPrizes': list(filter(lambda prize: prize.state == 'DENIED', prizeList)),
}
post_office.mail.send(recipients=[providerEmail], sender=sender, template=mailTemplate.name, context=formatContext, headers={'Reply-to': replyTo})
for prize in prizeList:
prize.acceptemailsent = True
prize.save()