initial implementation.
To Do: Add unsubscribe/subscribe functionality for participants
This commit is contained in:
@@ -2422,6 +2422,8 @@ class VirtualRaceResult(models.Model):
|
|||||||
verbose_name='Gender')
|
verbose_name='Gender')
|
||||||
|
|
||||||
age = models.IntegerField(null=True)
|
age = models.IntegerField(null=True)
|
||||||
|
emailnotifications = models.BooleanField(default=True,
|
||||||
|
verbose_name = 'Receive race notifications by email')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
rr = Rower.objects.get(id=self.userid)
|
rr = Rower.objects.get(id=self.userid)
|
||||||
@@ -2472,6 +2474,8 @@ class IndoorVirtualRaceResult(models.Model):
|
|||||||
verbose_name='Gender')
|
verbose_name='Gender')
|
||||||
|
|
||||||
age = models.IntegerField(null=True)
|
age = models.IntegerField(null=True)
|
||||||
|
emailnotifications = models.BooleanField(default=True,
|
||||||
|
verbose_name = 'Receive race notifications by email')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
rr = Rower.objects.get(id=self.userid)
|
rr = Rower.objects.get(id=self.userid)
|
||||||
|
|||||||
@@ -729,10 +729,11 @@ def race_can_submit(r,race):
|
|||||||
if is_complete == False:
|
if is_complete == False:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
print 'pop'
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def race_can_resubmit(r,race):
|
def race_can_resubmit(r,race):
|
||||||
|
|||||||
@@ -740,6 +740,64 @@ def handle_updatedps(useremail, workoutids, debug=False,**kwargs):
|
|||||||
|
|
||||||
# send email when a breakthrough workout is uploaded
|
# send email when a breakthrough workout is uploaded
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_raceregistration(
|
||||||
|
useremail, username, registeredname, racename, raceid, **kwargs):
|
||||||
|
|
||||||
|
if 'debug' in kwargs:
|
||||||
|
debug = kwargs['debug']
|
||||||
|
else:
|
||||||
|
debug = True
|
||||||
|
|
||||||
|
subject = "A new competitor has registered for virtual race {n}".format(
|
||||||
|
n = racename
|
||||||
|
)
|
||||||
|
|
||||||
|
from_email = 'Rowsandall <info@rowsandall.com>'
|
||||||
|
|
||||||
|
d = {
|
||||||
|
'username':username,
|
||||||
|
'registeredname':registeredname,
|
||||||
|
'racename':racename,
|
||||||
|
'raceid':raceid,
|
||||||
|
}
|
||||||
|
|
||||||
|
res = send_template_email(from_email,[useremail],
|
||||||
|
subject,
|
||||||
|
'raceregisteredemail.html',
|
||||||
|
d,**kwargs)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_racesubmission(
|
||||||
|
useremail, username, registeredname, racename, raceid, **kwargs):
|
||||||
|
|
||||||
|
if 'debug' in kwargs:
|
||||||
|
debug = kwargs['debug']
|
||||||
|
else:
|
||||||
|
debug = True
|
||||||
|
|
||||||
|
subject = "A new result has been submitted for virtual race {n}".format(
|
||||||
|
n = racename
|
||||||
|
)
|
||||||
|
|
||||||
|
from_email = 'Rowsandall <info@rowsandall.com>'
|
||||||
|
|
||||||
|
d = {
|
||||||
|
'username':username,
|
||||||
|
'registeredname':registeredname,
|
||||||
|
'racename':racename,
|
||||||
|
'raceid':raceid,
|
||||||
|
}
|
||||||
|
|
||||||
|
res = send_template_email(from_email,[useremail],
|
||||||
|
subject,
|
||||||
|
'racesubmissionemail.html',
|
||||||
|
d,**kwargs)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
@app.task
|
@app.task
|
||||||
def handle_send_disqualification_email(
|
def handle_send_disqualification_email(
|
||||||
useremail,username,reason,message, racename, **kwargs):
|
useremail,username,reason,message, racename, **kwargs):
|
||||||
|
|||||||
19
rowers/templates/raceregisteredemail.html
Normal file
19
rowers/templates/raceregisteredemail.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{% extends "emailbase.html" %}
|
||||||
|
{% block body %}
|
||||||
|
<p>Dear <strong>{{ username }}</strong>,</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A new competitor has registered for the race {{ racename }}: {{ registeredname }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You can check race participants and results on the race page on Rowsandall:
|
||||||
|
<a href="https://rowsandall.com/rowers/virtualevent/{{ raceid }}">{{ racename }}</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Best Regards, the Rowsandall Team
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
19
rowers/templates/racesubmissionemail.html
Normal file
19
rowers/templates/racesubmissionemail.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{% extends "emailbase.html" %}
|
||||||
|
{% block body %}
|
||||||
|
<p>Dear <strong>{{ username }}</strong>,</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
One of your competitors, {{ registeredname }}, has submitted a result for {{ racename }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Check out the results on the race page!
|
||||||
|
<a href="https://rowsandall.com/rowers/virtualevent/{{ raceid }}">{{ racename }}</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Best Regards, the Rowsandall Team
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
@@ -39,8 +39,12 @@
|
|||||||
<p>
|
<p>
|
||||||
<a class="twitter-share-button"
|
<a class="twitter-share-button"
|
||||||
href="https://twitter.com/intent/tweet"
|
href="https://twitter.com/intent/tweet"
|
||||||
data-url="{{ request.build_absolute_uri }}"
|
data-url="{{ request.build_absolute_uri }}"
|
||||||
data-text="@rowsandall #rowingdata Participate in Indoor Rowing virtual race '{{ race.name }}'">Tweet</a>
|
{% if race.sessiontype == 'race' %}
|
||||||
|
data-text="@rowsandall #rowingdata Participate in virtual race '{{ race.name }}'">Tweet</a>
|
||||||
|
{% else %}
|
||||||
|
data-text="@rowsandall #rowingdata Participate in Indoor Rowing virtual race '{{ race.name }}'">Tweet</a>
|
||||||
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -168,6 +168,8 @@ from rowers.tasks import (
|
|||||||
handle_update_empower,
|
handle_update_empower,
|
||||||
handle_sendemailics,
|
handle_sendemailics,
|
||||||
handle_sendemail_userdeleted,
|
handle_sendemail_userdeleted,
|
||||||
|
handle_sendemail_raceregistration,
|
||||||
|
handle_sendemail_racesubmission,
|
||||||
)
|
)
|
||||||
|
|
||||||
from scipy.signal import savgol_filter
|
from scipy.signal import savgol_filter
|
||||||
@@ -16526,6 +16528,22 @@ def virtualevent_register_view(request,id=0):
|
|||||||
|
|
||||||
add_rower_race(r,race)
|
add_rower_race(r,race)
|
||||||
|
|
||||||
|
otherrecords = IndoorVirtualRaceResult.objects.filter(
|
||||||
|
race = race).exclude(userid = r.id)
|
||||||
|
|
||||||
|
for otherrecord in otherrecords:
|
||||||
|
otheruser = Rower.objects.get(id=otherrecord.userid)
|
||||||
|
othername = otheruser.user.first_name+' '+otheruser.user.last_name
|
||||||
|
registeredname = r.user.first_name+' '+r.user.last_name
|
||||||
|
if otherrecord.emailnotifications:
|
||||||
|
job = myqueue(
|
||||||
|
queue,
|
||||||
|
handle_sendemail_raceregistration,
|
||||||
|
otheruser.user.email, othername,
|
||||||
|
registeredname,
|
||||||
|
race.name,
|
||||||
|
race.id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
messages.info(
|
messages.info(
|
||||||
@@ -16633,6 +16651,22 @@ def indoorvirtualevent_register_view(request,id=0):
|
|||||||
|
|
||||||
add_rower_race(r,race)
|
add_rower_race(r,race)
|
||||||
|
|
||||||
|
otherrecords = IndoorVirtualRaceResult.objects.filter(
|
||||||
|
race = race).exclude(userid = r.id)
|
||||||
|
|
||||||
|
for otherrecord in otherrecords:
|
||||||
|
otheruser = Rower.objects.get(id=otherrecord.userid)
|
||||||
|
othername = otheruser.user.first_name+' '+otheruser.user.last_name
|
||||||
|
registeredname = r.user.first_name+' '+r.user.last_name
|
||||||
|
if otherrecord.emailnotifications:
|
||||||
|
job = myqueue(
|
||||||
|
queue,
|
||||||
|
handle_sendemail_raceregistration,
|
||||||
|
otheruser.user.email, othername,
|
||||||
|
registeredname,
|
||||||
|
race.name,
|
||||||
|
race.id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
messages.info(
|
messages.info(
|
||||||
@@ -17142,6 +17176,7 @@ def virtualevent_submit_result_view(request,id=0):
|
|||||||
race=race
|
race=race
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
entrychoices = []
|
entrychoices = []
|
||||||
|
|
||||||
for record in records:
|
for record in records:
|
||||||
@@ -17234,6 +17269,25 @@ def virtualevent_submit_result_view(request,id=0):
|
|||||||
request.session['async_tasks'] = [(jobid,'submit_race')]
|
request.session['async_tasks'] = [(jobid,'submit_race')]
|
||||||
|
|
||||||
messages.info(request,"We are evaluating your result. The page will reload when we're done. Your result will show up if you adhered to the course")
|
messages.info(request,"We are evaluating your result. The page will reload when we're done. Your result will show up if you adhered to the course")
|
||||||
|
|
||||||
|
if result:
|
||||||
|
otherrecords = resultobj.objects.filter(
|
||||||
|
race = race).exclude(userid = r.id)
|
||||||
|
|
||||||
|
for otherrecord in otherrecords:
|
||||||
|
otheruser = Rower.objects.get(id=otherrecord.userid)
|
||||||
|
othername = otheruser.user.first_name+' '+otheruser.user.last_name
|
||||||
|
registeredname = r.user.first_name+' '+r.user.last_name
|
||||||
|
if otherrecord.emailnotifications:
|
||||||
|
job = myqueue(
|
||||||
|
queue,
|
||||||
|
handle_sendemail_racesubmission,
|
||||||
|
otheruser.user.email, othername,
|
||||||
|
registeredname,
|
||||||
|
race.name,
|
||||||
|
race.id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# redirect to race page
|
# redirect to race page
|
||||||
url = reverse(virtualevent_view,
|
url = reverse(virtualevent_view,
|
||||||
|
|||||||
Reference in New Issue
Block a user