better organized export page
This commit is contained in:
@@ -4561,6 +4561,76 @@ class RowerExportForm(ModelForm):
|
|||||||
'intervals_auto_import',
|
'intervals_auto_import',
|
||||||
'intervals_auto_export',
|
'intervals_auto_export',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
class RowerExportFormStrava(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'stravaexportas',
|
||||||
|
'strava_auto_export',
|
||||||
|
'strava_auto_import',
|
||||||
|
'strava_auto_delete',
|
||||||
|
]
|
||||||
|
|
||||||
|
class RowerExportFormIntervals(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'intervals_auto_import',
|
||||||
|
'intervals_auto_export',
|
||||||
|
]
|
||||||
|
|
||||||
|
class RowerExportFormGarmin(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'garminactivity',
|
||||||
|
]
|
||||||
|
|
||||||
|
class RowerExportFormPolar(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'polar_auto_import',
|
||||||
|
]
|
||||||
|
|
||||||
|
class RowerExportFormConcept2(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'c2_auto_export',
|
||||||
|
'c2_auto_import',
|
||||||
|
]
|
||||||
|
|
||||||
|
class RowerExportFormSportTracks(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'sporttracks_auto_export',
|
||||||
|
]
|
||||||
|
|
||||||
|
class RowerExportFormTrainingPeaks(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'trainingpeaks_auto_export',
|
||||||
|
'rp3_auto_import',
|
||||||
|
]
|
||||||
|
|
||||||
|
class RowerExportFormRP3(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'rp3_auto_import',
|
||||||
|
]
|
||||||
|
|
||||||
|
class RowerExportFormNK(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = [
|
||||||
|
'nk_auto_import'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
# Simple form to set rower's Functional Threshold Power
|
# Simple form to set rower's Functional Threshold Power
|
||||||
class SimpleRowerPowerForm(ModelForm):
|
class SimpleRowerPowerForm(ModelForm):
|
||||||
|
|||||||
@@ -7,8 +7,10 @@
|
|||||||
{% block main %}
|
{% block main %}
|
||||||
<h1>Import and Export Settings for {{ rower.user.first_name }} {{ rower.user.last_name }}</h1>
|
<h1>Import and Export Settings for {{ rower.user.first_name }} {{ rower.user.last_name }}</h1>
|
||||||
|
|
||||||
|
<form enctype="multipart/form-data" action="" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
<li class="grid_2">
|
<li class="grid_4">
|
||||||
<p>You are currently connected to:
|
<p>You are currently connected to:
|
||||||
{% if rower.c2token is not None and rower.c2token != '' %}
|
{% if rower.c2token is not None and rower.c2token != '' %}
|
||||||
Concept2 Logbook,
|
Concept2 Logbook,
|
||||||
@@ -41,44 +43,140 @@
|
|||||||
Intervals.icu
|
Intervals.icu
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
{% if form.errors %}
|
Click on the icons to establish the connection or to renew the authorization.
|
||||||
<p style="color: red;">
|
</p>
|
||||||
Please correct the error{{ form.errors|pluralize }} below.
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
<p>
|
|
||||||
<form enctype="multipart/form-data" action="" method="post">
|
|
||||||
<table>
|
|
||||||
{{ form.as_table }}
|
|
||||||
</table>
|
|
||||||
{% csrf_token %}
|
|
||||||
<input type="submit" value="Save">
|
|
||||||
</form>
|
|
||||||
</p>
|
|
||||||
{% if rower.garmintoken and rower.garmintoken != '' %}
|
|
||||||
<p>
|
|
||||||
<em>You are connected to Garmin.</em> Switching off Garmin Connect sync is on the
|
|
||||||
<a href="https://connect.garmin.com/modern/settings/accountInformation">Account settings</a>
|
|
||||||
page. Look for the "Rowsandall" app.
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
<p>
|
|
||||||
Garmin Connnect has no manual sync, so connecting your account to your Garmin account will
|
|
||||||
automatically auto-sync workouts from Garmin to Rowsandall (but not in the other direction). If you
|
|
||||||
want to export our structured workout sessions to your Garmin device, you have to set the "Garmin Activity"
|
|
||||||
to a activity type that is supported by your watch. Not all watches support "Custom" activities, so
|
|
||||||
you may have to set your activity to Run or Ride while rowing.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Strava Auto Import also imports activity changes on Strava to Rowsandall, except when you delete
|
|
||||||
a workout on Strava. If you want Deletions to propagate to Rowsandall, tick the Strava Auto Delete
|
|
||||||
check box.
|
|
||||||
</p>
|
|
||||||
</li>
|
</li>
|
||||||
<li class="grid_2">
|
<li class="grid_4">
|
||||||
|
<h2>API Key</h2>
|
||||||
|
<p>{{ apikey }}</p>
|
||||||
|
<p>
|
||||||
|
<a href="/rowers/me/regenerateapikey/">Regenerate</a>
|
||||||
|
</p>
|
||||||
|
<p>This API key can be used to access the Rowsandall API. It is used by some third party applications to access your data. Keep it secret.</p>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
{% if form.errors %}
|
||||||
|
<li class="rounder">
|
||||||
|
<p style="color: red;">
|
||||||
|
Please correct the error{{ form.errors|pluralize }} below.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>Polar</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.polar.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
<p><a href="/rowers/me/polarauthorize/"><img src="/static/img/Polar_connectwith_btn_white.png"
|
||||||
|
alt="connect with Polar" width="130"></a></p>
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>Concept2</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.c2.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
<p><a href="/rowers/me/c2authorize/"><img src="/static/img/blueC2logo.png" alt="connect with Concept2" width="120"></a></p>
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>NK</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.nk.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
<p><a href="/rowers/me/nkauthorize/"><img src="/static/img/NKLiNKLogbook.png" alt="connect with NK Logbook" width="120"></a></p>
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>SportTracks</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.sporttracks.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
<p><a href="/rowers/me/sporttracksauthorize/"><img src="/static/img/sporttracks-button.png" alt="connect with SportTracks" width="120"></a></p>
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>TrainingPeaks</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.trainingpeaks.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>Rojabo</h2>
|
||||||
|
<p><a href="/rowers/me/rojaboauthorize"><img src="/static/img/rojabo.png"
|
||||||
|
alt="connect with Rojabo" width="130"></a></p>
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>Intervals.icu</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.intervals.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
<p><a href="/rowers/me/intervalsauthorize"><img src="/static/img/intervals_icu.png"
|
||||||
|
alt="connect with intervals.icu"></a></p>
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>Garmin Connect</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.garmin.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
<p><a href="/rowers/me/garminauthorize"><img src="/static/img/garmin_badge_130.png"
|
||||||
|
alt="connect with Garmin" width="130"></a></p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Garmin Connnect has no manual sync, so connecting your account to your Garmin account will
|
||||||
|
automatically auto-sync workouts from Garmin to Rowsandall (but not in the other direction). If you
|
||||||
|
want to export our structured workout sessions to your Garmin device, you have to set the "Garmin Activity"
|
||||||
|
to a activity type that is supported by your watch. Not all watches support "Custom" activities, so
|
||||||
|
you may have to set your activity to Run or Ride while rowing.
|
||||||
|
</p>
|
||||||
|
{% if rower.garmintoken and rower.garmintoken != '' %}
|
||||||
|
<p>
|
||||||
|
<em>You are connected to Garmin.</em> Switching off Garmin Connect sync is on the
|
||||||
|
<a href="https://connect.garmin.com/modern/settings/accountInformation">Account settings</a>
|
||||||
|
page. Look for the "Rowsandall" app.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>Strava</h2>
|
||||||
|
<p><input type="submit" value="Save"></p>
|
||||||
|
{{ forms.strava.as_p }}
|
||||||
|
<p><a href="/rowers/me/stravaauthorize/"><img src="/static/img/ConnectWithStrava.png" alt="connect with strava" width="120"></a></p>
|
||||||
|
<p>
|
||||||
|
Strava Auto Import also imports activity changes on Strava to Rowsandall, except when you delete
|
||||||
|
a workout on Strava. If you want Deletions to propagate to Rowsandall, tick the Strava Auto Delete
|
||||||
|
check box.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>TrainingPeaks</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.trainingpeaks.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
<p><a href="/rowers/me/tpauthorize/"><img src="/static/img/TP_logo_horz_2_color.png"
|
||||||
|
alt="connect with Polar" width="130"></a></p>
|
||||||
|
</li>
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>RP3</h2>
|
||||||
|
<table>
|
||||||
|
{{ forms.rp3.as_table }}
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</table>
|
||||||
|
<p><a href="/rowers/me/rp3authorize"><img src="/static/img/logo-rp3-full-black.png"
|
||||||
|
alt="connect with RP3" width="130"></a></p>
|
||||||
|
</li>
|
||||||
{% if grants %}
|
{% if grants %}
|
||||||
|
<li class="rounder">
|
||||||
<h2>Applications</h2>
|
<h2>Applications</h2>
|
||||||
|
<p>
|
||||||
|
These applications have access to your Rowsandall data.
|
||||||
|
</p>
|
||||||
<table width="100%">
|
<table width="100%">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -99,35 +197,12 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h2>API Key</h2>
|
|
||||||
<p>{{ apikey }}</p>
|
|
||||||
<p>
|
|
||||||
<a href="/rowers/me/regenerateapikey/">Regenerate</a>
|
|
||||||
</p>
|
|
||||||
This API key can be used to access the Rowsandall API. It is used by some third party applications to access your data. Keep it secret.
|
|
||||||
</li>
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<p>Click on one of the icons below to connect to the service of your
|
</form>
|
||||||
choice or to renew the authorization.</p>
|
|
||||||
<p><a href="/rowers/me/stravaauthorize/"><img src="/static/img/ConnectWithStrava.png" alt="connect with strava" width="120"></a></p>
|
|
||||||
<p><a href="/rowers/me/c2authorize/"><img src="/static/img/blueC2logo.png" alt="connect with Concept2" width="120"></a></p>
|
|
||||||
<p><a href="/rowers/me/nkauthorize/"><img src="/static/img/NKLiNKLogbook.png" alt="connect with NK Logbook" width="120"></a></p>
|
|
||||||
<p><a href="/rowers/me/sporttracksauthorize/"><img src="/static/img/sporttracks-button.png" alt="connect with SportTracks" width="120"></a></p>
|
|
||||||
<p><a href="/rowers/me/polarauthorize/"><img src="/static/img/Polar_connectwith_btn_white.png"
|
|
||||||
alt="connect with Polar" width="130"></a></p>
|
|
||||||
<p><a href="/rowers/me/tpauthorize/"><img src="/static/img/TP_logo_horz_2_color.png"
|
|
||||||
alt="connect with Polar" width="130"></a></p>
|
|
||||||
|
|
||||||
<p><a href="/rowers/me/garminauthorize"><img src="/static/img/garmin_badge_130.png"
|
|
||||||
alt="connect with Garmin" width="130"></a></p>
|
|
||||||
<p><a href="/rowers/me/rp3authorize"><img src="/static/img/logo-rp3-full-black.png"
|
|
||||||
alt="connect with RP3" width="130"></a></p>
|
|
||||||
<p><a href="/rowers/me/rojaboauthorize"><img src="/static/img/rojabo.png"
|
|
||||||
alt="connect with Rojabo" width="130"></a></p>
|
|
||||||
<p><a href="/rowers/me/intervalsauthorize"><img src="/static/img/intervals_icu.png"
|
|
||||||
alt="connect with intervals.icu" height="30"></a></p>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@@ -179,7 +179,13 @@ from rowers.models import ( RowerPowerForm, RowerHRZonesForm, SimpleRowerPowerFo
|
|||||||
IndoorVirtualRaceForm, PlannedSessionCommentForm, Alert,
|
IndoorVirtualRaceForm, PlannedSessionCommentForm, Alert,
|
||||||
Condition, StaticChartRowerForm, FollowerForm,
|
Condition, StaticChartRowerForm, FollowerForm,
|
||||||
VirtualRaceAthleteForm, InstantPlanForm, DataRowerForm,
|
VirtualRaceAthleteForm, InstantPlanForm, DataRowerForm,
|
||||||
StepEditorForm, iDokladToken )
|
StepEditorForm, iDokladToken,
|
||||||
|
RowerExportFormStrava, RowerExportFormPolar,
|
||||||
|
RowerExportFormSportTracks, RowerExportFormTrainingPeaks,
|
||||||
|
RowerExportFormConcept2, RowerExportFormGarmin,
|
||||||
|
RowerExportFormIntervals, RowerExportFormRP3,
|
||||||
|
RowerExportFormNK,
|
||||||
|
)
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
FavoriteForm, BaseFavoriteFormSet, SiteAnnouncement, BasePlannedSessionFormSet,
|
FavoriteForm, BaseFavoriteFormSet, SiteAnnouncement, BasePlannedSessionFormSet,
|
||||||
get_course_timezone, BaseConditionFormSet,
|
get_course_timezone, BaseConditionFormSet,
|
||||||
|
|||||||
@@ -457,19 +457,42 @@ def rower_exportsettings_view(request, userid=0):
|
|||||||
'polar_auto_import': 'polartoken',
|
'polar_auto_import': 'polartoken',
|
||||||
'c2_auto_export': 'c2token',
|
'c2_auto_export': 'c2token',
|
||||||
'c2_auto_import': 'c2token',
|
'c2_auto_import': 'c2token',
|
||||||
'runkeeper_auto_export': 'runkeepertoken',
|
|
||||||
'sporttracks_auto_export': 'sporttrackstoken',
|
'sporttracks_auto_export': 'sporttrackstoken',
|
||||||
'strava_auto_export': 'stravatoken',
|
'strava_auto_export': 'stravatoken',
|
||||||
'strava_auto_import': 'stravatoken',
|
'strava_auto_import': 'stravatoken',
|
||||||
'strava_auto_delete': 'stravatoken',
|
'strava_auto_delete': 'stravatoken',
|
||||||
'trainingpeaks_auto_export': 'tptoken',
|
'trainingpeaks_auto_export': 'tptoken',
|
||||||
'rp3_auto_import': 'rp3token',
|
'rp3_auto_import': 'rp3token',
|
||||||
'nk_auto_import': 'nktoken'
|
'nk_auto_import': 'nktoken',
|
||||||
|
'intervals_auto_export': 'intervals_token',
|
||||||
}
|
}
|
||||||
r = getrequestrowercoachee(request, userid=userid)
|
r = getrequestrowercoachee(request, userid=userid)
|
||||||
|
|
||||||
|
forms = {
|
||||||
|
'polar': RowerExportFormPolar(instance=r),
|
||||||
|
'c2': RowerExportFormConcept2(instance=r),
|
||||||
|
'sporttracks': RowerExportFormSportTracks(instance=r),
|
||||||
|
'strava': RowerExportFormStrava(instance=r),
|
||||||
|
'trainingpeaks': RowerExportFormTrainingPeaks(instance=r),
|
||||||
|
'rp3': RowerExportFormRP3(instance=r),
|
||||||
|
'intervals': RowerExportFormIntervals(instance=r),
|
||||||
|
'nk': RowerExportFormNK(instance=r),
|
||||||
|
'garmin': RowerExportFormGarmin(instance=r),
|
||||||
|
}
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = RowerExportForm(request.POST)
|
form = RowerExportForm(request.POST)
|
||||||
|
forms = {
|
||||||
|
'polar': RowerExportFormPolar(request.POST, instance=r),
|
||||||
|
'c2': RowerExportFormConcept2(request.POST, instance=r),
|
||||||
|
'sporttracks': RowerExportFormSportTracks(request.POST, instance=r),
|
||||||
|
'strava': RowerExportFormStrava(request.POST, instance=r),
|
||||||
|
'trainingpeaks': RowerExportFormTrainingPeaks(request.POST, instance=r),
|
||||||
|
'rp3': RowerExportFormRP3(request.POST, instance=r),
|
||||||
|
'intervals': RowerExportFormIntervals(request.POST, instance=r),
|
||||||
|
'nk': RowerExportFormNK(request.POST, instance=r),
|
||||||
|
'garmin': RowerExportFormGarmin(request.POST, instance=r),
|
||||||
|
}
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
cd = form.cleaned_data
|
cd = form.cleaned_data
|
||||||
if r.rowerplan == 'basic': # pragma: no cover
|
if r.rowerplan == 'basic': # pragma: no cover
|
||||||
@@ -528,6 +551,7 @@ def rower_exportsettings_view(request, userid=0):
|
|||||||
|
|
||||||
return render(request, 'rower_exportsettings.html',
|
return render(request, 'rower_exportsettings.html',
|
||||||
{'form': form,
|
{'form': form,
|
||||||
|
'forms': forms,
|
||||||
'rower': r,
|
'rower': r,
|
||||||
'breadcrumbs': breadcrumbs,
|
'breadcrumbs': breadcrumbs,
|
||||||
'grants': grants,
|
'grants': grants,
|
||||||
|
|||||||
Reference in New Issue
Block a user