Merge branch 'release/v9.27'
This commit is contained in:
+7
-18
@@ -706,6 +706,7 @@ class Rower(models.Model):
|
|||||||
clubsize = models.IntegerField(default=0)
|
clubsize = models.IntegerField(default=0)
|
||||||
protrialexpires = models.DateField(default=datetime.date(1970,1,1))
|
protrialexpires = models.DateField(default=datetime.date(1970,1,1))
|
||||||
plantrialexpires = models.DateField(default=datetime.date(1970,1,1))
|
plantrialexpires = models.DateField(default=datetime.date(1970,1,1))
|
||||||
|
offercoaching = models.BooleanField(default=False, verbose_name='Offer Remote Coaching')
|
||||||
|
|
||||||
|
|
||||||
# Privacy Data
|
# Privacy Data
|
||||||
@@ -3186,7 +3187,8 @@ class AccountRowerForm(ModelForm):
|
|||||||
'getemailnotifications',
|
'getemailnotifications',
|
||||||
'getimportantemails',
|
'getimportantemails',
|
||||||
'defaulttimezone','showfavoritechartnotes',
|
'defaulttimezone','showfavoritechartnotes',
|
||||||
'defaultlandingpage']
|
'defaultlandingpage',
|
||||||
|
'offercoaching']
|
||||||
|
|
||||||
widgets = {
|
widgets = {
|
||||||
'birthdate': SelectDateWidget(
|
'birthdate': SelectDateWidget(
|
||||||
@@ -3194,24 +3196,11 @@ class AccountRowerForm(ModelForm):
|
|||||||
timezone.now().year-100,timezone.now().year-10)),
|
timezone.now().year-100,timezone.now().year-10)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(AccountRowerForm, self).__init__(*args, **kwargs)
|
||||||
|
if self.instance.rowerplan != 'coach':
|
||||||
|
self.fields.pop('offercoaching')
|
||||||
|
|
||||||
def clean_email(self):
|
|
||||||
email = self.cleaned_data.get('email')
|
|
||||||
|
|
||||||
try:
|
|
||||||
validate_email(email)
|
|
||||||
except ValidationError:
|
|
||||||
raise forms.ValidationError(
|
|
||||||
'Please enter a valid email address')
|
|
||||||
|
|
||||||
try:
|
|
||||||
match = User.objects.get(email__iexact=email)
|
|
||||||
if self.instance.user == match:
|
|
||||||
return email
|
|
||||||
except User.DoesNotExist:
|
|
||||||
return email
|
|
||||||
|
|
||||||
raise forms.ValidationError('This email address is not allowed')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+92
-2
@@ -1725,6 +1725,98 @@ def handle_sendemail_coachrequest(email,name,code,coachname,
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_coachoffer_rejected(coachemail,coachname,name,
|
||||||
|
debug=False,**kwargs):
|
||||||
|
|
||||||
|
fullemail = coachemail
|
||||||
|
subject = '{n} has rejected your offer to be his coach on rowsandall.com'.format(n=name)
|
||||||
|
from_email = 'Rowsandall <info@rowsandall.com>'
|
||||||
|
siteurl = SITE_URL
|
||||||
|
if debug:
|
||||||
|
siteurl = SITE_URL_DEV
|
||||||
|
|
||||||
|
d = {
|
||||||
|
'name':name,
|
||||||
|
'coach':coachname,
|
||||||
|
'siteurl':siteurl,
|
||||||
|
}
|
||||||
|
|
||||||
|
res = send_template_email(from_email,[fullemail],
|
||||||
|
subject,'coachofferrejectedemail.html',
|
||||||
|
d,
|
||||||
|
**kwargs)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_coachrequest_rejected(email,coachname,name,
|
||||||
|
debug=False,**kwargs):
|
||||||
|
|
||||||
|
fullemail = email
|
||||||
|
subject = '{n} has rejected your coaching request on rowsandall.com'.format(n=coachname)
|
||||||
|
from_email = 'Rowsandall <info@rowsandall.com>'
|
||||||
|
siteurl = SITE_URL
|
||||||
|
if debug:
|
||||||
|
siteurl = SITE_URL_DEV
|
||||||
|
|
||||||
|
d = {
|
||||||
|
'name':name,
|
||||||
|
'coach':coachname,
|
||||||
|
'siteurl':siteurl,
|
||||||
|
}
|
||||||
|
|
||||||
|
res = send_template_email(from_email,[fullemail],
|
||||||
|
subject,'coachrequestrejectedemail.html',
|
||||||
|
d,
|
||||||
|
**kwargs)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_coachrequest_accepted(email,coachname,name,
|
||||||
|
debug=False,**kwargs):
|
||||||
|
|
||||||
|
fullemail = email
|
||||||
|
subject = '{n} has accepted your coaching request on rowsandall.com'.format(n=coachname)
|
||||||
|
from_email = 'Rowsandall <info@rowsandall.com>'
|
||||||
|
siteurl = SITE_URL
|
||||||
|
if debug:
|
||||||
|
siteurl = SITE_URL_DEV
|
||||||
|
|
||||||
|
d = {
|
||||||
|
'name':name,
|
||||||
|
'coach':coachname,
|
||||||
|
'siteurl':siteurl,
|
||||||
|
}
|
||||||
|
|
||||||
|
res = send_template_email(from_email,[fullemail],
|
||||||
|
subject,'coachrequestacceptedmail.html',
|
||||||
|
d,
|
||||||
|
**kwargs)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@app.task
|
||||||
|
def handle_sendemail_coachoffer_accepted(coachemail,coachname,name,
|
||||||
|
debug=False,**kwargs):
|
||||||
|
|
||||||
|
fullemail = coachemail
|
||||||
|
subject = '{n} has accepted your coaching offer on rowsandall.com'.format(n=name)
|
||||||
|
from_email = 'Rowsandall <info@rowsandall.com>'
|
||||||
|
siteurl = SITE_URL
|
||||||
|
if debug:
|
||||||
|
siteurl = SITE_URL_DEV
|
||||||
|
|
||||||
|
d = {
|
||||||
|
'name':name,
|
||||||
|
'coach':coachname,
|
||||||
|
'siteurl':siteurl,
|
||||||
|
}
|
||||||
|
|
||||||
|
res = send_template_email(from_email,[fullemail],
|
||||||
|
subject,'coachofferacceptedemail.html',
|
||||||
|
d,
|
||||||
|
**kwargs)
|
||||||
|
return 1
|
||||||
|
|
||||||
@app.task
|
@app.task
|
||||||
def handle_sendemail_coacheerequest(email,name,code,coachname,
|
def handle_sendemail_coacheerequest(email,name,code,coachname,
|
||||||
debug=False,**kwargs):
|
debug=False,**kwargs):
|
||||||
@@ -1743,8 +1835,6 @@ def handle_sendemail_coacheerequest(email,name,code,coachname,
|
|||||||
'siteurl':siteurl
|
'siteurl':siteurl
|
||||||
}
|
}
|
||||||
|
|
||||||
form_email = 'Rowsandall <info@rowsandall.com>'
|
|
||||||
|
|
||||||
res = send_template_email(from_email,[fullemail],
|
res = send_template_email(from_email,[fullemail],
|
||||||
subject,'coacheerequestemail.html',d,
|
subject,'coacheerequestemail.html',d,
|
||||||
**kwargs)
|
**kwargs)
|
||||||
|
|||||||
+54
-1
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
# All the Team related methods
|
# All the Team related methods
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
@@ -28,6 +29,10 @@ from rowers.tasks import (
|
|||||||
handle_sendemail_request_reject,handle_sendemail_invite_reject,
|
handle_sendemail_request_reject,handle_sendemail_invite_reject,
|
||||||
handle_sendemail_invite_accept,handle_sendemail_team_removed,
|
handle_sendemail_invite_accept,handle_sendemail_team_removed,
|
||||||
handle_sendemail_coachrequest,handle_sendemail_coacheerequest,
|
handle_sendemail_coachrequest,handle_sendemail_coacheerequest,
|
||||||
|
handle_sendemail_coachoffer_rejected,
|
||||||
|
handle_sendemail_coachoffer_accepted,
|
||||||
|
handle_sendemail_coachrequest_rejected,
|
||||||
|
handle_sendemail_coachrequest_accepted,
|
||||||
)
|
)
|
||||||
|
|
||||||
from rowers.models import ValidationError
|
from rowers.models import ValidationError
|
||||||
@@ -362,8 +367,10 @@ def reject_revoke_coach_offer(user,id):
|
|||||||
|
|
||||||
if rekwest.coach.user == user:
|
if rekwest.coach.user == user:
|
||||||
rekwest.delete()
|
rekwest.delete()
|
||||||
|
|
||||||
return (1,'Request removed')
|
return (1,'Request removed')
|
||||||
elif rekwest.user == user:
|
elif rekwest.user == user:
|
||||||
|
send_coachoffer_rejected_email(rekwest)
|
||||||
rekwest.delete()
|
rekwest.delete()
|
||||||
return (1,'Request removed')
|
return (1,'Request removed')
|
||||||
else:
|
else:
|
||||||
@@ -376,6 +383,7 @@ def reject_revoke_coach_request(user,id):
|
|||||||
return (0,'The request is invalid')
|
return (0,'The request is invalid')
|
||||||
|
|
||||||
if rekwest.coach.user == user:
|
if rekwest.coach.user == user:
|
||||||
|
send_coachrequest_rejected_email(rekwest)
|
||||||
rekwest.delete()
|
rekwest.delete()
|
||||||
return (1,'Request rejected')
|
return (1,'Request rejected')
|
||||||
elif rekwest.user == user:
|
elif rekwest.user == user:
|
||||||
@@ -622,6 +630,8 @@ def process_coachrequest_code(coach,code):
|
|||||||
result = add_coach(coach,rekwest.user.rower)
|
result = add_coach(coach,rekwest.user.rower)
|
||||||
if not result:
|
if not result:
|
||||||
return (result,"Something went wrong")
|
return (result,"Something went wrong")
|
||||||
|
else:
|
||||||
|
send_coachrequest_accepted_email(rekwest)
|
||||||
|
|
||||||
rekwest.delete()
|
rekwest.delete()
|
||||||
|
|
||||||
@@ -641,9 +651,52 @@ def process_coachoffer_code(user,code):
|
|||||||
result = add_coach(rekwest.coach,rekwest.user.rower)
|
result = add_coach(rekwest.coach,rekwest.user.rower)
|
||||||
if not result:
|
if not result:
|
||||||
return (result,"Something went wrong")
|
return (result,"Something went wrong")
|
||||||
|
else:
|
||||||
|
send_coachoffer_accepted_email(rekwest)
|
||||||
|
|
||||||
rekwest.delete()
|
rekwest.delete()
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def send_coachoffer_rejected_email(rekwest):
|
||||||
|
coachname = rekwest.coach.user.first_name + " " + rekwest.coach.user.last_name
|
||||||
|
coachemail = rekwest.coach.user.email
|
||||||
|
|
||||||
|
name = rekwest.user.first_name + " " + rekwest.user.last_name
|
||||||
|
|
||||||
|
res = myqueue(queuehigh,
|
||||||
|
handle_sendemail_coachoffer_rejected,
|
||||||
|
coachemail,coachname,name)
|
||||||
|
|
||||||
|
def send_coachrequest_rejected_email(rekwest):
|
||||||
|
coachname = rekwest.coach.user.first_name + " " + rekwest.coach.user.last_name
|
||||||
|
email = rekwest.user.email
|
||||||
|
|
||||||
|
name = rekwest.user.first_name + " " + rekwest.user.last_name
|
||||||
|
|
||||||
|
res = myqueue(queuehigh,
|
||||||
|
handle_sendemail_coachrequest_rejected,
|
||||||
|
email,coachname,name)
|
||||||
|
|
||||||
|
def send_coachrequest_accepted_email(rekwest):
|
||||||
|
coachname = rekwest.coach.user.first_name + " " + rekwest.coach.user.last_name
|
||||||
|
email = rekwest.user.email
|
||||||
|
|
||||||
|
name = rekwest.user.first_name + " " + rekwest.user.last_name
|
||||||
|
|
||||||
|
res = myqueue(queuehigh,
|
||||||
|
handle_sendemail_coachrequest_accepted,
|
||||||
|
email,coachname,name)
|
||||||
|
|
||||||
|
|
||||||
|
def send_coachoffer_accepted_email(rekwest):
|
||||||
|
coachname = rekwest.coach.user.first_name + " " + rekwest.coach.user.last_name
|
||||||
|
coachemail = rekwest.coach.user.email
|
||||||
|
|
||||||
|
name = rekwest.user.first_name + " " + rekwest.user.last_name
|
||||||
|
|
||||||
|
res = myqueue(queuehigh,
|
||||||
|
handle_sendemail_coachoffer_accepted,
|
||||||
|
coachemail,coachname,name)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{% extends "emailbase.html" %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<p>Dear <strong>{{ coach }}</strong>,</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{{ name }} has accepted your coaching offer on
|
||||||
|
rowsandall.com
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Until you remove {{ name }} from your list of athletes, {{ name }},
|
||||||
|
you
|
||||||
|
will be able to upload workouts on behalf of {{ name }}, run analysis for
|
||||||
|
and change power and heart rate zone settings for {{ name }}.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Best Regards, the Rowsandall Team
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{% extends "emailbase.html" %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<p>Dear <strong>{{ coach }}</strong>,</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{{ name }} has rejected your offer to become his coach on
|
||||||
|
rowsandall.com
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Best Regards, the Rowsandall Team
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{% extends "emailbase.html" %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<p>Dear <strong>{{ name }}</strong>,</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{{ coach }} has accepted your coaching request on
|
||||||
|
rowsandall.com
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Until you remove {{ coachname }} from your list of coaches, {{ coachname }}
|
||||||
|
will be able to upload workouts on your behalf, run analysis for you
|
||||||
|
and change your power and heart rate zone settings.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Best Regards, the Rowsandall Team
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{% extends "emailbase.html" %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<p>Dear <strong>{{ name }}</strong>,</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{{ coach }} has rejected your coaching request on
|
||||||
|
rowsandall.com
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Best Regards, the Rowsandall Team
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
BIN
Binary file not shown.
@@ -16,10 +16,16 @@ def team_view(request,id=0,userid=0):
|
|||||||
except Team.DoesNotExist:
|
except Team.DoesNotExist:
|
||||||
raise Http404("Team doesn't exist")
|
raise Http404("Team doesn't exist")
|
||||||
|
|
||||||
|
q = User.objects.filter(rower__isnull=False,rower__team__in=myteams).distinct().exclude(rower__team__name=t.name)
|
||||||
|
mygroups = [request.user.rower.mycoachgroup]
|
||||||
|
q2 = User.objects.filter(rower__isnull=False,rower__coachinggroups__in=mygroups).distinct().exclude(rower__team__name=t.name)
|
||||||
|
|
||||||
|
q = q | q2
|
||||||
|
|
||||||
if request.method == 'POST' and request.user == t.manager:
|
if request.method == 'POST' and request.user == t.manager:
|
||||||
inviteform = TeamInviteForm(request.POST)
|
inviteform = TeamInviteForm(request.POST)
|
||||||
inviteform.fields['user'].queryset = User.objects.filter(rower__isnull=False,rower__team__in=myteams).distinct().exclude(rower__team__name=t.name)
|
|
||||||
|
inviteform.fields['user'].queryset = q
|
||||||
if inviteform.is_valid():
|
if inviteform.is_valid():
|
||||||
cd = inviteform.cleaned_data
|
cd = inviteform.cleaned_data
|
||||||
newmember = cd['user']
|
newmember = cd['user']
|
||||||
@@ -37,7 +43,7 @@ def team_view(request,id=0,userid=0):
|
|||||||
|
|
||||||
elif request.user == t.manager:
|
elif request.user == t.manager:
|
||||||
inviteform = TeamInviteForm()
|
inviteform = TeamInviteForm()
|
||||||
inviteform.fields['user'].queryset = User.objects.filter(rower__isnull=False,rower__team__in=myteams).distinct().exclude(rower__team__name=t.name)
|
inviteform.fields['user'].queryset = q
|
||||||
else:
|
else:
|
||||||
inviteform = ''
|
inviteform = ''
|
||||||
|
|
||||||
@@ -186,9 +192,13 @@ def rower_teams_view(request,message='',successmessage=''):
|
|||||||
invitedcoaches = [rekwest.coach for rekwest in mycoachrequests]
|
invitedcoaches = [rekwest.coach for rekwest in mycoachrequests]
|
||||||
|
|
||||||
coaches = teams.rower_get_coaches(r)
|
coaches = teams.rower_get_coaches(r)
|
||||||
print coaches,'aap'
|
|
||||||
|
|
||||||
potentialcoaches = [t.manager for t in memberteams if t.manager not in coaches and t.manager.rower.rowerplan == 'coach']
|
potentialcoaches = [t.manager for t in memberteams if t.manager not in coaches and t.manager.rower.rowerplan == 'coach']
|
||||||
|
offercoaches = [
|
||||||
|
r.user for r in Rower.objects.filter(
|
||||||
|
offercoaching=True,rowerplan='coach').exclude(user=request.user)
|
||||||
|
]
|
||||||
|
potentialcoaches = list(set(potentialcoaches+offercoaches))
|
||||||
potentialcoaches = [c for c in potentialcoaches if c.rower not in invitedcoaches+coaches]
|
potentialcoaches = [c for c in potentialcoaches if c.rower not in invitedcoaches+coaches]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
|||||||
|
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
accountform = AccountRowerForm(request.POST)
|
accountform = AccountRowerForm(request.POST, instance=r)
|
||||||
userform = UserForm(request.POST,instance=r.user)
|
userform = UserForm(request.POST,instance=r.user)
|
||||||
|
|
||||||
if accountform.is_valid() and userform.is_valid():
|
if accountform.is_valid() and userform.is_valid():
|
||||||
@@ -190,6 +190,10 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
|||||||
last_name = ucd['last_name']
|
last_name = ucd['last_name']
|
||||||
email = ucd['email']
|
email = ucd['email']
|
||||||
sex = cd['sex']
|
sex = cd['sex']
|
||||||
|
try:
|
||||||
|
offercoaching = cd['offercoaching']
|
||||||
|
except KeyError:
|
||||||
|
offercoaching = False
|
||||||
adaptiveclass = cd['adaptiveclass']
|
adaptiveclass = cd['adaptiveclass']
|
||||||
defaultlandingpage = cd['defaultlandingpage']
|
defaultlandingpage = cd['defaultlandingpage']
|
||||||
weightcategory = cd['weightcategory']
|
weightcategory = cd['weightcategory']
|
||||||
@@ -217,6 +221,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
|||||||
r.adaptiveclass = adaptiveclass
|
r.adaptiveclass = adaptiveclass
|
||||||
r.getemailnotifications = getemailnotifications
|
r.getemailnotifications = getemailnotifications
|
||||||
r.getimportantemails = getimportantemails
|
r.getimportantemails = getimportantemails
|
||||||
|
r.offercoaching = offercoaching
|
||||||
r.defaultlandingpage = defaultlandingpage
|
r.defaultlandingpage = defaultlandingpage
|
||||||
r.showfavoritechartnotes = showfavoritechartnotes
|
r.showfavoritechartnotes = showfavoritechartnotes
|
||||||
r.sex = sex
|
r.sex = sex
|
||||||
|
|||||||
Reference in New Issue
Block a user