diff --git a/rowers/datautils.py b/rowers/datautils.py index 38955129..d0d9fe23 100644 --- a/rowers/datautils.py +++ b/rowers/datautils.py @@ -32,6 +32,7 @@ def rscore_approx(row): else: dd = 3600*row['duration'].hour+60*row['duration'].minute+row['duration'].second dd = dd/3600 + print(row['rpe'],dd,rpetotss[row['rpe']]) return rpetotss[row['rpe']]*dd if row['rscore'] < 0: w = Workout.objects.get(id=row['id']) @@ -41,7 +42,11 @@ def rscore_approx(row): dd = 3600*row['duration'].hour+60*row['duration'].minute+row['duration'].second dd = dd/3600 return rpetotss[row['rpe']]*dd + else: # pragma: no cover + minutes = row['duration'].hour*60+row['duration'].minute + return minutes + print('boer') return 0 def updatecp(delta, cpvalues, r, workouttype='water'): # pragma: no cover diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index b3390f47..7089f993 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -1507,21 +1507,8 @@ def weightfromrecord(row,metricchoice): vv = row[metricchoice] if vv > 0: return vv - if vv == 0: - if metricchoice == 'rscore' and row['hrtss'] > 0: # pragma: no cover - return row['hrtss'] - else: - dd = 3600*row['duration'].hour+60*row['duration'].minute+row['duration'].second - dd = dd/3600 - return rpetotss[row['rpe']]*dd - if vv < 0: - w = Workout.objects.get(id=row['id']) - trimp, hrtss = dataprep.workout_trimp(w) - rscore, normp = dataprep.workout_rscore(w) - if row['rpe'] and row['rpe'] > 0: # pragma: no cover - dd = 3600*row['duration'].hour+60*row['duration'].minute+row['duration'].second - dd = dd/3600 - return rpetotss[row['rpe']]*dd + if metricchoice == 'rscore': + return rscore_approx(row) return 0 diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 8b795e05..5558796a 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -257,13 +257,16 @@ def get_execution_report(rower, startdate, enddate, plan=None): plannedsession=None, date__gte=mm.startdate, date__lte=mm.enddate).exclude(duplicate=True) for w in unmatchedworkouts: - if w.rscore != 0: - actualscore += w.rscore - elif w.hrtss != 0: # pragma: no cover - actualscore += w.hrtss - else: # pragma: no cover - minutes = w.duration.hour*60+w.duration.minute - actualscore += minutes + row = { + 'rscore': w.rscore, + 'hrtss': w.hrtss, + 'rpe': w.rpe, + 'duration': w.duration, + 'id': w.id + } + rscore = datautils.rscore_approx(row) + actualscore += rscore + for ps in sps: # pragma: no cover ratio, status, cdate = is_session_complete(rower, ps) if ps.sessionmode == 'rScore': @@ -576,11 +579,15 @@ def get_session_metrics(ps): durationv += timefield_to_seconds_duration(w.duration) thetrimp, hrtss = dataprep.workout_trimp(w) trimpv += thetrimp - tss = dataprep.workout_rscore(w)[0] - if not np.isnan(tss) and tss != 0: - rscorev += tss - elif tss == 0: # pragma: no cover - rscorev += hrtss + row = { + 'rscore': w.rscore, + 'hrtss': w.hrtss, + 'rpe': w.rpe, + 'duration': w.duration, + 'id': w.id + } + tss = datautils.rscore_approx(row) + rscorev += tss ratio, statusv, completiondate = is_session_complete_ws(ws, ps) try: @@ -674,13 +681,15 @@ def is_session_complete_ws(ws, ps): trimp, hrtss = dataprep.workout_trimp(w) score += trimp elif ps.sessionmode == 'rScore': - rscore = dataprep.workout_rscore(w)[0] - if not np.isnan(rscore) and rscore != 0: - score += rscore - elif rscore == 0: # pragma: no cover - trimp, hrtss = dataprep.workout_trimp(w) - score += hrtss - + row = { + 'rscore': w.rscore, + 'hrtss': w.hrtss, + 'rpe': w.rpe, + 'duration': w.duration, + 'id': w.id + } + rscore = datautils.rscore_approx(row) + score += rscore if not completiondate and score >= cratiomin*value: completiondate = w.date diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index b4b43516..18dfda4e 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