diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 9dfb3e68..d495185a 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -860,20 +860,36 @@ def split_workout(r,parent,splitsecond,splitmode): ids = [] if 'keep first' in splitmode: + if 'secondprivate' in splitmode: + setprivate = True + else: + setprivate = False + id,message = new_workout_from_df(r,data1, title=parent.name+' First Part', - parent=parent) + parent=parent, + setprivate=setprivate) messages.append(message) ids.append(id) if 'keep second' in splitmode: data2['cumdist'] = data2['cumdist'] - data2.ix[0,'cumdist'] data2['distance'] = data2['distance'] - data2.ix[0,'distance'] data2['time'] = data2['time'] - data2.ix[0,'time'] + if 'secondprivate' in splitmode: + setprivate = True + else: + setprivate = False + + dt = datetime.timedelta(seconds=splitsecond) + id,message = new_workout_from_df(r,data2, title=parent.name+' Second Part', - parent=parent) + parent=parent, + setprivate=setprivate, + dt=dt) messages.append(message) ids.append(id) + if not 'keep original' in splitmode: if 'keep second' in splitmode or 'keep first' in splitmode: @@ -882,6 +898,9 @@ def split_workout(r,parent,splitsecond,splitmode): else: messages.append('That would delete your workout') ids.append(parent.id) + elif 'originalprivate' in splitmode: + parent.privacy = 'hidden' + parent.save() return ids,messages @@ -890,7 +909,9 @@ def split_workout(r,parent,splitsecond,splitmode): # Currently there is code duplication def new_workout_from_df(r,df, title='New Workout', - parent=None): + parent=None, + setprivate=False, + dt=datetime.timedelta()): message = None @@ -902,7 +923,7 @@ def new_workout_from_df(r,df, notes=parent.notes summary=parent.summary makeprivate=parent.privacy - startdatetime=parent.startdatetime + startdatetime=parent.startdatetime+dt else: oarlength = 2.89 inboard = 0.88 @@ -912,6 +933,9 @@ def new_workout_from_df(r,df, makeprivate=False startdatetime = timezone.now() + if setprivate: + makeprivate=True + timestr = strftime("%Y%m%d-%H%M%S") csvfilename ='media/df_'+timestr+'.csv' @@ -921,7 +945,7 @@ def new_workout_from_df(r,df, starttimeunix = mktime(startdatetime.utctimetuple()) df[' ElapsedTime (sec)'] = df['TimeStamp (sec)'] - print df[' ElapsedTime (sec)'].values + df['TimeStamp (sec)'] = df['TimeStamp (sec)']+starttimeunix row = rrdata(df=df) diff --git a/rowers/forms.py b/rowers/forms.py index 59d85ebf..eecde602 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -116,14 +116,26 @@ class WorkoutSplitForm(forms.Form): ('keep original','Keep Original'), ('keep first','Keep First Part'), ('keep second','Keep Second Part'), + ('firstprivate','Set First Part Private'), + ('secondprivate','Set Second Part Private'), + ('originalprivate','Set Original Private'), ) - splittime = forms.TimeField(input_formats=['%H:%M:%S.%f','%H:%M:%S','%M:%S.%f']) + splittime = forms.TimeField(input_formats=['%H:%M:%S.%f', + '%H:%M:%S', + '%H:%M:%S', + '%M:%S.%f', + '%M:%S', + '%M'], + label = 'Split Time') splitmode = forms.MultipleChoiceField( initial=['keep original', 'keep first', - 'keep second'], + 'keep second', + 'firstprivate', + 'secondprivate'], label='Split Mode', - choices=splitchoices) + choices=splitchoices, + widget = forms.CheckboxSelectMultiple()) # This form is used on the Analysis page to add a custom distance/time # trial and predict the pace diff --git a/rowers/templates/advancedotw.html b/rowers/templates/advancedotw.html index 3b8ac298..abbccd67 100644 --- a/rowers/templates/advancedotw.html +++ b/rowers/templates/advancedotw.html @@ -190,18 +190,30 @@ See (and save) the big interactive plot

-
+

{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} Sensor Fusion {% else %} - Dist Metrics Plot + Split Workout {% endif %}

Merge data from another source into this workout

+
+

+ {% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %} + Split Workout + {% else %} + Split Workout + {% endif %} +

+

+ Split workout into two seperate workouts +

+
diff --git a/rowers/templates/splitworkout.html b/rowers/templates/splitworkout.html index 3d9b1fda..a264f626 100644 --- a/rowers/templates/splitworkout.html +++ b/rowers/templates/splitworkout.html @@ -38,29 +38,8 @@ {% localtime on %} - - - - - - - - - - - - -
Date/Time:{{ workout.startdatetime }}
Distance:{{ workout.distance }}m
Duration:{{ workout.duration |durationprint:"%H:%M:%S.%f" }}
Public link to this workout - https://rowsandall.com/rowers/workout/{{ workout.id }} - -
Public link to interactive chart - https://rowsandall.com/rowers/workout/{{ workout.id }}/interactiveplot - -
- {% endlocaltime %} -

Workout Split

-

Split your workout in half

- + +

{{ form.as_table }} @@ -70,6 +49,22 @@ +

+

Workout Split

+

Split your workout in half at the given time using the form above. + Use the chart on + the right to find the point where you want to split.

+

Use any of the following formats: +

+

+

Warning: If you deselect, "Keep Original", the original workout + cannot be restored afterwards.

+
@@ -106,6 +101,29 @@
{{ thediv |safe }}
+ +
+ + + + + + + + + + + +
Date/Time:{{ workout.startdatetime }}
Distance:{{ workout.distance }}m
Duration:{{ workout.duration |durationprint:"%H:%M:%S.%f" }}
Public link to this workout + https://rowsandall.com/rowers/workout/{{ workout.id }} + +
Public link to interactive chart + https://rowsandall.com/rowers/workout/{{ workout.id }}/interactiveplot + +
+ {% endlocaltime %} + + diff --git a/rowers/views.py b/rowers/views.py index f1be7269..b4bab4f6 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -7948,8 +7948,6 @@ def workout_split_view(request,id=id): raise Http404("Workout doesn't exist") r = getrower(request.user) - if not checkworkoutuser(request.user,row): - raise PermissionDenied("You are not allowed to edit this workout") if request.method == 'POST': form = WorkoutSplitForm(request.POST) @@ -7965,6 +7963,9 @@ def workout_split_view(request,id=id): messages.info(request,message) url = reverse(workouts_view) + qdict = {'q':row.name} + url+='?'+urllib.urlencode(qdict) + return HttpResponseRedirect(url) form = WorkoutSplitForm()