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)
|
||||
protrialexpires = 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
|
||||
@@ -3186,7 +3187,8 @@ class AccountRowerForm(ModelForm):
|
||||
'getemailnotifications',
|
||||
'getimportantemails',
|
||||
'defaulttimezone','showfavoritechartnotes',
|
||||
'defaultlandingpage']
|
||||
'defaultlandingpage',
|
||||
'offercoaching']
|
||||
|
||||
widgets = {
|
||||
'birthdate': SelectDateWidget(
|
||||
@@ -3194,24 +3196,11 @@ class AccountRowerForm(ModelForm):
|
||||
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
|
||||
|
||||
@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
|
||||
def handle_sendemail_coacheerequest(email,name,code,coachname,
|
||||
debug=False,**kwargs):
|
||||
@@ -1743,8 +1835,6 @@ def handle_sendemail_coacheerequest(email,name,code,coachname,
|
||||
'siteurl':siteurl
|
||||
}
|
||||
|
||||
form_email = 'Rowsandall <info@rowsandall.com>'
|
||||
|
||||
res = send_template_email(from_email,[fullemail],
|
||||
subject,'coacheerequestemail.html',d,
|
||||
**kwargs)
|
||||
|
||||
+54
-1
@@ -1,3 +1,4 @@
|
||||
|
||||
# All the Team related methods
|
||||
|
||||
# Python
|
||||
@@ -28,6 +29,10 @@ from rowers.tasks import (
|
||||
handle_sendemail_request_reject,handle_sendemail_invite_reject,
|
||||
handle_sendemail_invite_accept,handle_sendemail_team_removed,
|
||||
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
|
||||
@@ -362,8 +367,10 @@ def reject_revoke_coach_offer(user,id):
|
||||
|
||||
if rekwest.coach.user == user:
|
||||
rekwest.delete()
|
||||
|
||||
return (1,'Request removed')
|
||||
elif rekwest.user == user:
|
||||
send_coachoffer_rejected_email(rekwest)
|
||||
rekwest.delete()
|
||||
return (1,'Request removed')
|
||||
else:
|
||||
@@ -376,6 +383,7 @@ def reject_revoke_coach_request(user,id):
|
||||
return (0,'The request is invalid')
|
||||
|
||||
if rekwest.coach.user == user:
|
||||
send_coachrequest_rejected_email(rekwest)
|
||||
rekwest.delete()
|
||||
return (1,'Request rejected')
|
||||
elif rekwest.user == user:
|
||||
@@ -622,6 +630,8 @@ def process_coachrequest_code(coach,code):
|
||||
result = add_coach(coach,rekwest.user.rower)
|
||||
if not result:
|
||||
return (result,"Something went wrong")
|
||||
else:
|
||||
send_coachrequest_accepted_email(rekwest)
|
||||
|
||||
rekwest.delete()
|
||||
|
||||
@@ -641,9 +651,52 @@ def process_coachoffer_code(user,code):
|
||||
result = add_coach(rekwest.coach,rekwest.user.rower)
|
||||
if not result:
|
||||
return (result,"Something went wrong")
|
||||
|
||||
else:
|
||||
send_coachoffer_accepted_email(rekwest)
|
||||
|
||||
rekwest.delete()
|
||||
|
||||
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:
|
||||
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:
|
||||
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():
|
||||
cd = inviteform.cleaned_data
|
||||
newmember = cd['user']
|
||||
@@ -37,7 +43,7 @@ def team_view(request,id=0,userid=0):
|
||||
|
||||
elif request.user == t.manager:
|
||||
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:
|
||||
inviteform = ''
|
||||
|
||||
@@ -186,9 +192,13 @@ def rower_teams_view(request,message='',successmessage=''):
|
||||
invitedcoaches = [rekwest.coach for rekwest in mycoachrequests]
|
||||
|
||||
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']
|
||||
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]
|
||||
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
||||
|
||||
|
||||
if request.method == 'POST':
|
||||
accountform = AccountRowerForm(request.POST)
|
||||
accountform = AccountRowerForm(request.POST, instance=r)
|
||||
userform = UserForm(request.POST,instance=r.user)
|
||||
|
||||
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']
|
||||
email = ucd['email']
|
||||
sex = cd['sex']
|
||||
try:
|
||||
offercoaching = cd['offercoaching']
|
||||
except KeyError:
|
||||
offercoaching = False
|
||||
adaptiveclass = cd['adaptiveclass']
|
||||
defaultlandingpage = cd['defaultlandingpage']
|
||||
weightcategory = cd['weightcategory']
|
||||
@@ -217,6 +221,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
||||
r.adaptiveclass = adaptiveclass
|
||||
r.getemailnotifications = getemailnotifications
|
||||
r.getimportantemails = getimportantemails
|
||||
r.offercoaching = offercoaching
|
||||
r.defaultlandingpage = defaultlandingpage
|
||||
r.showfavoritechartnotes = showfavoritechartnotes
|
||||
r.sex = sex
|
||||
|
||||
Reference in New Issue
Block a user