From b1a8e84bd521961fcd17e0934e79e096c4738845 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 14 Jun 2018 11:38:00 +0200 Subject: [PATCH] improved form processing in summary edit --- rowers/dataprep.py | 20 +++++++ rowers/forms.py | 4 +- rowers/interactiveplots.py | 4 +- rowers/templates/summary_edit.html | 3 ++ rowers/views.py | 87 +++++++++++++++++++++++++++--- 5 files changed, 108 insertions(+), 10 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index ca63cac2..24869490 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -2364,3 +2364,23 @@ def workout_rscore(w): tss = 0 return tss,normp + +def workout_normv(w,pp=4.0): + df,row = getrowdata_db(id=w.id) + df = clean_df_stats(df,workstrokesonly=False) + if df.empty: + df,row = getrowdata_db(id=w.id) + df = clean_df_stats(df,workstrokesonly=False) + + df['deltat'] = df['time'].diff() + duration = df['time'].max()-df['time'].min() + duration /= 1.0e3 + df['v4'] = df['velo']**(pp) + v4mean = wavg(df,'v4','deltat') + normv = v4mean**(1./pp) + + if np.isnan(normv): + return 500./120. + + return normv + diff --git a/rowers/forms.py b/rowers/forms.py index 71c93283..ae4fcc53 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -488,8 +488,8 @@ class PowerIntervalUpdateForm(forms.Form): ('pace','Pace') ) - pace = forms.DurationField(label='Pace',required=False) - power = forms.IntegerField(label='Power',required=False) + pace = forms.DurationField(required=False,label='Pace (/500m)') + power = forms.IntegerField(required=False,label='Power (W)') selector = forms.ChoiceField(choices=selectorchoices, required=True, initial='power', diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index ba3eba9e..a8600598 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -2138,8 +2138,8 @@ def interactive_chart(id=0,promember=0): try: spm = datadf['spm'] except KeyError: - datadf['spm'] = 0*datadf['pace'] - + datadf['spm'] = 0 + #datadf,row = dataprep.getrowdata_db(id=id) #if datadf.empty: #return "","No Valid Data Available" diff --git a/rowers/templates/summary_edit.html b/rowers/templates/summary_edit.html index 59510b18..3419f077 100644 --- a/rowers/templates/summary_edit.html +++ b/rowers/templates/summary_edit.html @@ -164,6 +164,9 @@ {% csrf_token %} + {% for key,value in formvalues.items %} + + {% endfor %} {% for field in detailform %} {{ field.as_hidden }} {% endfor %} diff --git a/rowers/views.py b/rowers/views.py index 8a4d22fe..d348ec90 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -11295,7 +11295,23 @@ def workout_summary_edit_view(request,id,message="",successmessage="" pass savebutton = 'nosavebutton' + formvalues = {} + form = SummaryStringForm() + tss,normp = dataprep.workout_rscore(row) + + normv = dataprep.workout_normv(row,pp=10.0) + + avpace = datetime.timedelta(seconds=int(500./normv)) + + data = { + 'power': int(normp), + 'pace': avpace, + 'selector': normp, + } + + powerupdateform = PowerIntervalUpdateForm(initial=data) + # We have submitted the mini language interpreter if request.method == 'POST' and "intervalstring" in request.POST: form = SummaryStringForm(request.POST) @@ -11310,7 +11326,58 @@ def workout_summary_edit_view(request,id,message="",successmessage="" itime,idist,itype = rowdata.intervalstats_values() nrintervals = len(idist) savebutton = 'savestringform' - + powerupdateform = PowerIntervalUpdateForm() + + # we are saving the results obtained from the split by power/pace interpreter + elif request.method == 'POST' and "savepowerpaceform" in request.POST: + powerorpace = request.POST['powerorpace'] + value_pace = request.POST['value_pace'] + value_power = request.POST['value_power'] + if powerorpace == 'power': + power = int(value_power) + pace_secs = 120.0 + else: + power = 0 + pace_secs = float(value_pace) + + if powerorpace == 'power' and power is not None: + try: + rowdata.updateinterval_metric(' Power (watts)',power,mode='larger', + debug=False,smoothwindow=15) + except: + messages.error(request,'Error updating power') + elif powerorpace == 'pace': + try: + velo = 500./pace_secs + rowdata.updateinterval_metric(' AverageBoatSpeed (m/s)',velo,mode='larger', + debug=False,smoothwindow=15) + except: + messages.error(request,'Error updating pace') + + intervalstats = rowdata.allstats() + itime,idist,itype = rowdata.intervalstats_values() + nrintervals = len(idist) + + row.summary = intervalstats + row.save() + + rowdata.write_csv(f1,gzip=True) + messages.info(request,"Updated interval data saved") + data = { + 'power': power, + 'pace': datetime.timedelta(seconds=int(pace_secs)), + 'selector': powerorpace + } + form = SummaryStringForm() + powerupdateform = PowerIntervalUpdateForm(initial=data) + savebutton = 'savepowerpaceform' + formvalues = { + 'powerorpace': powerorpace, + 'value_power': power, + 'value_pace': pace_secs + } + + # we are saving the results obtained from the mini language interpreter elif request.method == 'POST' and "savestringform" in request.POST: s = request.POST["savestringform"] @@ -11339,6 +11406,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" messages.info(request,"Updated interval data saved") data = {'intervalstring':s} form = SummaryStringForm(initial=data) + powerupdateform = PowerIntervalUpdateForm() savebutton = 'savestringform' # we are saving the results obtained from the power update form @@ -11371,8 +11439,14 @@ def workout_summary_edit_view(request,id,message="",successmessage="" intervalstats = rowdata.allstats() itime,idist,itype = rowdata.intervalstats_values() nrintervals = len(idist) - savebutton = 'savestringform' + savebutton = 'savepowerpaceform' + formvalues = { + 'powerorpace': powerorpace, + 'value_power': power, + 'value_pace': pace_secs + } powerupdateform = PowerIntervalUpdateForm(initial=cd) + form = SummaryStringForm() form = SummaryStringForm() @@ -11428,6 +11502,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" messages.info(request,"Updated interval data saved") form = SummaryStringForm() + powerupdateform = PowerIntervalUpdateForm() # we are processing the details form elif request.method == 'POST' and "nrintervals" in request.POST: @@ -11472,10 +11547,9 @@ def workout_summary_edit_view(request,id,message="",successmessage="" form = SummaryStringForm() - - else: - form = SummaryStringForm() - powerupdateform = PowerIntervalUpdateForm() + powerupdateform = PowerIntervalUpdateForm() + + initial = {} for i in xrange(nrintervals): @@ -11500,6 +11574,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" 'the_div':div, 'intervalstring':s, 'savebutton':savebutton, + 'formvalues':formvalues, }) # Page where user can manage his favorite charts