From 71c0a6f5ff97556f01f27a051e693aaa18581298 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Thu, 31 Aug 2017 16:24:05 +0200
Subject: [PATCH] added export as ride
---
rowers/models.py | 41 ++++++++++++++++++++++
rowers/stravastuff.py | 5 +--
rowers/templates/export.html | 9 +++++
rowers/templates/rower_exportsettings.html | 31 ++++++++++++++++
rowers/templates/rower_form.html | 12 +++++++
rowers/urls.py | 1 +
rowers/views.py | 24 +++++++++++--
7 files changed, 119 insertions(+), 4 deletions(-)
create mode 100644 rowers/templates/rower_exportsettings.html
diff --git a/rowers/models.py b/rowers/models.py
index 371331f5..cd626d7b 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -157,6 +157,38 @@ class Rower(models.Model):
('hwt','heavy-weight'),
('lwt','light-weight'),
)
+
+ stravatypes = (
+ ('Ride','Ride'),
+ ('Kitesurf','Kitesurf'),
+ ('Run','Run'),
+ ('NordicSki','NordicSki'),
+ ('Swim','Swim'),
+ ('RockClimbing','RockClimbing'),
+ ('Hike','Hike'),
+ ('RollerSki','RollerSki'),
+ ('Walk','Walk'),
+ ('Rowing','Rowing'),
+ ('AlpineSki','AlpineSki'),
+ ('Snowboard','Snowboard'),
+ ('BackcountrySki','BackcountrySki'),
+ ('Snowshoe','Snowshoe'),
+ ('Canoeing','Canoeing'),
+ ('StairStepper','StairStepper'),
+ ('Crossfit','Crossfit'),
+ ('StandUpPaddling','StandUpPaddling'),
+ ('EBikeRide','EBikeRide'),
+ ('Surfing','Surfing'),
+ ('Elliptical','Elliptical'),
+ ('VirtualRide','VirtualRide'),
+ ('IceSkate','IceSkate'),
+ ('WeightTraining','WeightTraining'),
+ ('InlineSkate','InlineSkate'),
+ ('Windsurf','Windsurf'),
+ ('Kayaking','Kayaking'),
+ ('Workout','Workout'),
+ ('Yoga','Yoga'),
+ )
user = models.OneToOneField(User)
# Heart Rate Zone data
@@ -215,6 +247,10 @@ class Rower(models.Model):
blank=True,null=True)
stravatoken = models.CharField(default='',max_length=200,blank=True,null=True)
+ stravaexportas = models.CharField(default="Rowing",
+ max_length=30,
+ choices=stravatypes,
+ verbose_name="Export Workouts to Strava as")
runkeepertoken = models.CharField(default='',max_length=200,
blank=True,null=True)
@@ -558,6 +594,11 @@ class AdvancedWorkoutForm(ModelForm):
model = Workout
fields = ['boattype','weightvalue']
+class RowerExportForm(ModelForm):
+ class Meta:
+ model = Rower
+ fields = ['stravaexportas']
+
# Simple form to set rower's Functional Threshold Power
class RowerPowerForm(ModelForm):
class Meta:
diff --git a/rowers/stravastuff.py b/rowers/stravastuff.py
index cf9378ed..c41dfa64 100644
--- a/rowers/stravastuff.py
+++ b/rowers/stravastuff.py
@@ -276,7 +276,8 @@ def createstravaworkoutdata(w,dozip=True):
# Upload the TCX file to Strava and set the workout activity type
# to rowing on Strava
-def handle_stravaexport(f2,workoutname,stravatoken,description=''):
+def handle_stravaexport(f2,workoutname,stravatoken,description='',
+ activity_type='Rowing'):
# w = Workout.objects.get(id=workoutid)
client = stravalib.Client(access_token=stravatoken)
@@ -291,7 +292,7 @@ def handle_stravaexport(f2,workoutname,stravatoken,description=''):
# description doesn't work yet. Have to wait for stravalib to update
if res:
- act = client.update_activity(res.id,activity_type='Rowing',description=description,device_name='Rowsandall.com')
+ act = client.update_activity(res.id,activity_type=activity_type,description=description,device_name='Rowsandall.com')
else:
message = 'Strava activity update timed out.'
return (0,message)
diff --git a/rowers/templates/export.html b/rowers/templates/export.html
index 3953b013..6ccd0bb6 100644
--- a/rowers/templates/export.html
+++ b/rowers/templates/export.html
@@ -188,6 +188,15 @@

