diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 982733b7..01557032 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -428,7 +428,7 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower', isbreakthrough = False if workouttype == 'water': delta,cpvalues,avgpower = datautils.getsinglecp(row.df) - if utils.isbreakthrough(delta,cpvalues,r.p0,r.p1,r.p2,r.p3): + if utils.isbreakthrough(delta,cpvalues,r.p0,r.p1,r.p2,r.p3,r.cpratio): isbreakthrough = True res = datautils.updatecp(delta,cpvalues,r) diff --git a/rowers/datautils.py b/rowers/datautils.py index 7c1d9136..298280d4 100644 --- a/rowers/datautils.py +++ b/rowers/datautils.py @@ -27,6 +27,7 @@ def updatecp(delta,cpvalues,r): r.p1 = p1[1] r.p2 = p1[2] r.p3 = p1[3] + r.cpratio = res[3] r.save() diff --git a/rowers/forms.py b/rowers/forms.py index 4e57a619..8b1e7622 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -131,7 +131,7 @@ class PredictedPieceForm(forms.Form): ) pieceunit = forms.ChoiceField(required=True,choices=unitchoices, initial='t',label='Unit') - value = forms.IntegerField(initial=10,label='Value') + value = forms.FloatField(initial=10,label='Value') class Meta: fields = ['value','pieceunit'] diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 7200497e..b1c7bada 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -687,7 +687,7 @@ def interactive_otwcpchart(powerdf,promember=0): script, div = components(plot) - return [script,div,p1,message] + return [script,div,p1,ratio,message] def interactive_cpchart(thedistances,thesecs,theavpower, theworkouts,promember=0): diff --git a/rowers/models.py b/rowers/models.py index 6922265f..1c305c70 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -178,6 +178,7 @@ class Rower(models.Model): p1 = models.FloatField(default=1.0,verbose_name="CP p2") p2 = models.FloatField(default=1.0,verbose_name="CP p3") p3 = models.FloatField(default=1.0,verbose_name="CP p4") + cpratio = models.FloatField(default=1.0,verbose_name="CP fit ratio") otwslack = models.IntegerField(default=0,verbose_name="OTW Power slack") diff --git a/rowers/templates/502.html b/rowers/templates/502.html new file mode 100644 index 00000000..bbf6f82f --- /dev/null +++ b/rowers/templates/502.html @@ -0,0 +1,596 @@ + + + + + + + + +
+ + + + + + + + + + + + + ++ No valid server response received. This can have multiple reasons, + including time-outs or reaching the capacity limit. +
+ +No ranking pieces found.
' @@ -2977,18 +2979,20 @@ def otwrankings_view(request,theuser=0, clean = form.is_valid() value = form.cleaned_data['value'] hourvalue,value = divmod(value,60) + hourvalue = int(hourvalue) + minutevalue = int(value) + value = int(60*(value-minutevalue)) if hourvalue >= 24: hourvalue = 23 - rankingdurations.append(datetime.time(minute=value,hour=hourvalue)) + rankingdurations.append(datetime.time(minute=minutevalue, + hour=hourvalue, + second=value)) else: form = PredictedPieceForm() - predictions = [] cpredictions = [] - - for rankingduration in rankingdurations: t = 3600.*rankingduration.hour t += 60.*rankingduration.minute @@ -3000,13 +3004,17 @@ def otwrankings_view(request,theuser=0, pwr = p1[0]/(1+t/p1[2]) pwr += p1[1]/(1+t/p1[3]) + if pwr <= 0: pwr = 50. + if not np.isnan(pwr): + pwr2 = pwr*ratio a = { 'duration':timedeltaconv(t), - 'power':int(pwr)} + 'power':int(pwr), + 'upper':int(pwr2)} cpredictions.append(a) @@ -3017,7 +3025,6 @@ def otwrankings_view(request,theuser=0, {'rankingworkouts':theworkouts, 'interactiveplot':script, 'the_div':div, - 'predictions':predictions, 'cpredictions':cpredictions, 'avgpower':avgpower, 'form':form, diff --git a/rowsanda_107501 b/rowsanda_107501 index c733aeb4..623c0cb6 100644 Binary files a/rowsanda_107501 and b/rowsanda_107501 differ diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index 2831f3ee..0a81b4fe 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -134,11 +134,11 @@ WSGI_APPLICATION = 'rowsandall_app.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'rowsanda_107501', - 'USER': 'rowsanda_107501', - 'PASSWORD': 'roeidata', - 'HOST': 'store3.rosti.cz', - 'PORT': '3306', + 'NAME': CFG['db_name'], + 'USER': CFG['db_user'], + 'PASSWORD': CFG['db_password'], + 'HOST': CFG['db_host'], + 'PORT': CFG['db_port'], }, 'slave': { 'ENGINE': 'django.db.backends.sqlite3',