diff --git a/rowers/forms.py b/rowers/forms.py
index 542f7cba..3cafb247 100644
--- a/rowers/forms.py
+++ b/rowers/forms.py
@@ -991,7 +991,9 @@ class SessionDateShiftForm(forms.Form):
class DeltaDaysForm(forms.Form):
deltadays = forms.IntegerField(initial=7, required=False, label='')
-
+class PlanByRscoreForm(forms.Form):
+ byrscore = forms.BooleanField(initial=False, required=False, label='plan by rScore')
+
class RegistrationForm(UserCreationForm):
"""
Form for registering a new user account.
diff --git a/rowers/models.py b/rowers/models.py
index e4e0cfe9..63da2915 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -2813,7 +2813,7 @@ class PlannedSession(models.Model):
self.sessionvalue = self.approximate_duration
elif self.sessionmode == 'distance': # pragma: no cover
self.sessionvalue = self.approximate_distance
- elif self.sessionmode == 'rscore': # pragma: no cover
+ elif self.sessionmode == 'rScore': # pragma: no cover
self.sessionvalue = self.approximate_rscore
super(PlannedSession, self).save(*args, **kwargs)
diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py
index 1b52f280..8b795e05 100644
--- a/rowers/plannedsessions.py
+++ b/rowers/plannedsessions.py
@@ -1063,7 +1063,7 @@ def get_workouts_session(r, ps):
return ws
-def create_sessions_from_json(plansteps, rower, startdate, manager):
+def create_sessions_from_json(plansteps, rower, startdate, manager, planbyrscore=False):
trainingdays = plansteps['trainingDays']
planstartdate = startdate
for day in trainingdays:
@@ -1076,6 +1076,10 @@ def create_sessions_from_json(plansteps, rower, startdate, manager):
preferreddate = planstartdate+timedelta(days=day['order'])
+ sessionmode = 'time'
+ if planbyrscore:
+ sessionmode = 'rScore'
+
ps = PlannedSession(
startdate=preferreddate -
timedelta(days=preferreddate.weekday()),
@@ -1086,7 +1090,7 @@ def create_sessions_from_json(plansteps, rower, startdate, manager):
name=workout['workoutName'],
steps=workout,
manager=manager,
- sessionmode='time',
+ sessionmode=sessionmode,
comment=workout['description']
)
diff --git a/rowers/templates/instantplan.html b/rowers/templates/instantplan.html
index 313d75d8..727bcbcf 100644
--- a/rowers/templates/instantplan.html
+++ b/rowers/templates/instantplan.html
@@ -58,6 +58,9 @@
{% endif %}
{{ form.as_table }}
+ {% if byrscoreform %}
+ {{ byrscoreform.as_table }}
+ {% endif %}
{% csrf_token %}
{% if plan.price|discounted:rower == 0 %}
diff --git a/rowers/utils.py b/rowers/utils.py
index 72e4b799..9ec563ad 100644
--- a/rowers/utils.py
+++ b/rowers/utils.py
@@ -690,7 +690,7 @@ def steps_write_fit(steps):
return filename
-def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7):
+def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones=None):
seconds = 0
distance = 0
rscore = 0
@@ -732,7 +732,9 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7):
if value != 0:
if value < 10 and value > 0: # pragma: no cover
- targetpower = ftp*0.6
+ targetpower = ftp*0.6 # dit is niet correct
+ if powerzones is not None and value < len(powerzones)-1 and value>1:
+ targetpower = (powerzones[int(value)-1]+powerzones[int(value)])/(2.)
elif value > 10 and value < 1000: # pragma: no cover
targetpower = value*ftp/100.
elif value > 1000:
@@ -890,15 +892,17 @@ def ps_dict_order(d, short=False, rower=None, html=True):
steps = d['steps']
ftp = 200
+ powerzones = None
if rower is not None:
ftp = rower.ftp
+ powerzones = [rower.pw_ut2, rower.pw_ut1, rower.pw_at, rower.pw_tr, rower.pw_an]
# ftv = rower.ftv
# ftspm = rower.ftspm
for step in steps:
sstring, type, stepID, repeatID, repeatValue = step_to_string(
step, short=short)
- seconds, meters, rscore = step_to_time_dist(step, ftp=ftp)
+ seconds, meters, rscore = step_to_time_dist(step, ftp=ftp, powerzones=powerzones)
sdict[stepID] = {
'string': sstring,
diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py
index 24b84ec4..e92669e1 100644
--- a/rowers/views/planviews.py
+++ b/rowers/views/planviews.py
@@ -1417,7 +1417,6 @@ def save_plan_yaml(request, userid=0):
elif ps.sessionmode == 'time':
ps.interval_string = '{d}min'.format(d=ps.sessionvalue)
elif ps.sessionmode == 'rScore':
- print('aap')
ps.approximate_duration = ps.sessionvalue
ps.interval_string = '{d}min'.format(d=ps.sessionvalue)
elif ps.sessionmode == 'TRIMP':
@@ -2670,6 +2669,14 @@ def rower_view_instantplan(request, id='', userid=0):
return HttpResponseRedirect(url)
form = InstantPlanSelectForm(request.POST, targets=targets)
+ byrscoreform = PlanByRscoreForm(request.POST)
+ if byrscoreform.is_valid():
+ try:
+ byrscore = byrscoreform.cleaned_data['byrscore']
+ except KeyError:
+ byrscore = False
+ else:
+ byrscore = False
if form.is_valid():
if plan.price > 0: # pragma: no cover
@@ -2718,7 +2725,7 @@ def rower_view_instantplan(request, id='', userid=0):
p.save()
p.rowers.add(r)
- create_sessions_from_json(plansteps, r, startdate, r.user)
+ create_sessions_from_json(plansteps, r, startdate, r.user, planbyrscore=byrscore)
messages.info(request, 'Your Sessions have been added')
@@ -2739,6 +2746,13 @@ def rower_view_instantplan(request, id='', userid=0):
}
form = InstantPlanSelectForm(
targets=targets, instantplan=plan, initial=initial)
+ if request.user.is_superuser:
+ byrscoreform = PlanByRscoreForm()
+ else:
+ byrscoreform = None
+
+
+
else: # pragma: no cover
form = None
@@ -2771,6 +2785,7 @@ def rower_view_instantplan(request, id='', userid=0):
'rower': r,
'active': 'nav-plan',
'plan': plan,
+ 'byrscoreform': byrscoreform,
'trainingdays': trainingdays2,
'breadcrumbs': breadcrumbs,
'form': form,
@@ -2983,6 +2998,7 @@ def rower_create_trainingplan(request, id=0):
initial={'status': False, 'rowers': [therower]},
user=request.user)
+
breadcrumbs = [
{
'url': reverse(plannedsessions_view,
diff --git a/rowers/views/statements.py b/rowers/views/statements.py
index 1dc57d34..a1d2acc3 100644
--- a/rowers/views/statements.py
+++ b/rowers/views/statements.py
@@ -113,7 +113,7 @@ from rowers.forms import (
StravaChartForm, FitnessFitForm, PerformanceManagerForm,
TrainingPlanBillingForm, InstantPlanSelectForm,
TrainingZonesForm, InstrokeForm, InStrokeMultipleCompareForm,
- ForceCurveMultipleCompareForm
+ ForceCurveMultipleCompareForm, PlanByRscoreForm
)
from django.urls import reverse, reverse_lazy