diff --git a/rowers/fitness.py b/rowers/fitness.py index 2d2986cc..d67873ef 100644 --- a/rowers/fitness.py +++ b/rowers/fitness.py @@ -58,6 +58,7 @@ def getfatigues(df, fatigues, fitnesses, dates, impulses, startdate, kfatigue, k return fatigues, fitnesses, dates, impulses def calculate_fitness(rower, reset=False): + try: w_last = Workout.objects.get(id=rower.last_workout) datetime_last = w_last.startdatetime @@ -72,6 +73,9 @@ def calculate_fitness(rower, reset=False): rower.save() datetime_last = datetime.datetime.now() - datetime.timedelta(days=90) + if not datetime_last: + datetime_last = datetime.datetime.now() - datetime.timedelta(days=90) + workouts = Workout.objects.filter(user=rower, startdatetime__gt=datetime_last, duplicate=False).order_by('date').exclude(id=rower.last_workout) diff --git a/rowers/models.py b/rowers/models.py index 611574d4..5a6052c5 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3854,9 +3854,9 @@ class Workout(models.Model): if self.timezone == 'tzutc()': self.timezone = 'UTC' # pragma: no cover - if self.workouttype in mytypes.otwtypes and self.boattype in mytypes.ergtypes: + if self.workouttype in mytypes.otwtypes and self.boattype in mytypes.ergtypes_check: self.boattype = '1x' - elif self.workouttype in mytypes.otetypes and self.boattype in mytypes.boattypes: + elif self.workouttype in mytypes.otetypes and self.boattype in mytypes.boattypes_check: self.boattype = 'static' records = VirtualRaceResult.objects.filter(workoutid=self.pk) diff --git a/rowers/mytypes.py b/rowers/mytypes.py index c46752f7..407329e8 100644 --- a/rowers/mytypes.py +++ b/rowers/mytypes.py @@ -513,6 +513,9 @@ ergtypes = ( ('other','Other Indoor Rower'), ) +boattypes_check = [i[0] for i in boattypes] +ergtypes_check = [i[0] for i in ergtypes] + adaptivetypes = ( diff --git a/rowers/tasks.py b/rowers/tasks.py index 395eb94b..4465de13 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -4073,6 +4073,43 @@ def handle_c2_async_workout(alldata, userid, c2token, c2id, delaysec, return workoutid +@app.task +def handle_split_workout_by_intervals(id, debug=False, **kwargs): + row = Workout.objects.get(id=id) + r = row.user + rowdata = rdata(csvfile=row.csvfilename) + if rowdata == 0: + messages.error(request,"No Data file found for this workout") + return HttpResponseRedirect(url) + + new_rowdata = rowdata.split_by_intervals() + interval_i = 1 + for data in new_rowdata: + filename = 'media/{code}.csv'.format( + code = uuid4() .hex[:16] + ) + + data.write_csv(filename) + + uploadoptions = { + 'secret': UPLOAD_SERVICE_SECRET, + 'user': r.user.id, + 'title': '{title} - interval {i}'.format(title=row.name, i=interval_i), + 'file': filename, + 'boattype': row.boattype, + 'workouttype': row.workouttype, + } + + session = requests.session() + newHeaders = {'Content-type': 'application/json', 'Accept': 'text/plan'} + session.headers.update(newHeaders) + response = session.post(UPLOAD_SERVICE_URL, json=uploadoptions) + + interval_i = interval_i + 1 + + return 1 + + @app.task def fetch_rojabo_session(id,alldata,userid,rowerid,debug=False, **kwargs): # pragma: no cover try: diff --git a/rowers/templates/summary_edit.html b/rowers/templates/summary_edit.html index 886194e6..7d4989be 100644 --- a/rowers/templates/summary_edit.html +++ b/rowers/templates/summary_edit.html @@ -80,6 +80,8 @@ Reset to last saved Restore Original data + + Split Workout by Intervals
diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz
index 48a54374..288068f6 100644
Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ
diff --git a/rowers/urls.py b/rowers/urls.py
index 65db0431..3fca9aa8 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -538,6 +538,8 @@ urlpatterns = [
views.workout_downloadmetar_view, name='workout_downloadmetar_view'),
re_path(r'^workout/(?P