Private
Public Access
1
0

new feature first code

This commit is contained in:
2025-01-09 14:33:28 +01:00
parent d9ffc16127
commit e191ab4fc3
3 changed files with 60 additions and 3 deletions

View File

@@ -1274,7 +1274,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
pass
# recalculate power data
if workouttype == 'rower' or workouttype == 'dynamic' or workouttype == 'slides':
if workouttype in otetypes:
try:
if r.erg_recalculatepower:
row.erg_recalculatepower()
@@ -1282,6 +1282,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
except:
pass
averagehr = row.df[' HRCur (bpm)'].mean()
maxhr = row.df[' HRCur (bpm)'].max()
@@ -1451,6 +1452,33 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
_ = update_wps(r, mytypes.otwtypes)
_ = update_wps(r, mytypes.otetypes)
# set user running wps
if workouttype in otetypes:
cntr = Workout.objects.filter(user=r, workouttype__in=otetypes,
startdatetime__gt=tz.now()-tz.timedelta(days=42)).count()
new_value = (cntr*r.running_wps_erg + row.df['driveenergy'].mean())/(cntr+1.0)
# if new_value is not zero or infinite or -inf, r.running_wps can be set to value
if not (math.isnan(new_value) or math.isinf(new_value) or new_value == 0):
r.running_wps_erg = new_value
elif not (math.isnan(r.running_wps_erg) or math.isinf(r.running_wps_erg) or r.running_wps_erg == 0):
pass
else:
r.running_wps_erg = 600.
r.save()
if workouttype in otwtypes:
cntr = Workout.objects.filter(user=r, workouttype__in=otwtypes,
startdatetime__gt=tz.now()-tz.timedelta(days=42)).count()
new_value = (cntr*r.running_wps_erg + row.df['driveenergy'].mean())/(cntr+1.0)
if not (math.isnan(new_value) or math.isinf(new_value) or new_value == 0):
r.running_wps = new_value
elif not (math.isnan(r.running_wps) or math.isinf(r.running_wps) or r.running_wps == 0):
pass
else:
r.running_wps = 400.
r.save()
_ = myqueue(queuehigh, handle_calctrimp, w.id, f2,
r.ftp, r.sex, r.hrftp, r.max, r.rest)

View File

@@ -40,41 +40,58 @@
<table class="listtable shortpadded" width=100%>
<thead>
<tr>
<th>ID&nbsp;</th><th>Zone Name</th><th>Lower Boundary (Watt)&nbsp;</th><th>Lower Boundary (Watt)</th>
<th>ID&nbsp;</th>
<th>Zone Name</th>
<th>Lower Boundary (Watt)&nbsp;</th>
<th>Lower Boundary (Watt)</th>
<th>Target SPM</th>
<th>Target SPM</th>
</tr>
<tr>
<th></th><th></th><th>Indoor</th><th>OTW</th>
<th></th><th></th><th>Indoor</th><th>OTW</th><th>Indoor</th><th>OTW</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td><td>{{ user.rower.powerzones.0 }}</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>2</td><td>{{ user.rower.powerzones.1 }}</td>
<td>{{ user.rower.pw_ut2 }}</td>
<td>{{ user.rower.pw_ut2|otwslack:user }}</td>
<td>{{ user.rower.pw_ut2|target_spm_erg:user }}</td>
<td>{{ user.rower.pw_ut2|target_spm_otw:user }}</td>
</tr>
<tr>
<td>3</td><td>{{ user.rower.powerzones.2 }}</td>
<td>{{ user.rower.pw_ut1 }}</td>
<td>{{ user.rower.pw_ut1|otwslack:user }}</td>
<td>{{ user.rower.pw_ut1|target_spm_erg:user }}</td>
<td>{{ user.rower.pw_ut1|target_spm_otw:user }}</td>
</tr>
<tr>
<td>4</td><td>{{ user.rower.powerzones.3 }}</td>
<td>{{ user.rower.pw_at }}</td>
<td>{{ user.rower.pw_at|otwslack:user }}</td>
<td>{{ user.rower.pw_at|target_spm_erg:user }}</td>
<td>{{ user.rower.pw_at|target_spm_otw:user }}</td>
</tr>
<tr>
<td>5</td><td>{{ user.rower.powerzones.4 }}</td>
<td>{{ user.rower.pw_tr }}</td>
<td>{{ user.rower.pw_tr|otwslack:user }}</td>
<td>{{ user.rower.pw_tr|target_spm_erg:user }}</td>
<td>{{ user.rower.pw_tr|target_spm_otw:user }}</td>
</tr>
<tr>
<td>6</td><td>{{ user.rower.powerzones.5 }}</td>
<td>{{ user.rower.pw_an }}</td>
<td>{{ user.rower.pw_an|otwslack:user }}</td>
<td>{{ user.rower.pw_an|target_spm_erg:user }}</td>
<td>{{ user.rower.pw_an|target_spm_otw:user }}</td>
</tr>
</tbody>
</table>

View File

@@ -1065,3 +1065,15 @@ def previousworkout(workout, user):
def otwslack(value, user):
r = Rower.objects.get(user=user)
return int(value*(100.-r.otwslack)/100.)
@register.filter
def target_spm_erg(value, user):
r = Rower.objects.get(user=user)
value = 1.0*value
return int(value*60/r.running_wps_erg)
@register.filter
def target_spm_otw(value, user):
r = Rower.objects.get(user=user)
value = value*(100.-r.otwslack)/100.
return int(value*60/r.running_wps)