commit
This commit is contained in:
@@ -5,6 +5,7 @@ from __future__ import unicode_literals
|
||||
|
||||
from rowers.views.statements import *
|
||||
|
||||
|
||||
@login_required()
|
||||
def deactivate_user(request):
|
||||
pk = request.user.id
|
||||
@@ -16,13 +17,15 @@ def deactivate_user(request):
|
||||
if user_form.is_valid():
|
||||
if not user_form.cleaned_data['is_active']:
|
||||
r = Rower.objects.get(user=user)
|
||||
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree': # pragma: no cover
|
||||
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree': # pragma: no cover
|
||||
try:
|
||||
subscriptions = braintreestuff.find_subscriptions(r)
|
||||
subscriptions = braintreestuff.find_subscriptions(
|
||||
r)
|
||||
for subscription in subscriptions:
|
||||
success, themessages,errormessages = braintreestuff.cancel_subscription(r,id)
|
||||
success, themessages, errormessages = braintreestuff.cancel_subscription(
|
||||
r, id)
|
||||
for message in themessages:
|
||||
messages.info(request,message)
|
||||
messages.info(request, message)
|
||||
except ProcessorCustomerError:
|
||||
pass
|
||||
|
||||
@@ -44,22 +47,24 @@ def deactivate_user(request):
|
||||
return render(request, "userprofile_deactivate.html", {
|
||||
"user_form": user_form,
|
||||
})
|
||||
else: # pragma: no cover
|
||||
else: # pragma: no cover
|
||||
raise PermissionDenied
|
||||
|
||||
|
||||
@login_required()
|
||||
def user_gdpr_optin(request):
|
||||
r = getrower(request.user)
|
||||
r.gdproptin = False
|
||||
r.gdproptindate = None
|
||||
r.save()
|
||||
nexturl = request.GET.get('next','/rowers/list-workouts/')
|
||||
if r.gdproptin: # pragma: no cover
|
||||
nexturl = request.GET.get('next', '/rowers/list-workouts/')
|
||||
if r.gdproptin: # pragma: no cover
|
||||
return HttpResponseRedirect(nexturl)
|
||||
|
||||
return render(request,'gdpr_optin.html',{
|
||||
return render(request, 'gdpr_optin.html', {
|
||||
"next": nexturl
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@login_required()
|
||||
def user_gdpr_confirm(request):
|
||||
@@ -68,12 +73,11 @@ def user_gdpr_confirm(request):
|
||||
r.gdproptindate = timezone.now()
|
||||
r.save()
|
||||
|
||||
nexturl = request.GET.get('next','/rowers/list-workouts/')
|
||||
nexturl = request.GET.get('next', '/rowers/list-workouts/')
|
||||
|
||||
return HttpResponseRedirect(nexturl)
|
||||
|
||||
|
||||
|
||||
@login_required()
|
||||
def remove_user(request):
|
||||
pk = request.user.id
|
||||
@@ -81,20 +85,21 @@ def remove_user(request):
|
||||
user_form = DeleteUserForm(instance=user)
|
||||
if request.user.is_authenticated and request.user.id == user.id:
|
||||
if request.method == "POST":
|
||||
user_form = DeleteUserForm(request.POST,instance=user)
|
||||
user_form = DeleteUserForm(request.POST, instance=user)
|
||||
if user_form.is_valid():
|
||||
cd = user_form.cleaned_data
|
||||
name = user.first_name+' '+user.last_name
|
||||
email = user.email
|
||||
|
||||
r = Rower.objects.get(user=user)
|
||||
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree': # pragma: no cover
|
||||
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree': # pragma: no cover
|
||||
try:
|
||||
subscriptions = braintreestuff.find_subscriptions(r)
|
||||
for subscription in subscriptions:
|
||||
success, themessages,errormessages = braintreestuff.cancel_subscription(r,id)
|
||||
success, themessages, errormessages = braintreestuff.cancel_subscription(
|
||||
r, id)
|
||||
for message in themessages:
|
||||
messages.info(request,message)
|
||||
messages.info(request, message)
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -114,13 +119,13 @@ def remove_user(request):
|
||||
return HttpResponseRedirect(url)
|
||||
return render(request, "userprofile_delete.html", {
|
||||
"user_form": user_form,
|
||||
})
|
||||
else: # pragma: no cover
|
||||
})
|
||||
else: # pragma: no cover
|
||||
raise PermissionDenied
|
||||
|
||||
|
||||
@login_required()
|
||||
def survey(request): # pragma: no cover
|
||||
def survey(request): # pragma: no cover
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
@@ -136,20 +141,20 @@ def survey(request): # pragma: no cover
|
||||
return HttpResponseRedirect(nexturl)
|
||||
|
||||
context = {
|
||||
'teams':get_my_teams(request.user),
|
||||
'rower':r,
|
||||
'form':surveyform,
|
||||
}
|
||||
'teams': get_my_teams(request.user),
|
||||
'rower': r,
|
||||
'form': surveyform,
|
||||
}
|
||||
|
||||
return render(request, 'survey.html', context)
|
||||
|
||||
return render(request,'survey.html',context)
|
||||
|
||||
@login_required()
|
||||
def start_trial_view(request):
|
||||
r = getrower(request.user)
|
||||
|
||||
if not can_start_trial(request.user): # pragma: no cover
|
||||
messages.error(request,'You do not qualify for a trial')
|
||||
if not can_start_trial(request.user): # pragma: no cover
|
||||
messages.error(request, 'You do not qualify for a trial')
|
||||
url = '/rowers/paidplans'
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@@ -158,7 +163,7 @@ def start_trial_view(request):
|
||||
|
||||
url = reverse('workouts_view')
|
||||
|
||||
messages.info(request,'We have started your 14 day trial period')
|
||||
messages.info(request, 'We have started your 14 day trial period')
|
||||
|
||||
subject2 = "User started Pro Trial"
|
||||
message2 = "User Started Pro Trial.\n"
|
||||
@@ -173,17 +178,18 @@ def start_trial_view(request):
|
||||
[r.user.email],
|
||||
'Welcome to the Rowsandall Pro Trial',
|
||||
'protrialewelcome.html',
|
||||
{'first_name':r.user.first_name,
|
||||
'last_name':r.user.last_name})
|
||||
{'first_name': r.user.first_name,
|
||||
'last_name': r.user.last_name})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
@login_required()
|
||||
def start_plantrial_view(request):
|
||||
r = getrower(request.user)
|
||||
|
||||
if not can_start_plantrial(request.user): # pragma: no cover
|
||||
messages.error(request,'You do not qualify for a trial')
|
||||
if not can_start_plantrial(request.user): # pragma: no cover
|
||||
messages.error(request, 'You do not qualify for a trial')
|
||||
url = '/rowers/paidplans'
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@@ -193,7 +199,7 @@ def start_plantrial_view(request):
|
||||
|
||||
url = reverse('workouts_view')
|
||||
|
||||
messages.info(request,'We have started your 14 day trial period')
|
||||
messages.info(request, 'We have started your 14 day trial period')
|
||||
|
||||
subject2 = "User started Plan Trial"
|
||||
message2 = "User Started Plan Trial.\n"
|
||||
@@ -208,72 +214,77 @@ def start_plantrial_view(request):
|
||||
[r.user.email],
|
||||
'Welcome to the Rowsandall Self-Coach Trial',
|
||||
'plantrialwelcome.html',
|
||||
{'first_name':r.user.first_name,
|
||||
'last_name':r.user.last_name})
|
||||
{'first_name': r.user.first_name,
|
||||
'last_name': r.user.last_name})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
# Page where user can manage his favorite charts
|
||||
@login_required()
|
||||
@permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True)
|
||||
def rower_favoritecharts_view(request,userid=0):
|
||||
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
|
||||
def rower_favoritecharts_view(request, userid=0):
|
||||
message = ''
|
||||
successmessage = ''
|
||||
r = getrequestrowercoachee(request,userid=userid,notpermanent=True)
|
||||
r = getrequestrowercoachee(request, userid=userid, notpermanent=True)
|
||||
|
||||
staticchartform = StaticChartRowerForm(instance=r)
|
||||
datasettingsform = DataRowerForm(instance=r)
|
||||
|
||||
favorites = FavoriteChart.objects.filter(user=r).order_by('id')
|
||||
aantal = len(favorites)
|
||||
favorites_data = [{'yparam1':f.yparam1,
|
||||
'yparam2':f.yparam2,
|
||||
'xparam':f.xparam,
|
||||
'plottype':f.plottype,
|
||||
'workouttype':f.workouttype,
|
||||
'reststrokes':f.reststrokes,
|
||||
'notes':f.notes,}
|
||||
for f in favorites]
|
||||
FavoriteChartFormSet = formset_factory(FavoriteForm,formset=BaseFavoriteFormSet,extra=0)
|
||||
if aantal==0:
|
||||
FavoriteChartFormSet = formset_factory(FavoriteForm,formset=BaseFavoriteFormSet,extra=1)
|
||||
favorites_data = [{'yparam1': f.yparam1,
|
||||
'yparam2': f.yparam2,
|
||||
'xparam': f.xparam,
|
||||
'plottype': f.plottype,
|
||||
'workouttype': f.workouttype,
|
||||
'reststrokes': f.reststrokes,
|
||||
'notes': f.notes, }
|
||||
for f in favorites]
|
||||
FavoriteChartFormSet = formset_factory(
|
||||
FavoriteForm, formset=BaseFavoriteFormSet, extra=0)
|
||||
if aantal == 0:
|
||||
FavoriteChartFormSet = formset_factory(
|
||||
FavoriteForm, formset=BaseFavoriteFormSet, extra=1)
|
||||
|
||||
if request.method == 'POST' and 'staticgrids' in request.POST: # pragma: no cover
|
||||
staticchartform = StaticChartRowerForm(request.POST,instance=r)
|
||||
if request.method == 'POST' and 'staticgrids' in request.POST: # pragma: no cover
|
||||
staticchartform = StaticChartRowerForm(request.POST, instance=r)
|
||||
if staticchartform.is_valid():
|
||||
r.staticgrids = staticchartform.cleaned_data.get('staticgrids')
|
||||
r.slowpaceerg = staticchartform.cleaned_data.get('slowpaceerg')
|
||||
r.fastpaceerg = staticchartform.cleaned_data.get('fastpaceerg')
|
||||
r.slowpaceotw = staticchartform.cleaned_data.get('slowpaceotw')
|
||||
r.fastpaceotw = staticchartform.cleaned_data.get('fastpaceotw')
|
||||
r.staticchartonupload = staticchartform.cleaned_data.get('staticchartonupload')
|
||||
r.staticchartonupload = staticchartform.cleaned_data.get(
|
||||
'staticchartonupload')
|
||||
r.fav_analysis = staticchartform.cleaned_data.get('fav_analysis')
|
||||
r.usersmooth = staticchartform.cleaned_data.get('usersmooth')
|
||||
r.save()
|
||||
|
||||
if request.method == 'POST' and 'save_data' in request.POST: # pragma: no cover
|
||||
datasettingsform = DataRowerForm(request.POST,instance=r)
|
||||
if request.method == 'POST' and 'save_data' in request.POST: # pragma: no cover
|
||||
datasettingsform = DataRowerForm(request.POST, instance=r)
|
||||
if datasettingsform.is_valid():
|
||||
cd = datasettingsform.cleaned_data
|
||||
r.autojoin = cd.get('autojoin')
|
||||
r.dosmooth = cd.get('dosmooth')
|
||||
r.erg_recalculatepower = cd.get('erg_recalculatepower')
|
||||
r.save()
|
||||
messages.info(request,"We have updated your data settings")
|
||||
messages.info(request, "We have updated your data settings")
|
||||
|
||||
if request.method == 'POST' and 'defaults_data' in request.POST: # pragma: no cover
|
||||
if request.method == 'POST' and 'defaults_data' in request.POST: # pragma: no cover
|
||||
defaultsmooth = Rower._meta.get_field('dosmooth').get_default()
|
||||
defaultautojoin = Rower._meta.get_field('autojoin').get_default()
|
||||
defaultergcalcpower = Rower._meta.get_field('erg_recalculatepower').get_default()
|
||||
defaultergcalcpower = Rower._meta.get_field(
|
||||
'erg_recalculatepower').get_default()
|
||||
r.dosmooth = defaultsmooth
|
||||
r.autojoin = defaultautojoin
|
||||
r.erg_recalculatepower = defaultergcalcpower
|
||||
r.save()
|
||||
datasettingsform = DataRowerForm(instance=r)
|
||||
messages.info(request,"We have reset your data settings to the default values")
|
||||
messages.info(
|
||||
request, "We have reset your data settings to the default values")
|
||||
|
||||
if request.method == 'POST' and 'form-TOTAL_FORMS' in request.POST: # pragma: no cover
|
||||
if request.method == 'POST' and 'form-TOTAL_FORMS' in request.POST: # pragma: no cover
|
||||
favorites_formset = FavoriteChartFormSet(request.POST)
|
||||
if favorites_formset.is_valid():
|
||||
new_instances = []
|
||||
@@ -298,53 +309,54 @@ def rower_favoritecharts_view(request,userid=0):
|
||||
FavoriteChart.objects.filter(user=r).delete()
|
||||
FavoriteChart.objects.bulk_create(new_instances)
|
||||
successmessage = "You have updated your favorites"
|
||||
messages.info(request,message)
|
||||
if len(new_instances)==0:
|
||||
FavoriteChartFormSet=formset_factory(FavoriteForm,formset=BaseFavoriteFormSet,extra=1)
|
||||
messages.info(request, message)
|
||||
if len(new_instances) == 0:
|
||||
FavoriteChartFormSet = formset_factory(
|
||||
FavoriteForm, formset=BaseFavoriteFormSet, extra=1)
|
||||
favorites_formset = FavoriteChartFormSet()
|
||||
except IntegrityError:
|
||||
message = "something went wrong"
|
||||
messages.error(request,message)
|
||||
messages.error(request, message)
|
||||
else:
|
||||
favorites_formset = FavoriteChartFormSet(initial=favorites_data)
|
||||
|
||||
|
||||
context = {
|
||||
'favorites_formset':favorites_formset,
|
||||
'teams':get_my_teams(request.user),
|
||||
'rower':r,
|
||||
'staticchartform':staticchartform,
|
||||
'datasettingsform':datasettingsform,
|
||||
}
|
||||
'favorites_formset': favorites_formset,
|
||||
'teams': get_my_teams(request.user),
|
||||
'rower': r,
|
||||
'staticchartform': staticchartform,
|
||||
'datasettingsform': datasettingsform,
|
||||
}
|
||||
|
||||
|
||||
|
||||
return render(request,'favoritecharts.html',context)
|
||||
return render(request, 'favoritecharts.html', context)
|
||||
|
||||
# page where user sets his export settings
|
||||
|
||||
|
||||
@login_required()
|
||||
@permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True)
|
||||
def rower_exportsettings_view(request,userid=0):
|
||||
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
|
||||
def rower_exportsettings_view(request, userid=0):
|
||||
attrtokens = {
|
||||
'polar_auto_import':'polartoken',
|
||||
'c2_auto_export':'c2token',
|
||||
'c2_auto_import':'c2token',
|
||||
'runkeeper_auto_export':'runkeepertoken',
|
||||
'sporttracks_auto_export':'sporttrackstoken',
|
||||
'strava_auto_export':'stravatoken',
|
||||
'strava_auto_import':'stravatoken',
|
||||
'strava_auto_delete':'stravatoken',
|
||||
'trainingpeaks_auto_export':'tptoken',
|
||||
'rp3_auto_import':'rp3token',
|
||||
'nk_auto_import':'nktoken'
|
||||
'polar_auto_import': 'polartoken',
|
||||
'c2_auto_export': 'c2token',
|
||||
'c2_auto_import': 'c2token',
|
||||
'runkeeper_auto_export': 'runkeepertoken',
|
||||
'sporttracks_auto_export': 'sporttrackstoken',
|
||||
'strava_auto_export': 'stravatoken',
|
||||
'strava_auto_import': 'stravatoken',
|
||||
'strava_auto_delete': 'stravatoken',
|
||||
'trainingpeaks_auto_export': 'tptoken',
|
||||
'rp3_auto_import': 'rp3token',
|
||||
'nk_auto_import': 'nktoken'
|
||||
}
|
||||
r = getrequestrowercoachee(request,userid=userid)
|
||||
r = getrequestrowercoachee(request, userid=userid)
|
||||
if request.method == 'POST':
|
||||
form = RowerExportForm(request.POST)
|
||||
if form.is_valid():
|
||||
cd = form.cleaned_data
|
||||
if r.rowerplan == 'basic': # pragma: no cover
|
||||
messages.error(request,'These settings can only be set if you are a user on one of the <a href="/rowers/paidplans">paid plans</a>.')
|
||||
if r.rowerplan == 'basic': # pragma: no cover
|
||||
messages.error(
|
||||
request, 'These settings can only be set if you are a user on one of the <a href="/rowers/paidplans">paid plans</a>.')
|
||||
|
||||
for attr, value in cd.items():
|
||||
doset = True
|
||||
@@ -354,50 +366,52 @@ def rower_exportsettings_view(request,userid=0):
|
||||
doset = False
|
||||
except KeyError:
|
||||
doset = True
|
||||
if r.rowerplan == 'basic': # pragma: no cover
|
||||
if r.rowerplan == 'basic': # pragma: no cover
|
||||
doset = False
|
||||
if not doset:
|
||||
before = getattr(r,attr)
|
||||
before = getattr(r, attr)
|
||||
if before == value:
|
||||
doset = True
|
||||
if doset:
|
||||
setattr(r, attr, value)
|
||||
else:
|
||||
if r.rowerplan != 'basic':
|
||||
messages.error(request,'Could not set '+attr+'. You need to create the connection first.')
|
||||
messages.error(
|
||||
request, 'Could not set '+attr+'. You need to create the connection first.')
|
||||
|
||||
r.save()
|
||||
messages.info(request,'Settings saved')
|
||||
messages.info(request, 'Settings saved')
|
||||
else:
|
||||
form = RowerExportForm(instance=r)
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/me/edit/',
|
||||
'url': '/rowers/me/edit/',
|
||||
'name': 'Profile'
|
||||
},
|
||||
},
|
||||
{
|
||||
'url': reverse('rower_exportsettings_view'),
|
||||
'name': 'Export Settings'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
return render(request, 'rower_exportsettings.html',
|
||||
{'form':form,
|
||||
'rower':r,
|
||||
{'form': form,
|
||||
'rower': r,
|
||||
'breadcrumbs': breadcrumbs,
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
# Page where user can set his details
|
||||
# Add email address to form so user can change his email address
|
||||
@login_required()
|
||||
@permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True)
|
||||
def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
||||
r = getrequestrowercoachee(request,rowerid=rowerid,userid=userid,notpermanent=True)
|
||||
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
|
||||
def rower_edit_view(request, rowerid=0, userid=0, message=""):
|
||||
r = getrequestrowercoachee(
|
||||
request, rowerid=rowerid, userid=userid, notpermanent=True)
|
||||
|
||||
if 'courseshare' in request.GET: # pragma: no cover
|
||||
courseshare = request.GET.get('courseshare',"ok")
|
||||
if 'courseshare' in request.GET: # pragma: no cover
|
||||
courseshare = request.GET.get('courseshare', "ok")
|
||||
if courseshare == 'true':
|
||||
r.share_course_results = True
|
||||
r.save()
|
||||
@@ -409,19 +423,18 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/me/edit/',
|
||||
'url': '/rowers/me/edit/',
|
||||
'name': 'Profile'
|
||||
},
|
||||
},
|
||||
{
|
||||
'url': reverse('rower_edit_view'),
|
||||
'name': 'Account Settings'
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
]
|
||||
|
||||
if request.method == '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():
|
||||
# process
|
||||
@@ -434,7 +447,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
||||
sex = cd['sex']
|
||||
try:
|
||||
offercoaching = cd['offercoaching']
|
||||
except KeyError: # pragma: no cover
|
||||
except KeyError: # pragma: no cover
|
||||
offercoaching = False
|
||||
autojoin = cd['autojoin']
|
||||
adaptiveclass = cd['adaptiveclass']
|
||||
@@ -445,25 +458,25 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
||||
getemailnotifications = cd['getemailnotifications']
|
||||
getimportantemails = cd['getimportantemails']
|
||||
share_course_results = cd['share_course_results']
|
||||
defaulttimezone=cd['defaulttimezone']
|
||||
defaulttimezone = cd['defaulttimezone']
|
||||
fav_analysis = cd['fav_analysis']
|
||||
usersmooth = cd['usersmooth']
|
||||
u = r.user
|
||||
if u.email != email and len(email): # pragma: no cover
|
||||
if u.email != email and len(email): # pragma: no cover
|
||||
resetbounce = True
|
||||
else:
|
||||
resetbounce = False
|
||||
if len(first_name):
|
||||
u.first_name = first_name
|
||||
u.last_name = last_name
|
||||
if len(email): ## and check_email_freeforuse(u,email):
|
||||
if len(email): # and check_email_freeforuse(u,email):
|
||||
u.email = email
|
||||
resetbounce = True
|
||||
|
||||
emailalternatives = cd['emailalternatives']
|
||||
|
||||
u.save()
|
||||
r.defaulttimezone=defaulttimezone
|
||||
r.defaulttimezone = defaulttimezone
|
||||
r.weightcategory = weightcategory
|
||||
r.adaptiveclass = adaptiveclass
|
||||
r.getemailnotifications = getemailnotifications
|
||||
@@ -479,51 +492,49 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
|
||||
r.fav_analysis = fav_analysis
|
||||
r.usersmooth = usersmooth
|
||||
|
||||
|
||||
if resetbounce and r.emailbounced: # pragma: no cover
|
||||
if resetbounce and r.emailbounced: # pragma: no cover
|
||||
r.emailbounced = False
|
||||
r.save()
|
||||
|
||||
accountform = AccountRowerForm(instance=r)
|
||||
userform = UserForm(instance=u)
|
||||
successmessage = 'Account Information changed'
|
||||
messages.info(request,successmessage)
|
||||
messages.info(request, successmessage)
|
||||
else:
|
||||
accountform = AccountRowerForm(instance=r)
|
||||
userform = UserForm(instance=r.user)
|
||||
|
||||
|
||||
grants = AccessToken.objects.filter(user=request.user)
|
||||
return render(request, 'rower_form.html',
|
||||
{
|
||||
'teams':get_my_teams(request.user),
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'grants':grants,
|
||||
'userform':userform,
|
||||
'accountform':accountform,
|
||||
'rower':r,
|
||||
'teams': get_my_teams(request.user),
|
||||
'breadcrumbs': breadcrumbs,
|
||||
'grants': grants,
|
||||
'userform': userform,
|
||||
'accountform': accountform,
|
||||
'rower': r,
|
||||
})
|
||||
|
||||
|
||||
# Page where user can set his details
|
||||
# Add email address to form so user can change his email address
|
||||
@login_required()
|
||||
@permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True)
|
||||
def rower_prefs_view(request,userid=0,message=""):
|
||||
r = getrequestrowercoachee(request,userid=userid,notpermanent=True)
|
||||
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
|
||||
def rower_prefs_view(request, userid=0, message=""):
|
||||
r = getrequestrowercoachee(request, userid=userid, notpermanent=True)
|
||||
|
||||
rowerid = r.id
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/me/edit/',
|
||||
'url': '/rowers/me/edit/',
|
||||
'name': 'Profile'
|
||||
},
|
||||
},
|
||||
{
|
||||
'url': reverse('rower_prefs_view'),
|
||||
'name': 'Zones'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
form = RowerHRZonesForm(instance=r)
|
||||
powerform = RowerPowerForm(instance=r)
|
||||
@@ -550,26 +561,26 @@ def rower_prefs_view(request,userid=0,message=""):
|
||||
hrtrname = cd['hrtrname']
|
||||
hranname = cd['hranname']
|
||||
hrmaxname = cd['hrmaxname']
|
||||
hrzones = [hrrestname,hrut2name,hrut1name,hratname,hrtrname,hranname,hrmaxname]
|
||||
hrzones = [hrrestname, hrut2name, hrut1name,
|
||||
hratname, hrtrname, hranname, hrmaxname]
|
||||
|
||||
|
||||
r.max = max(min(hrmax,250),10)
|
||||
r.ut2 = max(min(ut2,250),10)
|
||||
r.ut1 = max(min(ut1,250),10)
|
||||
r.at = max(min(at,250),10)
|
||||
r.tr = max(min(tr,250),10)
|
||||
r.an = max(min(an,250),10)
|
||||
r.rest = max(min(rest,250),10)
|
||||
r.max = max(min(hrmax, 250), 10)
|
||||
r.ut2 = max(min(ut2, 250), 10)
|
||||
r.ut1 = max(min(ut1, 250), 10)
|
||||
r.at = max(min(at, 250), 10)
|
||||
r.tr = max(min(tr, 250), 10)
|
||||
r.an = max(min(an, 250), 10)
|
||||
r.rest = max(min(rest, 250), 10)
|
||||
r.hrzones = hrzones
|
||||
r.save()
|
||||
successmessage = "Your Heart Rate data were changed"
|
||||
messages.info(request,successmessage)
|
||||
messages.info(request, successmessage)
|
||||
elif request.method == 'POST' and "ftp" in request.POST:
|
||||
powerform = RowerPowerForm(request.POST)
|
||||
if powerform.is_valid():
|
||||
cd = powerform.cleaned_data
|
||||
hrftp = cd['hrftp']
|
||||
if hrftp == 0: # pragma: no cover
|
||||
if hrftp == 0: # pragma: no cover
|
||||
hrftp = int((r.an+r.tr)/2.)
|
||||
ftp = cd['ftp']
|
||||
otwslack = cd['otwslack']
|
||||
@@ -577,10 +588,10 @@ def rower_prefs_view(request,userid=0,message=""):
|
||||
powerfrac = 100*np.array([r.pw_ut2,
|
||||
r.pw_ut1,
|
||||
r.pw_at,
|
||||
r.pw_tr,r.pw_an])/r.ftp
|
||||
r.ftp = max(min(ftp,650),50)
|
||||
r.otwslack = max(min(otwslack,50),0)
|
||||
ut2,ut1,at,tr,an = (r.ftp*powerfrac/100.).astype(int)
|
||||
r.pw_tr, r.pw_an])/r.ftp
|
||||
r.ftp = max(min(ftp, 650), 50)
|
||||
r.otwslack = max(min(otwslack, 50), 0)
|
||||
ut2, ut1, at, tr, an = (r.ftp*powerfrac/100.).astype(int)
|
||||
r.pw_ut2 = ut2
|
||||
r.pw_ut1 = ut1
|
||||
r.pw_at = at
|
||||
@@ -589,7 +600,7 @@ def rower_prefs_view(request,userid=0,message=""):
|
||||
r.hrftp = hrftp
|
||||
r.save()
|
||||
message = "FTP and/or OTW slack values changed."
|
||||
messages.info(request,message)
|
||||
messages.info(request, message)
|
||||
|
||||
elif request.method == 'POST' and "ut3name" in request.POST:
|
||||
powerzonesform = RowerPowerZonesForm(request.POST)
|
||||
@@ -606,7 +617,7 @@ def rower_prefs_view(request,userid=0,message=""):
|
||||
atname = cd['atname']
|
||||
trname = cd['trname']
|
||||
anname = cd['anname']
|
||||
powerzones = [ut3name,ut2name,ut1name,atname,trname,anname]
|
||||
powerzones = [ut3name, ut2name, ut1name, atname, trname, anname]
|
||||
|
||||
r.pw_ut2 = pw_ut2
|
||||
r.pw_ut1 = pw_ut1
|
||||
@@ -616,8 +627,8 @@ def rower_prefs_view(request,userid=0,message=""):
|
||||
r.powerzones = powerzones
|
||||
r.save()
|
||||
successmessage = "Your Power Zone data were changed"
|
||||
messages.info(request,successmessage)
|
||||
elif request.method == 'POST' and 'cprange' in request.POST: # pragma: no cover
|
||||
messages.info(request, successmessage)
|
||||
elif request.method == 'POST' and 'cprange' in request.POST: # pragma: no cover
|
||||
cpform = RowerCPForm(request.POST)
|
||||
if cpform.is_valid():
|
||||
cd = cpform.cleaned_data
|
||||
@@ -628,19 +639,19 @@ def rower_prefs_view(request,userid=0,message=""):
|
||||
r.kfit = kfit
|
||||
r.kfatigue = kfatigue
|
||||
r.save()
|
||||
messages.info(request,'Updated CP range and time decay constants')
|
||||
success = dataprep.update_rolling_cp(r,mytypes.otwtypes,'water')
|
||||
success = dataprep.update_rolling_cp(r,mytypes.otetypes,'erg')
|
||||
messages.info(request, 'Updated CP range and time decay constants')
|
||||
success = dataprep.update_rolling_cp(r, mytypes.otwtypes, 'water')
|
||||
success = dataprep.update_rolling_cp(r, mytypes.otetypes, 'erg')
|
||||
|
||||
return render(request, 'rower_preferences.html',
|
||||
{
|
||||
'form':form,
|
||||
'teams':get_my_teams(request.user),
|
||||
'powerform':powerform,
|
||||
'powerzonesform':powerzonesform,
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'cpform':cpform,
|
||||
'rower':r,
|
||||
'form': form,
|
||||
'teams': get_my_teams(request.user),
|
||||
'powerform': powerform,
|
||||
'powerzonesform': powerzonesform,
|
||||
'breadcrumbs': breadcrumbs,
|
||||
'cpform': cpform,
|
||||
'rower': r,
|
||||
})
|
||||
|
||||
|
||||
@@ -648,10 +659,11 @@ def rower_prefs_view(request,userid=0,message=""):
|
||||
# this views is called when you press a button on the User edit page
|
||||
# the button is only there when you have granted access to an app
|
||||
@login_required()
|
||||
def rower_revokeapp_view(request,id=0): # pragma: no cover
|
||||
def rower_revokeapp_view(request, id=0): # pragma: no cover
|
||||
try:
|
||||
tokens = AccessToken.objects.filter(user=request.user,application=id)
|
||||
refreshtokens = AccessToken.objects.filter(user=request.user,application=id)
|
||||
tokens = AccessToken.objects.filter(user=request.user, application=id)
|
||||
refreshtokens = AccessToken.objects.filter(
|
||||
user=request.user, application=id)
|
||||
for token in tokens:
|
||||
token.revoke()
|
||||
for token in refreshtokens:
|
||||
@@ -672,7 +684,7 @@ def rower_update_empower_view(
|
||||
request,
|
||||
startdate=timezone.now()-datetime.timedelta(days=365),
|
||||
enddate=timezone.now()
|
||||
): # pragma: no cover
|
||||
): # pragma: no cover
|
||||
try:
|
||||
r = getrower(request.user)
|
||||
except Rower.DoesNotExist:
|
||||
@@ -689,10 +701,9 @@ def rower_update_empower_view(
|
||||
request.session['enddate'] = enddatestring
|
||||
else:
|
||||
dateform = DateRangeForm(initial={
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
})
|
||||
|
||||
'startdate': startdate,
|
||||
'enddate': enddate,
|
||||
})
|
||||
|
||||
if request.method == 'POST' and 'workouts' in request.POST:
|
||||
form = WorkoutMultipleCompareForm(request.POST)
|
||||
@@ -704,25 +715,27 @@ def rower_update_empower_view(
|
||||
for w in workouts:
|
||||
if w.user != r:
|
||||
message = "You can only alter your own workouts"
|
||||
messages.error(request,message)
|
||||
messages.error(request, message)
|
||||
if 'x' in w.boattype and w.oarlength is not None and w.oarlength > 3.30:
|
||||
message = "Oarlength and boat type mismatch for workout "+str(w.id)+". Skipping workout"
|
||||
messages.error(request,message)
|
||||
message = "Oarlength and boat type mismatch for workout " + \
|
||||
str(w.id)+". Skipping workout"
|
||||
messages.error(request, message)
|
||||
elif 'x' not in w.boattype and w.oarlength is not None and w.oarlength <= 3.30:
|
||||
message = "Oarlength and boat type mismatch for workout "+str(w.id)+". Skipping workout"
|
||||
messages.error(request,message)
|
||||
message = "Oarlength and boat type mismatch for workout " + \
|
||||
str(w.id)+". Skipping workout"
|
||||
messages.error(request, message)
|
||||
elif w.oarlength is None:
|
||||
message = "Incorrect oarlength in workout "+str(w.id)+". Skipping workout"
|
||||
messages.error(request,message)
|
||||
message = "Incorrect oarlength in workout " + \
|
||||
str(w.id)+". Skipping workout"
|
||||
messages.error(request, message)
|
||||
else:
|
||||
|
||||
|
||||
workoutdict = {
|
||||
'id':w.id,
|
||||
'boattype':w.boattype,
|
||||
'filename':w.csvfilename,
|
||||
'inboard':w.inboard,
|
||||
'oarlength':w.oarlength
|
||||
'id': w.id,
|
||||
'boattype': w.boattype,
|
||||
'filename': w.csvfilename,
|
||||
'inboard': w.inboard,
|
||||
'oarlength': w.oarlength
|
||||
}
|
||||
|
||||
workoutdicts.append(workoutdict)
|
||||
@@ -730,20 +743,19 @@ def rower_update_empower_view(
|
||||
w.workoutsource = 'speedcoach2corrected'
|
||||
w.save()
|
||||
|
||||
|
||||
job = myqueue(queuelow,handle_update_empower,
|
||||
request.user.email,workoutdicts,
|
||||
job = myqueue(queuelow, handle_update_empower,
|
||||
request.user.email, workoutdicts,
|
||||
debug=False,
|
||||
emailbounced=r.emailbounced)
|
||||
|
||||
try:
|
||||
request.session['async_tasks'] += [(job.id,'update_empower')]
|
||||
request.session['async_tasks'] += [(job.id, 'update_empower')]
|
||||
except KeyError:
|
||||
request.session['async_tasks'] = [(job.id,'update_empower')]
|
||||
request.session['async_tasks'] = [(job.id, 'update_empower')]
|
||||
|
||||
successmessage = 'Your workouts are being updated in the background. You will receive email when this is done. You can check the status of your calculations <a href="/rowers/jobs-status" target="_blank">here</a>'
|
||||
|
||||
messages.info(request,successmessage)
|
||||
messages.info(request, successmessage)
|
||||
|
||||
url = reverse('workouts_view')
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -754,16 +766,16 @@ def rower_update_empower_view(
|
||||
startdatetime__lte=enddate,
|
||||
workoutsource='speedcoach2',
|
||||
user=r,
|
||||
).order_by("-date","-starttime")
|
||||
).order_by("-date", "-starttime")
|
||||
|
||||
form = WorkoutMultipleCompareForm()
|
||||
form.fields["workouts"].queryset = workouts
|
||||
# GET request = prepare form
|
||||
|
||||
return render(request, 'empower_fix.html',
|
||||
{'workouts':workouts,
|
||||
{'workouts': workouts,
|
||||
'active': 'nav-workouts',
|
||||
'dateform':dateform,
|
||||
'form':form,
|
||||
'rower':r
|
||||
'dateform': dateform,
|
||||
'form': form,
|
||||
'rower': r
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user