export & import views - line 321 urls.py
This commit is contained in:
@@ -1,34 +1,35 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "newbase.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load rowerfilters %}
|
||||
|
||||
{% block title %}Workouts{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% block main %}
|
||||
<h1>Available on C2 Logbook</h1>
|
||||
|
||||
<ul class="main-content">
|
||||
{% if workouts %}
|
||||
<div class="grid_2 alpha ">
|
||||
<a href="/rowers/workout/c2import/all/{{ page }}" class="button gray">Import all NEW</a>
|
||||
</div>
|
||||
<div class="grid_6">
|
||||
<li class="grid_2">
|
||||
<a href="/rowers/workout/c2import/all/{{ page }}">Import all NEW</a>
|
||||
<p>This imports all workouts that have not been imported to rowsandall.com.
|
||||
The action may take a longer time to process, so please be patient. Click on Import in the list below to import an individual workout.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid_2">
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
<p>
|
||||
<span>
|
||||
{% if page > 1 %}
|
||||
<a class="button gray" href="/rowers/workout/c2list/{{ page|add:-1 }}"><</a>
|
||||
{% else %}
|
||||
|
||||
<a class="wh" title="Previous" href="/rowers/workout/c2list/{{ page|add:-1 }}">
|
||||
<i class="fas fa-arrow-alt-left"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="grid_2 omega">
|
||||
<a class="button gray" href="/rowers/workout/c2list/{{ page|add:1 }}">></a>
|
||||
</div>
|
||||
|
||||
<div class="grid_12 alpha">
|
||||
<a class="wh" title="Next" href="/rowers/workout/c2list/{{ page|add:1 }}">
|
||||
<i class="fas fa-arrow-alt-right"></i>
|
||||
</a>
|
||||
</span>
|
||||
</p>
|
||||
</li>
|
||||
<li class="grid_4">
|
||||
<table width="70%" class="listtable">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -61,8 +62,13 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</li>
|
||||
{% else %}
|
||||
<p> No workouts found </p>
|
||||
{% endif %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% include 'menu_workouts.html' %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -113,15 +113,111 @@
|
||||
<input type="checkbox" name="group-export" id="group-export">
|
||||
<label for="group-export">Export</label>
|
||||
<ul>
|
||||
<li id="export-c2"><a href="/rowers/workout/{{ workout.id }}/c2uploadw">Concept2</a></li>
|
||||
<li id="export-strava"><a href="/rowers/workout/{{ workout.id }}/stravauploadw">Strava</a></li>
|
||||
<li id="export-st"><a href="/rowers/workout/{{ workout.id }}/sporttracksuploadw">SportTracks</a></li>
|
||||
<li id="export-rk"><a href="/rowers/workout/{{ workout.id }}/runkeeperuploadw">Runkeeper</a></li>
|
||||
<li id="export-mmf"><a href="/rowers/workout/{{ workout.id }}/underarmouruploadw">MapMyFitness</a></li>
|
||||
<li id="export-tp"><a href="/rowers/workout/{{ workout.id }}/tpuploadw">TrainingPeaks</a></li>
|
||||
<li id="export-csv"><a href="/rowers/workout/{{ workout.id }}/emailcsv">CSV</a></li>
|
||||
<li id="export-gpx"><a href="/rowers/workout/{{ workout.id }}/emailgpx">GPX</a></li>
|
||||
<li id="export-tcx"><a href="/rowers/workout/{{ workout.id }}/emailtcx">TCX</a></li>
|
||||
<li id="export-c2">
|
||||
{% if workout.uploadedtoc2 %}
|
||||
<a href="http://log.concept2.com/profile/{{ user|c2userid }}/log/{{ workout.uploadedtoc2 }}">
|
||||
Concept2 <i class="fas fa-check"></i>
|
||||
</a>
|
||||
{% elif user.rower.c2token == None or user.rower.c2token == '' %}
|
||||
<a href="/rowers/me/c2authorize">
|
||||
Connect to Concept2
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/c2uploadw">
|
||||
Concept2
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li id="export-strava">
|
||||
{% if workout.uploadedtostrava %}
|
||||
<a href="https://www.strava.com/activities/{{ workout.uploadedtostrava }}">
|
||||
Strava <i class="fas fa-check"></i>
|
||||
</a>
|
||||
{% elif user.rower.stravatoken == None or user.rower.stravatoken == '' %}
|
||||
<a href="/rowers/me/stravaauthorize">
|
||||
Connect to Strava
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/stravauploadw">
|
||||
Strava
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li id="export-st">
|
||||
{% if workout.uploadedtosporttracks %}
|
||||
<a href="https://sporttracks.mobi/activity/{{ workout.uploadedtosporttracks }}">
|
||||
SportTracks <i class="fas fa-check"></i>
|
||||
</a>
|
||||
{% elif user.rower.sporttrackstoken == None or user.rower.sporttrackstoken == '' %}
|
||||
<a href="/rowers/me/sporttracksauthorize">
|
||||
Connect to SportTracks
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/sporttracksuploadw">
|
||||
SportTracks
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li id="export-rk">
|
||||
{% if workout.uploadedtorunkeeper %}
|
||||
<a href="https://runkeeper.com/user/{{ rower|rkuserid }}/activity/{{ workout.uploadedtorunkeeper }}">
|
||||
Runkeeper <i class="fas fa-check"></i>
|
||||
</a>
|
||||
{% elif user.rower.runkeepertoken == None or user.rower.runkeepertoken == '' %}
|
||||
<a href="/rowers/me/runkeeperauthorize">
|
||||
Connect to Runkeeper
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/runkeeperuploadw">
|
||||
Runkeeper
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li id="export-mmf">
|
||||
{% if workout.uploadedtounderarmour %}
|
||||
<a href="https://www.mapmyfitness.com/workout/{{ workout.uploadedtounderarmour }}">
|
||||
MapMyFitness <i class="fas fa-check"></i>
|
||||
</a>
|
||||
{% elif user.rower.underarmourtoken == None or user.rower.underarmourtoken == '' %}
|
||||
<a href="/rowers/me/underarmourauthorize">
|
||||
Connect to MapMyFitness
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/underarmouruploadw">
|
||||
MapMyFitness
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li id="export-tp">
|
||||
{% if workout.uploadedtotp %}
|
||||
<a href="https://app.trainingpeaks.com">
|
||||
TrainingPeaks <i class="fas fa-check"></i>
|
||||
</a>
|
||||
{% elif user.rower.tptoken == None or user.rower.tptoken == '' %}
|
||||
<a href="/rowers/me/tpauthorize">
|
||||
Connect to TrainingPeaks
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/tpuploadw">
|
||||
TrainingPeaks
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li id="export-csv">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailcsv">
|
||||
CSV
|
||||
</a>
|
||||
</li>
|
||||
<li id="export-gpx">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailgpx">
|
||||
GPX
|
||||
</a>
|
||||
</li>
|
||||
<li id="export-tcx">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailtcx">
|
||||
TCX
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="has-children" id="data">
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<label for="group-1"><i class="fas fa-cloud-download fa-fw"></i> Import</label>
|
||||
|
||||
<ul>
|
||||
<li id="concept2"><a href="/rowers/workout/c2import">Concept2</a></li>
|
||||
<li id="concept2"><a href="/rowers/workout/c2list">Concept2</a></li>
|
||||
<li id="strava"><a href="/rowers/workout/stravaimport">Strava</a></li>
|
||||
<li id="runkeeper"><a href="/rowers/workout/runkeeperimport">RunKeeper</a></li>
|
||||
<li id="sporttracks"><a href="/rowers/workout/sporttracksimport">SportTracks</a></li>
|
||||
@@ -47,7 +47,7 @@
|
||||
<label for="athlete-selector"><i class="fas fa-users fa-fw"></i> Athletes</label>
|
||||
<ul>
|
||||
{% for member in user|team_members %}
|
||||
<a href="/rowers/u/{{ member.id }}/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}">
|
||||
<a href={{ request.path|userurl:member }}>
|
||||
<i class="fas fa-user fa-fw"></i>
|
||||
{% if member == rower.user %}
|
||||
•
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "newbase.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load rowerfilters %}
|
||||
|
||||
{% block title %}Workouts{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% block main %}
|
||||
<h1>New Workouts Imported From Polar Flow</h1>
|
||||
|
||||
<p>Due to a limitation in Polar Flow's API, we can only access new workouts. We
|
||||
@@ -47,3 +47,7 @@
|
||||
<p> No new workouts found </p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% include 'menu_workouts.html' %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "newbase.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load rowerfilters %}
|
||||
|
||||
{% block title %}Workouts{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% block main %}
|
||||
<h1>Available on Runkeeper</h1>
|
||||
{% if workouts %}
|
||||
<table width="70%" class="listtable">
|
||||
@@ -35,3 +35,7 @@
|
||||
<p> No workouts found </p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% include 'menu_workouts.html' %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,22 +1,24 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "newbase.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load rowerfilters %}
|
||||
|
||||
{% block title %}Workouts{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% block main %}
|
||||
<h1>Available on SportTracks</h1>
|
||||
|
||||
{% if workouts %}
|
||||
<div class="grid_2 alpha ">
|
||||
<a href="/rowers/workout/sporttracksimport/all/" class="button gray">Import all NEW</a>
|
||||
</div>
|
||||
<div class="grid_10 omega">
|
||||
<ul class="main-content">
|
||||
<li>
|
||||
<a href="/rowers/workout/sporttracksimport/all/">Import all NEW</a>
|
||||
</li>
|
||||
<li class="grid_3">
|
||||
<p>This imports all workouts that have not been imported to rowsandall.com.
|
||||
The action may take a longer time to process, so please be patient. Click on Import in the list below to import an individual workout.
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<div class="grid_12 alpha">
|
||||
<li class="grid_4">
|
||||
<table width="70%" class="listtable">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -45,8 +47,13 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
{% else %}
|
||||
<p> No workouts found </p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% include 'menu_workouts.html' %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</li>
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>
|
||||
No workouts found
|
||||
|
||||
@@ -13,7 +13,12 @@ from rowers.plannedsessions import (
|
||||
race_can_register, race_can_submit,race_rower_status
|
||||
)
|
||||
|
||||
from rowers import c2stuff, runkeeperstuff
|
||||
from rowers.c2stuff import c2_open
|
||||
from rowers.runkeeperstuff import runkeeper_open
|
||||
|
||||
from rowers.types import otwtypes
|
||||
from rowers.utils import NoTokenError
|
||||
|
||||
def strfdelta(tdelta):
|
||||
minutes,seconds = divmod(tdelta.seconds,60)
|
||||
@@ -86,6 +91,28 @@ def deltatimeprint(d):
|
||||
else:
|
||||
return strfdeltah(d)
|
||||
|
||||
@register.filter
|
||||
def c2userid(user):
|
||||
try:
|
||||
thetoken = c2_open(user)
|
||||
except NoTokenError:
|
||||
return 0
|
||||
|
||||
c2userid = c2stuff.get_userid(thetoken)
|
||||
|
||||
return c2userid
|
||||
|
||||
@register.filter
|
||||
def rkuserid(user):
|
||||
try:
|
||||
thetoken = runkeeper_open(user)
|
||||
except NoTokenError:
|
||||
return 0
|
||||
|
||||
rkuserid = runkeeperstuff.get_userid(thetoken)
|
||||
|
||||
return rkuserid
|
||||
|
||||
@register.filter
|
||||
def courselength(course):
|
||||
return course_length(course)
|
||||
|
||||
@@ -138,8 +138,8 @@ urlpatterns = [
|
||||
url(r'^list-workouts/team/(?P<teamid>\d+)/$',views.workouts_view),
|
||||
url(r'^(?P<rowerid>\d+)/list-workouts/$',views.workouts_view),
|
||||
url(r'^(?P<rowerid>\d+)/list-workouts/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.workouts_view),
|
||||
url(r'^u/(?P<userid>\d+)/list-workouts/$',views.workouts_view),
|
||||
url(r'^u/(?P<userid>\d+)/list-workouts/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.workouts_view),
|
||||
url(r'^list-workouts/user/(?P<userid>\d+)/$',views.workouts_view),
|
||||
url(r'^list-workouts/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)/user/(?P<userid>\d+)/$',views.workouts_view),
|
||||
url(r'^list-workouts/(?P<startdatestring>\w+.*)/(?P<enddatestring>\w+.*)$',views.workouts_view),
|
||||
url(r'^virtualevents$',views.virtualevents_view),
|
||||
url(r'^virtualevent/create$',views.virtualevent_create_view),
|
||||
@@ -302,16 +302,22 @@ urlpatterns = [
|
||||
url(r'^workout/c2import/$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/(?P<page>\d+)$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/user/(?P<userid>\d+)$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/(?P<page>\d+)/user/(?P<userid>\d+)$',views.workout_c2import_view),
|
||||
url(r'^workout/stravaimport/$',views.workout_stravaimport_view),
|
||||
url(r'^workout/stravaimport/user/(?P<userid>\d+)$',views.workout_stravaimport_view),
|
||||
url(r'^workout/c2import/all/$',views.workout_getc2workout_all),
|
||||
url(r'^workout/c2import/all/(?P<page>\d+)$',views.workout_getc2workout_all),
|
||||
url(r'^workout/(?P<source>\w+.*)import/(?P<externalid>\d+)/$',views.workout_getimportview),
|
||||
url(r'^workout/stravaimport/all/$',views.workout_getstravaworkout_all),
|
||||
url(r'^workout/stravaimport/next/$',views.workout_getstravaworkout_next),
|
||||
url(r'^workout/sporttracksimport/$',views.workout_sporttracksimport_view),
|
||||
url(r'^workout/sporttracksimport/user/(?P<userid>\d+)$',views.workout_sporttracksimport_view),
|
||||
url(r'^workout/sporttracksimport/all/$',views.workout_getsporttracksworkout_all),
|
||||
url(r'^workout/polarimport/$',views.workout_polarimport_view),
|
||||
url(r'^workout/polarimport/user/(?P<userid>\d+)/',views.workout_polarimport_view),
|
||||
url(r'^workout/runkeeperimport/$',views.workout_runkeeperimport_view),
|
||||
url(r'^workout/runkeeperimport/user/(?P<userid>\d+)$',views.workout_runkeeperimport_view),
|
||||
url(r'^workout/underarmourimport/$',views.workout_underarmourimport_view),
|
||||
# url(r'^workout/(?P<id>\d+)/deleteconfirm$',views.workout_delete_confirm_view),
|
||||
url(r'^workout/(?P<id>\d+)/c2uploadw/$',views.workout_c2_upload_view),
|
||||
|
||||
208
rowers/views.py
208
rowers/views.py
@@ -1277,21 +1277,23 @@ def workout_tcxemail_view(request,id=0):
|
||||
if r.emailbounced:
|
||||
message = "Please check your email address first. Email to this address bounced."
|
||||
messages.error(request, message)
|
||||
return HttpResponseRedirect(
|
||||
reverse(workout_export_view,
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':int(id)
|
||||
})
|
||||
)
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
|
||||
tcxfile,tcxmessg = stravastuff.createstravaworkoutdata(w,dozip=False)
|
||||
if tcxfile == 0:
|
||||
message = "Something went wrong (TCX export) "+tcxmessg
|
||||
messages.error(request,message)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':int(id)
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
if tcxfile:
|
||||
@@ -1307,18 +1309,18 @@ def workout_tcxemail_view(request,id=0):
|
||||
messages.info(request,successmessage)
|
||||
|
||||
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':int(id)
|
||||
})
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
message = "You are not allowed to export this workout"
|
||||
messages.error(request,message)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':int(id)
|
||||
})
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
@@ -1375,12 +1377,12 @@ def workout_gpxemail_view(request,id=0):
|
||||
if r.emailbounced:
|
||||
message = "Please check your email address first. Email to this address bounced."
|
||||
messages.error(request, message)
|
||||
return HttpResponseRedirect(
|
||||
reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':int(id)
|
||||
})
|
||||
)
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
w = get_workout(id)
|
||||
|
||||
@@ -1399,9 +1401,9 @@ def workout_gpxemail_view(request,id=0):
|
||||
|
||||
successmessage = "The GPX file was sent to you per email"
|
||||
messages.info(request,successmessage)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':int(id)
|
||||
})
|
||||
|
||||
response = HttpResponseRedirect(url)
|
||||
@@ -1409,7 +1411,7 @@ def workout_gpxemail_view(request,id=0):
|
||||
else:
|
||||
message = "You are not allowed to export this workout"
|
||||
messages.error(request,message)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1425,7 +1427,7 @@ def workouts_summaries_email_view(request):
|
||||
message = "Please check your email address first. Email to this address bounced."
|
||||
messages.error(request, message)
|
||||
return HttpResponseRedirect(
|
||||
reverse(workout_export_view,
|
||||
reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1468,7 +1470,7 @@ def workout_csvemail_view(request,id=0):
|
||||
message = "Please check your email address first. Email to this address bounced."
|
||||
messages.error(request, message)
|
||||
return HttpResponseRedirect(
|
||||
reverse(workout_export_view,
|
||||
reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1486,7 +1488,7 @@ def workout_csvemail_view(request,id=0):
|
||||
|
||||
successmessage = "The CSV file was sent to you per email"
|
||||
messages.info(request,successmessage)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1495,7 +1497,7 @@ def workout_csvemail_view(request,id=0):
|
||||
else:
|
||||
message = "You are not allowed to export this workout"
|
||||
messages.error(request,message)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1577,7 +1579,7 @@ def workout_tp_upload_view(request,id=0):
|
||||
message = "You are not allowed to export this workout to TP"
|
||||
messages.error(request,message)
|
||||
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1621,7 +1623,7 @@ def workout_strava_upload_view(request,id=0):
|
||||
os.remove(tcxfile)
|
||||
except WindowsError:
|
||||
pass
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1651,14 +1653,14 @@ def workout_strava_upload_view(request,id=0):
|
||||
messages.error(request,message)
|
||||
w.uploadedtostrava = -1
|
||||
w.save()
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
}
|
||||
@@ -1670,7 +1672,7 @@ def workout_strava_upload_view(request,id=0):
|
||||
w.uploadedtostrava = -1
|
||||
w.save()
|
||||
os.remove(tcxfile)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1697,11 +1699,12 @@ def workout_c2_upload_view(request,id=0):
|
||||
messages.info(request,message)
|
||||
|
||||
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':int(id)
|
||||
})
|
||||
|
||||
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
return response
|
||||
@@ -1725,7 +1728,7 @@ def workout_runkeeper_upload_view(request,id=0):
|
||||
if not data:
|
||||
message = "Data error"
|
||||
messages.error(request,message)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1761,7 +1764,7 @@ def workout_runkeeper_upload_view(request,id=0):
|
||||
message = "You are not authorized to upload this workout"
|
||||
messages.error(request,message)
|
||||
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1787,7 +1790,7 @@ def workout_underarmour_upload_view(request,id=0):
|
||||
if not data:
|
||||
message = "Data error"
|
||||
messages.error(request,message)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1824,7 +1827,7 @@ def workout_underarmour_upload_view(request,id=0):
|
||||
message = "You are not authorized to upload this workout"
|
||||
messages.error(request,message)
|
||||
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1851,7 +1854,7 @@ def workout_sporttracks_upload_view(request,id=0):
|
||||
if not data:
|
||||
message = "Data error"
|
||||
messages.error(request,message)
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -1889,7 +1892,7 @@ def workout_sporttracks_upload_view(request,id=0):
|
||||
message = "You are not authorized to upload this workout"
|
||||
messages.error(request,message)
|
||||
|
||||
url = reverse(workout_export_view,
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
})
|
||||
@@ -9543,9 +9546,16 @@ def workout_add_chart_view(request,id,plotnr=1):
|
||||
|
||||
# The page where you select which Strava workout to import
|
||||
@login_required()
|
||||
def workout_stravaimport_view(request,message=""):
|
||||
def workout_stravaimport_view(request,message="",userid=0):
|
||||
res = stravastuff.get_strava_workout_list(request.user)
|
||||
|
||||
r = getrequestrower(request,userid=userid)
|
||||
|
||||
if r.user != request.user:
|
||||
messages.info(request,"You cannot import other people's workouts from Concept2")
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
if (res.status_code != 200):
|
||||
if (res.status_code == 401):
|
||||
r = getrower(request.user)
|
||||
@@ -9605,10 +9615,25 @@ def workout_stravaimport_view(request,message=""):
|
||||
res = dict(zip(keys,values))
|
||||
workouts.append(res)
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/list-workouts',
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_stravaimport_view),
|
||||
'name':'Strava'
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
return render(request,'strava_list_import.html',
|
||||
{'workouts':workouts,
|
||||
'rower':r,
|
||||
'active':'nav-workouts',
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
@@ -9616,7 +9641,7 @@ def workout_stravaimport_view(request,message=""):
|
||||
|
||||
# The page where you select which RunKeeper workout to import
|
||||
@login_required()
|
||||
def workout_runkeeperimport_view(request,message=""):
|
||||
def workout_runkeeperimport_view(request,message="",userid=0):
|
||||
res = runkeeperstuff.get_runkeeper_workout_list(request.user)
|
||||
if (res.status_code != 200):
|
||||
if (res.status_code == 401):
|
||||
@@ -9632,7 +9657,7 @@ def workout_runkeeperimport_view(request,message=""):
|
||||
else:
|
||||
url = reverse(workouts_view)
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
|
||||
workouts = []
|
||||
for item in res.json()['items']:
|
||||
d = int(float(item['total_distance']))
|
||||
@@ -9645,8 +9670,25 @@ def workout_runkeeperimport_view(request,message=""):
|
||||
|
||||
res = dict(zip(keys,values))
|
||||
workouts.append(res)
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/list-workouts',
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_runkeeperimport_view),
|
||||
'name':'Runkeeper'
|
||||
}
|
||||
]
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
return render(request,'runkeeper_list_import.html',
|
||||
{'workouts':workouts,
|
||||
'rower':r,
|
||||
'active':'nav-workouts',
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
@@ -9654,7 +9696,7 @@ def workout_runkeeperimport_view(request,message=""):
|
||||
|
||||
# The page where you select which RunKeeper workout to import
|
||||
@login_required()
|
||||
def workout_underarmourimport_view(request,message=""):
|
||||
def workout_underarmourimport_view(request,message="",userid=0):
|
||||
res = underarmourstuff.get_underarmour_workout_list(request.user)
|
||||
if (res.status_code != 200):
|
||||
if (res.status_code == 401):
|
||||
@@ -9666,7 +9708,7 @@ def workout_underarmourimport_view(request,message=""):
|
||||
messages.error(request,message)
|
||||
url = reverse(workouts_view)
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
|
||||
workouts = []
|
||||
items = res.json()['_embedded']['workouts']
|
||||
for item in items:
|
||||
@@ -9688,8 +9730,23 @@ def workout_underarmourimport_view(request,message=""):
|
||||
|
||||
workouts.append(thedict)
|
||||
|
||||
rower = getrower(request.user)
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/list-workouts',
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_c2import_view),
|
||||
'name':'Concept2'
|
||||
},
|
||||
]
|
||||
|
||||
return render(request,'underarmour_list_import.html',
|
||||
{'workouts':workouts,
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'rower':rower,
|
||||
'active':'nav-workouts',
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
@@ -9697,7 +9754,7 @@ def workout_underarmourimport_view(request,message=""):
|
||||
|
||||
# the page where you select which Polar workout to Import
|
||||
@login_required()
|
||||
def workout_polarimport_view(request):
|
||||
def workout_polarimport_view(request,userid=0):
|
||||
exercises = polarstuff.get_polar_workouts(request.user)
|
||||
workouts = []
|
||||
|
||||
@@ -9727,10 +9784,25 @@ def workout_polarimport_view(request):
|
||||
res = dict(zip(keys,values))
|
||||
workouts.append(res)
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/list-workouts',
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_polarimport_view),
|
||||
'name':'Polar'
|
||||
},
|
||||
]
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
return render(request, 'polar_list_import.html',
|
||||
{
|
||||
'workouts':workouts,
|
||||
'active':'nav-workouts',
|
||||
'rower':r,
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
@@ -9739,7 +9811,9 @@ def workout_polarimport_view(request):
|
||||
|
||||
# The page where you select which SportTracks workout to import
|
||||
@login_required()
|
||||
def workout_sporttracksimport_view(request,message=""):
|
||||
def workout_sporttracksimport_view(request,message="",userid=0):
|
||||
|
||||
|
||||
res = sporttracksstuff.get_sporttracks_workout_list(request.user)
|
||||
if (res.status_code != 200):
|
||||
if (res.status_code == 401):
|
||||
@@ -9756,7 +9830,7 @@ def workout_sporttracksimport_view(request,message=""):
|
||||
else:
|
||||
url = reverse(workouts_view)
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
|
||||
workouts = []
|
||||
r = getrower(request.user)
|
||||
stids = [int(getidfromuri(item['uri'])) for item in res.json()['items']]
|
||||
@@ -9779,8 +9853,25 @@ def workout_sporttracksimport_view(request,message=""):
|
||||
values = [i,d,ttot,s,r,n,nnn]
|
||||
res = dict(zip(keys,values))
|
||||
workouts.append(res)
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/list-workouts',
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_sporttracksimport_view),
|
||||
'name':'SportTracks'
|
||||
},
|
||||
]
|
||||
|
||||
return render(request,'sporttracks_list_import.html',
|
||||
{'workouts':workouts,
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'active':'nav-workouts',
|
||||
'rower':r,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
@@ -9864,7 +9955,15 @@ def workout_getc2workout_all(request,page=1,message=""):
|
||||
|
||||
# List of workouts available on Concept2 logbook - for import
|
||||
@login_required()
|
||||
def workout_c2import_view(request,page=1,message=""):
|
||||
def workout_c2import_view(request,page=1,userid=0,message=""):
|
||||
|
||||
r = getrequestrower(request,userid=userid)
|
||||
|
||||
if r.user != request.user:
|
||||
messages.info(request,"You cannot import other people's workouts from Concept2")
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
try:
|
||||
thetoken = c2_open(request.user)
|
||||
except NoTokenError:
|
||||
@@ -9877,9 +9976,8 @@ def workout_c2import_view(request,page=1,message=""):
|
||||
messages.error(request,message)
|
||||
url = reverse(workouts_view)
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
|
||||
workouts = []
|
||||
r = getrower(request.user)
|
||||
c2ids = [item['id'] for item in res.json()['data']]
|
||||
knownc2ids = uniqify([
|
||||
w.uploadedtoc2 for w in Workout.objects.filter(user=r)
|
||||
@@ -9903,9 +10001,29 @@ def workout_c2import_view(request,page=1,message=""):
|
||||
workouts.append(res)
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/list-workouts',
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_c2import_view),
|
||||
'name':'Concept2'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_c2import_view,kwargs={'page':page}),
|
||||
'name':'Page '+str(page)
|
||||
}
|
||||
]
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
return render(request,
|
||||
'c2_list_import2.html',
|
||||
{'workouts':workouts,
|
||||
'rower':r,
|
||||
'active':'nav-workouts',
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'teams':get_my_teams(request.user),
|
||||
'page':page,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user