+
+
+
Export Settings
+
+
+
+
diff --git a/rowers/templates/rower_exportsettings.html b/rowers/templates/rower_exportsettings.html
new file mode 100644
index 00000000..fbaa80e2
--- /dev/null
+++ b/rowers/templates/rower_exportsettings.html
@@ -0,0 +1,31 @@
+{% extends "base.html" %}
+
+{% block title %}Change Rower Export Settings{% endblock %}
+
+{% block content %}
+
+
+
+
Export Settings
+ {% if form.errors %}
+
+ Please correct the error{{ form.errors|pluralize }} below.
+
+ {% endif %}
+
+
+
+
+
+
+{% endblock %}
diff --git a/rowers/templates/rower_form.html b/rowers/templates/rower_form.html
index 9fc7b380..da9029a4 100644
--- a/rowers/templates/rower_form.html
+++ b/rowers/templates/rower_form.html
@@ -169,6 +169,18 @@
+
+
+
+
Export Settings
+
+
+
+
+
+
diff --git a/rowers/urls.py b/rowers/urls.py
index 80abf3e3..3f6f005d 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -252,6 +252,7 @@ urlpatterns = [
url(r'^user-multiflex/$',views.multiflex_view),
url(r'^user-multiflex$',views.multiflex_view),
url(r'^me/teams/$',views.rower_teams_view),
+ url(r'^me/exportsettings/$',views.rower_exportsettings_view),
url(r'^team/(?P\d+)/$',views.team_view),
url(r'^team/(?P\d+)/memberstats$',views.team_members_stats_view),
url(r'^team/(?P\d+)/edit$',views.team_edit_view),
diff --git a/rowers/views.py b/rowers/views.py
index 108f04ef..f59a18ca 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -43,7 +43,7 @@ from rowers.models import (
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
RowerPowerZonesForm,AccountRowerForm,UserForm,StrokeData,
Team,TeamForm,TeamInviteForm,TeamInvite,TeamRequest,
- WorkoutComment,WorkoutCommentForm
+ WorkoutComment,WorkoutCommentForm,RowerExportForm,
)
from rowers.models import FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement
from django.forms.formsets import formset_factory
@@ -1351,9 +1351,11 @@ def workout_strava_upload_view(request,id=0):
newnotes = w.notes+'\n from '+w.workoutsource+' via rowsandall.com'
except TypeError:
newnotes = 'from '+w.workoutsource+' via rowsandall.com'
+ activity_type = r.stravaexportas
res,mes = stravastuff.handle_stravaexport(f,w.name,
r.stravatoken,
- description=newnotes)
+ description=newnotes,
+ activity_type=activity_type)
if res==0:
messages.error(request,mes)
w.uploadedtostrava = -1
@@ -8463,6 +8465,24 @@ def rower_favoritecharts_view(request):
return render(request,'favoritecharts.html',context)
+# page where user sets his export settings
+@login_required()
+def rower_exportsettings_view(request):
+ r = getrower(request.user)
+ if request.method == 'POST':
+ form = RowerExportForm(request.POST)
+ if form.is_valid():
+ stravaexportas = form.cleaned_data['stravaexportas']
+ r.stravaexportas = stravaexportas
+ r.save()
+ else:
+ form = RowerExportForm(instance=r)
+ return render(request, 'rower_exportsettings.html',
+ {'form':form,
+ 'rower':r,
+ })
+
+
# Page where user can set his details
# Add email address to form so user can change his email address
@login_required()