From 5eed5d05a89f2911e3e975286f935dbf6ee811b8 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 25 Jan 2017 15:37:26 +0100 Subject: [PATCH] defined PowerZonesForm --- rowers/models.py | 87 ++++++++++++++++++++++++++++++++ rowers/templates/rower_form.html | 48 ++++++++++-------- rowers/views.py | 7 ++- 3 files changed, 120 insertions(+), 22 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index 86e7dea6..ac3fe85e 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -424,6 +424,93 @@ class RowerPowerForm(ModelForm): model = Rower fields = ['ftp'] +# Form to set rower's Power zones, including test routines +# to enable consistency +class RowerPowerZonesForm(ModelForm): + ut2name = forms.CharField(initial='UT2') + ut1name = forms.CharField(initial='UT1') + atname = forms.CharField(initial='AT') + trname = forms.CharField(initial='TR') + anname = forms.CharField(initial='AN') + + class Meta: + model = Rower + fields = ['pw_ut2','pw_ut1','pw_at','pw_tr','pw_an'] + + def clean(self): + try: + pw_ut2 = self.cleaned_data['pw_ut2'] + except: + pw_ut2 = int(self.data['pw_ut2']) + try: + pw_ut1 = self.cleaned_data['pw_ut1'] + except: + pw_ut1 = int(self.data['pw_ut1']) + try: + pw_at = self.cleaned_data['pw_at'] + except: + pw_at = int(self.data['pw_at']) + try: + pw_tr = self.cleaned_data['pw_tr'] + except: + pw_tr = int(self.data['pw_tr']) + try: + pw_an = self.cleaned_data['pw_an'] + except: + pw_an = int(self.data['pw_an']) + + try: + ut2name = self.cleaned_data['ut2name'] + except: + ut2name = 'UT2' + self.cleaned_data['ut2name'] = 'UT2' + try: + ut1name = self.cleaned_data['ut1name'] + except: + ut1name = 'UT1' + self.cleaned_data['ut1name'] = 'UT1' + try: + atname = self.cleaned_data['atname'] + except: + atname = 'AT' + self.cleaned_data['atname'] = 'AT' + try: + trname = self.cleaned_data['trname'] + except: + trname = 'TR' + self.cleaned_data['ut1name'] = 'TR' + try: + anname = self.cleaned_data['anname'] + except: + anname = 'AN' + self.cleaned_data['ut1name'] = 'AN' + + + if pw_ut1 <= pw_ut2: + e = "{ut1name} should be higher than {ut2name}".format( + ut1name = ut1name, + ut2name= ut2name, + ) + raise forms.ValidationError(e) + if pw_at <= pw_ut1: + e = "{atname} should be higher than {ut1name}".format( + atname = atname, + ut1name= ut1name, + ) + raise forms.ValidationError(e) + if pw_tr <= pw_at: + e = "{trname} should be higher than {atname}".format( + atname = atname, + trname= trname, + ) + raise forms.ValidationError(e) + if pw_an <= pw_tr: + e = "{anname} should be higher than {trname}".format( + anname = anname, + trname= trname, + ) + raise forms.ValidationError(e) + # Form to set rower's Heart Rate zones, including test routines # to enable consistency class RowerForm(ModelForm): diff --git a/rowers/templates/rower_form.html b/rowers/templates/rower_form.html index 7710ccb7..bec8fde4 100644 --- a/rowers/templates/rower_form.html +++ b/rowers/templates/rower_form.html @@ -24,29 +24,35 @@

Power Bands

- - - - - - - - - - - - - - - - - - - -
BandValue
UT2 Power{{ rower.pw_ut2 }} Watt
UT1 Power{{ rower.pw_ut1 }} Watt
AT Power{{ rower.pw_at }} Watt
TR Power{{ rower.pw_tr }} Watt
AN Power{{ rower.pw_an }} Watt
-

+
+ {% if powerzonesform.errors %} +

+ Please correct the error{{ form.errors|pluralize }} below. +

+ {% endif %} + + + + + + + + + + + + +
IDZone NameLower Boundary
1{{ powerzonesform.ut2name }}
+ {% csrf_token %} +
+ +
+

Functional Threshold Power

+

Use this form to quickly change your zones based on the power of a + recent + full out 60 minutes effort. It will update all zones defined above.

{{ powerform.as_table }} diff --git a/rowers/views.py b/rowers/views.py index 4eedc1ef..4c24014a 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -24,7 +24,10 @@ from rowers.forms import EmailForm, RegistrationForm, RegistrationFormTermsOfSer from rowers.forms import PredictedPieceForm,DateRangeForm,DeltaDaysForm from rowers.forms import SummaryStringForm,IntervalUpdateForm,StrokeDataForm from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart -from rowers.models import RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm +from rowers.models import ( + RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm, + RowerPowerZonesForm + ) from rowers.models import FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement from django.forms.formsets import formset_factory import StringIO @@ -4554,11 +4557,13 @@ def rower_edit_view(request,message=""): form = RowerForm(instance=r) powerform = RowerPowerForm(instance=r) + powerzonesform = RowerPowerZonesForm(instance=r) grants = AccessToken.objects.filter(user=request.user) return render(request, 'rower_form.html', { 'form':form, 'powerform':powerform, + 'powerzonesform':powerzonesform, 'grants':grants, 'rower':r, })