Private
Public Access
1
0

gdpr user delete and user deactivate functions

This commit is contained in:
Sander Roosendaal
2018-03-06 20:20:42 +01:00
parent e353b1cf1f
commit d80e7d8f04
8 changed files with 130 additions and 61 deletions

View File

@@ -606,6 +606,19 @@ class Rower(models.Model):
def clean_email(self): def clean_email(self):
return self.user.email.lower() return self.user.email.lower()
class DeactivateUserForm(forms.ModelForm):
class Meta:
model = User
fields = ['is_active']
class DeleteUserForm(forms.ModelForm):
delete_user = forms.BooleanField(initial=False,
label='Remove my account and all data')
class Meta:
model = User
fields = []
@receiver(models.signals.post_save,sender=Rower) @receiver(models.signals.post_save,sender=Rower)
def auto_delete_teams_on_change(sender, instance, **kwargs): def auto_delete_teams_on_change(sender, instance, **kwargs):
if instance.rowerplan != 'coach': if instance.rowerplan != 'coach':

View File

@@ -31,6 +31,15 @@
<div class="grid_6 omega"> <div class="grid_6 omega">
<p> To use rowsandall, you need to register and agree with the Terms of Service. </p> <p> To use rowsandall, you need to register and agree with the Terms of Service. </p>
<p> Registration is free. </p> <p> Registration is free. </p>
<p>Some of our advanced services only work if you give us your
(approximate) birth date, sex and weight category, with 72.5 kg the
bounday between heavies and lighties for men, and 59 kg for women.
</p>
<p>Also, we are restricting access to the site to 16 years and older
because of EU data protection regulations.</p>
</div> </div>
{% endblock content %} {% endblock content %}

View File

@@ -216,7 +216,19 @@
<p> <p>
<h2>GDPR - Data Protection</h2> <h2>GDPR - Data Protection</h2>
<div class="grid_2 suffix_4 alpha"> <div class="grid_2 suffix_4 alpha">
<a class="button gray small" href="/rowers/exportallworkouts">Download your data</a> <p>
<a class="button gray small" href="/rowers/exportallworkouts">Download your data</a>
</p>
</div>
<div class="grid_2 suffix_4 alpha">
<p>
<a class="button gray small" href="/rowers/me/deactivate">Deactivate Account</a>
</p>
</div>
<div class="grid_2 suffix_4 alpha">
<p>
<a class="button red small" href="/rowers/me/delete">Delete Account</a>
</p>
</div> </div>
</p> </p>
</div> </div>

View File

@@ -0,0 +1,22 @@
{% extends "base.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Deactivate your account{% endblock %}
{% block content %}
<div class="grid_12">
<h2>Deactivate your account</h2>
<hr>
<p>Account deactivation is reversible. After you logout, you will not be
able to access your data any more, but the site admin can restore your
account.</p>
<form method="POST" class="padding">{% csrf_token %}
{{ user_form.as_p}}
{% csrf_token %}
<button class="btn btn-primary" type="submit" name="action">Confirm</button>
</form>
</div>
{% endblock %}

View File

@@ -0,0 +1,22 @@
{% extends "base.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Delete your account{% endblock %}
{% block content %}
<div class="grid_12">
<h2>Delete your account</h2>
<hr>
<p><b>Warning: This will remove your account and all your data.
You will not be able to recover from this action. We cannot restore
your account</b></p>
<form method="POST" class="padding">{% csrf_token %}
{{ user_form.as_p}}
{% csrf_token %}
<button class="btn btn-primary" type="submit" name="action">Confirm</button>
</form>
</div>
{% endblock %}

View File

@@ -336,6 +336,8 @@ urlpatterns = [
url(r'^user-multiflex/$',views.multiflex_view), url(r'^user-multiflex/$',views.multiflex_view),
url(r'^user-multiflex$',views.multiflex_view), url(r'^user-multiflex$',views.multiflex_view),
url(r'^user-multiflex-data$',views.multiflex_data), url(r'^user-multiflex-data$',views.multiflex_data),
url(r'^me/deactivate$',views.deactivate_user),
url(r'^me/delete$',views.remove_user),
url(r'^me/teams/$',views.rower_teams_view), url(r'^me/teams/$',views.rower_teams_view),
url(r'^me/calcdps/$',views.rower_calcdps_view), url(r'^me/calcdps/$',views.rower_calcdps_view),
url(r'^me/exportsettings/$',views.rower_exportsettings_view), url(r'^me/exportsettings/$',views.rower_exportsettings_view),

View File

@@ -12,6 +12,7 @@ import yaml
from PIL import Image from PIL import Image
from numbers import Number from numbers import Number
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.contrib.auth import views as auth_views
from django.db.models import Q from django.db.models import Q
from django import template from django import template
from django.db import IntegrityError, transaction from django.db import IntegrityError, transaction
@@ -54,7 +55,7 @@ from rowers.forms import (
) )
from rowers.models import ( from rowers.models import (
Workout, User, Rower, WorkoutForm,FavoriteChart, Workout, User, Rower, WorkoutForm,FavoriteChart,
PlannedSession PlannedSession, DeactivateUserForm,DeleteUserForm
) )
from rowers.models import ( from rowers.models import (
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm, RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
@@ -573,6 +574,48 @@ def get_thumbnails(request,id):
return JSONResponse(charts) return JSONResponse(charts)
@login_required()
def deactivate_user(request):
pk = request.user.id
user = User.objects.get(pk=pk)
user_form = DeactivateUserForm(instance=user)
if request.user.is_authenticated() and request.user.id == user.id:
if request.method == "POST":
user_form = DeactivateUserForm(request.POST, instance=user)
if user_form.is_valid():
deactivate_user = user_form.save(commit=False)
user.is_active = False
deactivate_user.save()
url = reverse(auth_views.logout_then_login)
return HttpResponseRedirect(url)
return render(request, "userprofile_deactivate.html", {
"user_form": user_form,
})
else:
raise PermissionDenied
@login_required()
def remove_user(request):
pk = request.user.id
user = User.objects.get(pk=pk)
user_form = DeleteUserForm(instance=user)
if request.user.is_authenticated() and request.user.id == user.id:
if request.method == "POST":
user_form = DeleteUserForm(request.POST,instance=user)
if user_form.is_valid():
cd = user_form.cleaned_data
print cd
if cd['delete_user']:
user.delete()
url = reverse(auth_views.logout_then_login)
return HttpResponseRedirect(url)
return render(request, "userprofile_delete.html", {
"user_form": user_form,
})
else:
raise PermissionDenied
@login_required() @login_required()
def get_testscript(request,id): def get_testscript(request,id):
row = get_workout_permitted(request.user,id) row = get_workout_permitted(request.user,id)
@@ -1715,7 +1758,11 @@ def workouts_summaries_email_view(request):
if form.is_valid(): if form.is_valid():
startdate = form.cleaned_data['startdate'] startdate = form.cleaned_data['startdate']
enddate = form.cleaned_data['enddate'] enddate = form.cleaned_data['enddate']
filename = 'rowsandall_workouts_{first}_{last}.csv' filename = 'rowsandall_workouts_{first}_{last}.csv'.format(
first=startdate,
last=enddate
)
print filename
df = dataprep.workout_summary_to_df(r,startdate=startdate,enddate=enddate) df = dataprep.workout_summary_to_df(r,startdate=startdate,enddate=enddate)
df.to_csv(filename,encoding='utf-8') df.to_csv(filename,encoding='utf-8')
res = myqueue(queuehigh,handle_sendemailsummary, res = myqueue(queuehigh,handle_sendemailsummary,

View File

@@ -1,58 +0,0 @@
,Stroke Data CSV,Stroke Data TCX,TRIMP Training Load,TSS Training Load,date,distance (m),duration ,name,notes,timezone,type,weight (kg),weight category
0,https://rowsandall.com/rowers/workout/2301/emailcsv,https://rowsandall.com/rowers/workout/2301/emailtcx,-3,0,2012-09-06 19:52:16+00:00,3851,00:30:00.400000,Imported data,,Europe/Prague,other,80.0,lwt
1,https://rowsandall.com/rowers/workout/2302/emailcsv,https://rowsandall.com/rowers/workout/2302/emailtcx,-8,0,2012-09-11 21:18:12+00:00,12017,01:15:29.300000,Imported data,,Europe/Prague,other,80.0,lwt
2,https://rowsandall.com/rowers/workout/2303/emailcsv,https://rowsandall.com/rowers/workout/2303/emailtcx,-8,0,2012-09-11 21:18:12+00:00,12017,01:15:29.300000,Imported data,,Europe/Prague,other,80.0,lwt
3,https://rowsandall.com/rowers/workout/2379/emailcsv,https://rowsandall.com/rowers/workout/2379/emailtcx,0,4,2017-10-27 16:14:42+00:00,742,00:02:25,Test Weba,,Europe/Prague,water,80.0,lwt
4,https://rowsandall.com/rowers/workout/2380/emailcsv,https://rowsandall.com/rowers/workout/2380/emailtcx,0,4,2017-10-27 16:14:42+00:00,742,00:02:25,Test Weba,,Europe/Belgrade,water,80.0,lwt
5,https://rowsandall.com/rowers/workout/2334/emailcsv,https://rowsandall.com/rowers/workout/2334/emailtcx,54,0,2018-01-17 06:12:54+00:00,0,00:57:00,Swim, ,Europe/Prague,other,80.0,lwt
6,https://rowsandall.com/rowers/workout/2333/emailcsv,https://rowsandall.com/rowers/workout/2333/emailtcx,11,10,2018-01-18 19:01:48+00:00,2007,00:08:23,WU & CD & rest, ,Europe/Prague,other,80.0,lwt
7,https://rowsandall.com/rowers/workout/2332/emailcsv,https://rowsandall.com/rowers/workout/2332/emailtcx,7,3,2018-01-18 19:40:43+00:00,1217,00:06:06,WU & CD & rest, ,Europe/Prague,other,80.0,lwt
8,https://rowsandall.com/rowers/workout/2331/emailcsv,https://rowsandall.com/rowers/workout/2331/emailtcx,12,6,2018-01-18 20:18:01+00:00,1997,00:09:06,WU & CD & rest, ,Europe/Prague,other,80.0,lwt
9,https://rowsandall.com/rowers/workout/2330/emailcsv,https://rowsandall.com/rowers/workout/2330/emailtcx,172,99,2018-01-20 13:22:33+00:00,19381,01:20:36,Zwift Ride/Row, ,Europe/Prague,other,80.0,lwt
10,https://rowsandall.com/rowers/workout/2329/emailcsv,https://rowsandall.com/rowers/workout/2329/emailtcx,36,0,2018-01-21 13:23:11+00:00,0,00:45:15,Afternoon Swim, ,Europe/Prague,other,80.0,lwt
11,https://rowsandall.com/rowers/workout/2328/emailcsv,https://rowsandall.com/rowers/workout/2328/emailtcx,0,0,2018-01-24 18:55:25+00:00,210,00:01:40,Steady state, ,Europe/Prague,other,80.0,lwt
12,https://rowsandall.com/rowers/workout/2327/emailcsv,https://rowsandall.com/rowers/workout/2327/emailtcx,11,11,2018-01-24 18:59:08+00:00,2110,00:08:39,Steady state, ,Europe/Prague,other,80.0,lwt
13,https://rowsandall.com/rowers/workout/2326/emailcsv,https://rowsandall.com/rowers/workout/2326/emailtcx,33,22,2018-01-24 19:08:06+00:00,6081,00:16:08,Steady state, ,Europe/Prague,other,80.0,lwt
14,https://rowsandall.com/rowers/workout/2325/emailcsv,https://rowsandall.com/rowers/workout/2325/emailtcx,85,44,2018-01-24 19:24:20+00:00,14426,00:35:00,Steady state, ,Europe/Prague,other,80.0,lwt
15,https://rowsandall.com/rowers/workout/2324/emailcsv,https://rowsandall.com/rowers/workout/2324/emailtcx,143,83,2018-01-27 13:23:28+00:00,14981,01:01:36,Youve unlocked colored socks, ,Europe/Prague,other,80.0,lwt
16,https://rowsandall.com/rowers/workout/2323/emailcsv,https://rowsandall.com/rowers/workout/2323/emailtcx,85,207,2018-01-28 14:43:45+00:00,6519,00:47:35,Afternoon Run, ,Europe/Prague,other,80.0,lwt
17,https://rowsandall.com/rowers/workout/2322/emailcsv,https://rowsandall.com/rowers/workout/2322/emailtcx,121,712,2018-01-29 08:32:25+00:00,12622,02:11:55,Morning Run, ,Europe/Prague,other,80.0,lwt
18,https://rowsandall.com/rowers/workout/2321/emailcsv,https://rowsandall.com/rowers/workout/2321/emailtcx,99,216,2018-01-29 14:02:59+00:00,8801,01:20:06,Afternoon Run, ,Europe/Prague,other,80.0,lwt
19,https://rowsandall.com/rowers/workout/2320/emailcsv,https://rowsandall.com/rowers/workout/2320/emailtcx,224,663,2018-01-30 08:07:27+00:00,24640,04:24:41,Morning Run, ,Europe/Prague,other,80.0,lwt
20,https://rowsandall.com/rowers/workout/2319/emailcsv,https://rowsandall.com/rowers/workout/2319/emailtcx,142,862,2018-01-31 08:34:52+00:00,13659,01:35:37,Morning Run, ,Europe/Prague,other,80.0,lwt
21,https://rowsandall.com/rowers/workout/2318/emailcsv,https://rowsandall.com/rowers/workout/2318/emailtcx,101,244,2018-01-31 14:31:30+00:00,8948,01:11:07,Afternoon Run, ,Europe/Prague,other,80.0,lwt
22,https://rowsandall.com/rowers/workout/2317/emailcsv,https://rowsandall.com/rowers/workout/2317/emailtcx,160,216,2018-02-01 08:46:14+00:00,10501,01:32:54,Morning Run, ,Europe/Prague,other,80.0,lwt
23,https://rowsandall.com/rowers/workout/2295/emailcsv,https://rowsandall.com/rowers/workout/2295/emailtcx,88,75,2018-02-03 14:20:20+00:00,12181,00:51:43,Zwift in the rain, ,Europe/Prague,water,80.0,lwt
24,https://rowsandall.com/rowers/workout/2316/emailcsv,https://rowsandall.com/rowers/workout/2316/emailtcx,-5,396,2018-02-04 12:56:40+00:00,9082,00:51:50,Afternoon Run, ,Europe/Prague,other,80.0,lwt
25,https://rowsandall.com/rowers/workout/2315/emailcsv,https://rowsandall.com/rowers/workout/2315/emailtcx,60,40,2018-02-06 17:54:04+00:00,7210,00:31:05,Aborted 2x(1min+2min+3min+4min+3min+2min+1min)/4min 26/24/22/20/22/24/26spm, ,Europe/Prague,other,80.0,lwt
26,https://rowsandall.com/rowers/workout/2314/emailcsv,https://rowsandall.com/rowers/workout/2314/emailtcx,56,0,2018-02-08 06:08:23+00:00,0,00:51:58,Morning Activity, ,Europe/Prague,other,80.0,lwt
27,https://rowsandall.com/rowers/workout/2313/emailcsv,https://rowsandall.com/rowers/workout/2313/emailtcx,16,15,2018-02-10 09:10:16+00:00,3040,00:12:44,WU and cd, ,Europe/Prague,other,80.0,lwt
28,https://rowsandall.com/rowers/workout/2312/emailcsv,https://rowsandall.com/rowers/workout/2312/emailtcx,85,66,2018-02-10 09:23:53+00:00,9305,00:40:48,7x(1min+1min+1min)/3min @ 24/26/28spm, ,Europe/Prague,other,80.0,lwt
29,https://rowsandall.com/rowers/workout/2311/emailcsv,https://rowsandall.com/rowers/workout/2311/emailtcx,14,6,2018-02-10 10:06:03+00:00,2009,00:08:59,WU and cd, ,Europe/Prague,other,80.0,lwt
30,https://rowsandall.com/rowers/workout/2310/emailcsv,https://rowsandall.com/rowers/workout/2310/emailtcx,133,68,2018-02-11 16:57:33+00:00,14450,01:00:00,Steady State (fused),,Europe/Prague,other,80.0,lwt
31,https://rowsandall.com/rowers/workout/2335/emailcsv,https://rowsandall.com/rowers/workout/2335/emailtcx,24,20,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,SpdCoach 1,,America/Los_Angeles,water,80.0,lwt
32,https://rowsandall.com/rowers/workout/2338/emailcsv,https://rowsandall.com/rowers/workout/2338/emailtcx,431,1524,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
33,https://rowsandall.com/rowers/workout/2339/emailcsv,https://rowsandall.com/rowers/workout/2339/emailtcx,403,1502,2018-02-12 05:02:06+00:00,7522,09:41:48.200000,Joined Workout,,America/Los_Angeles,water,80.0,lwt
34,https://rowsandall.com/rowers/workout/2341/emailcsv,https://rowsandall.com/rowers/workout/2341/emailtcx,431,1524,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
35,https://rowsandall.com/rowers/workout/2342/emailcsv,https://rowsandall.com/rowers/workout/2342/emailtcx,431,1524,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
36,https://rowsandall.com/rowers/workout/2343/emailcsv,https://rowsandall.com/rowers/workout/2343/emailtcx,431,1524,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
37,https://rowsandall.com/rowers/workout/2344/emailcsv,https://rowsandall.com/rowers/workout/2344/emailtcx,24,20,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,SpdCoach Sessions,imported through email,America/Los_Angeles,water,80.0,lwt
38,https://rowsandall.com/rowers/workout/2347/emailcsv,https://rowsandall.com/rowers/workout/2347/emailtcx,89,73,2018-02-12 14:02:06+00:00,9336,00:58:35,Joined Workout,imported through email,America/Los_Angeles,water,80.0,lwt
39,https://rowsandall.com/rowers/workout/2336/emailcsv,https://rowsandall.com/rowers/workout/2336/emailtcx,37,32,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,SpdCoach 2,"
Summary for your location at 2018-02-12T14:55:00Z: Temperature 9.0C/48.2F. Wind: 2.5 m/s (5.0 kt). Wind Bearing: 280.0 degrees",America/Los_Angeles,water,80.0,lwt
40,https://rowsandall.com/rowers/workout/2340/emailcsv,https://rowsandall.com/rowers/workout/2340/emailtcx,65,49,2018-02-12 14:29:01+00:00,5464,00:31:40,Joined Workout,,America/Los_Angeles,water,80.0,lwt
41,https://rowsandall.com/rowers/workout/2345/emailcsv,https://rowsandall.com/rowers/workout/2345/emailtcx,37,32,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,SpdCoach Sessions (2),imported through email,America/Los_Angeles,water,80.0,lwt
42,https://rowsandall.com/rowers/workout/2337/emailcsv,https://rowsandall.com/rowers/workout/2337/emailtcx,11,5,2018-02-12 14:49:02+00:00,1814,00:11:39,SpdCoach 3,,America/Los_Angeles,water,80.0,lwt
43,https://rowsandall.com/rowers/workout/2346/emailcsv,https://rowsandall.com/rowers/workout/2346/emailtcx,11,5,2018-02-12 14:49:02+00:00,1814,00:11:39,SpdCoach Sessions (3),imported through email,America/Los_Angeles,water,80.0,lwt
44,https://rowsandall.com/rowers/workout/2309/emailcsv,https://rowsandall.com/rowers/workout/2309/emailtcx,8,9,2018-02-12 18:39:45+00:00,2014,00:08:33,WU and CD, ,Europe/Prague,other,80.0,lwt
45,https://rowsandall.com/rowers/workout/2308/emailcsv,https://rowsandall.com/rowers/workout/2308/emailtcx,90,73,2018-02-12 18:49:04+00:00,10562,00:46:10,4x2km,,Europe/Prague,rower,80.0,lwt
46,https://rowsandall.com/rowers/workout/2307/emailcsv,https://rowsandall.com/rowers/workout/2307/emailtcx,9,5,2018-02-12 19:36:46+00:00,1998,00:09:35,WU and CD, ,Europe/Prague,other,80.0,lwt
47,https://rowsandall.com/rowers/workout/2306/emailcsv,https://rowsandall.com/rowers/workout/2306/emailtcx,48,0,2018-02-14 05:55:22+00:00,0,00:58:33,Morning Activity, ,Europe/Prague,other,80.0,lwt
48,https://rowsandall.com/rowers/workout/2378/emailcsv,https://rowsandall.com/rowers/workout/2378/emailtcx,40,6,2018-02-17 08:17:50+00:00,4386,00:27:08,Morning Run, ,Europe/Prague,other,80.0,lwt
49,https://rowsandall.com/rowers/workout/2381/emailcsv,https://rowsandall.com/rowers/workout/2381/emailtcx,79,48,2018-02-21 06:26:01+00:00,6119,00:27:20.200000,3x2km Racice,,Europe/Prague,water,80.0,lwt
50,https://rowsandall.com/rowers/workout/2384/emailcsv,https://rowsandall.com/rowers/workout/2384/emailtcx,107,66,2018-02-22 09:32:01+00:00,8000,00:35:08.500000,8k trial,,Europe/Prague,water,80.0,lwt
51,https://rowsandall.com/rowers/workout/2383/emailcsv,https://rowsandall.com/rowers/workout/2383/emailtcx,-2,50,2018-02-23 15:17:03+00:00,5918,00:25:10.700000,Horin,,Europe/Prague,water,80.0,lwt
52,https://rowsandall.com/rowers/workout/2385/emailcsv,https://rowsandall.com/rowers/workout/2385/emailtcx,169,0,2018-02-24 11:58:09+00:00,17045,01:35:59,Washington,,America/New_York,water,80.0,lwt
53,https://rowsandall.com/rowers/workout/2386/emailcsv,https://rowsandall.com/rowers/workout/2386/emailtcx,-2,59,2018-02-25 12:24:59+00:00,6182,00:26:24.400000,9x500m/70sec,,Europe/Prague,rower,80.0,lwt
54,https://rowsandall.com/rowers/workout/2387/emailcsv,https://rowsandall.com/rowers/workout/2387/emailtcx,11,7,2018-02-27 13:19:44+00:00,2206,00:10:00,StatsError,,Europe/Prague,rower,80.0,lwt
55,https://rowsandall.com/rowers/workout/2388/emailcsv,https://rowsandall.com/rowers/workout/2388/emailtcx,87,410,2018-03-04 12:16:34+00:00,17817,01:29:08,Afternoon Activity, ,Europe/Prague,other,80.0,lwt
1 Stroke Data CSV Stroke Data TCX TRIMP Training Load TSS Training Load date distance (m) duration name notes timezone type weight (kg) weight category
2 0 https://rowsandall.com/rowers/workout/2301/emailcsv https://rowsandall.com/rowers/workout/2301/emailtcx -3 0 2012-09-06 19:52:16+00:00 3851 00:30:00.400000 Imported data Europe/Prague other 80.0 lwt
3 1 https://rowsandall.com/rowers/workout/2302/emailcsv https://rowsandall.com/rowers/workout/2302/emailtcx -8 0 2012-09-11 21:18:12+00:00 12017 01:15:29.300000 Imported data Europe/Prague other 80.0 lwt
4 2 https://rowsandall.com/rowers/workout/2303/emailcsv https://rowsandall.com/rowers/workout/2303/emailtcx -8 0 2012-09-11 21:18:12+00:00 12017 01:15:29.300000 Imported data Europe/Prague other 80.0 lwt
5 3 https://rowsandall.com/rowers/workout/2379/emailcsv https://rowsandall.com/rowers/workout/2379/emailtcx 0 4 2017-10-27 16:14:42+00:00 742 00:02:25 Test Weba Europe/Prague water 80.0 lwt
6 4 https://rowsandall.com/rowers/workout/2380/emailcsv https://rowsandall.com/rowers/workout/2380/emailtcx 0 4 2017-10-27 16:14:42+00:00 742 00:02:25 Test Weba Europe/Belgrade water 80.0 lwt
7 5 https://rowsandall.com/rowers/workout/2334/emailcsv https://rowsandall.com/rowers/workout/2334/emailtcx 54 0 2018-01-17 06:12:54+00:00 0 00:57:00 Swim Europe/Prague other 80.0 lwt
8 6 https://rowsandall.com/rowers/workout/2333/emailcsv https://rowsandall.com/rowers/workout/2333/emailtcx 11 10 2018-01-18 19:01:48+00:00 2007 00:08:23 WU & CD & rest Europe/Prague other 80.0 lwt
9 7 https://rowsandall.com/rowers/workout/2332/emailcsv https://rowsandall.com/rowers/workout/2332/emailtcx 7 3 2018-01-18 19:40:43+00:00 1217 00:06:06 WU & CD & rest Europe/Prague other 80.0 lwt
10 8 https://rowsandall.com/rowers/workout/2331/emailcsv https://rowsandall.com/rowers/workout/2331/emailtcx 12 6 2018-01-18 20:18:01+00:00 1997 00:09:06 WU & CD & rest Europe/Prague other 80.0 lwt
11 9 https://rowsandall.com/rowers/workout/2330/emailcsv https://rowsandall.com/rowers/workout/2330/emailtcx 172 99 2018-01-20 13:22:33+00:00 19381 01:20:36 Zwift Ride/Row Europe/Prague other 80.0 lwt
12 10 https://rowsandall.com/rowers/workout/2329/emailcsv https://rowsandall.com/rowers/workout/2329/emailtcx 36 0 2018-01-21 13:23:11+00:00 0 00:45:15 Afternoon Swim Europe/Prague other 80.0 lwt
13 11 https://rowsandall.com/rowers/workout/2328/emailcsv https://rowsandall.com/rowers/workout/2328/emailtcx 0 0 2018-01-24 18:55:25+00:00 210 00:01:40 Steady state Europe/Prague other 80.0 lwt
14 12 https://rowsandall.com/rowers/workout/2327/emailcsv https://rowsandall.com/rowers/workout/2327/emailtcx 11 11 2018-01-24 18:59:08+00:00 2110 00:08:39 Steady state Europe/Prague other 80.0 lwt
15 13 https://rowsandall.com/rowers/workout/2326/emailcsv https://rowsandall.com/rowers/workout/2326/emailtcx 33 22 2018-01-24 19:08:06+00:00 6081 00:16:08 Steady state Europe/Prague other 80.0 lwt
16 14 https://rowsandall.com/rowers/workout/2325/emailcsv https://rowsandall.com/rowers/workout/2325/emailtcx 85 44 2018-01-24 19:24:20+00:00 14426 00:35:00 Steady state Europe/Prague other 80.0 lwt
17 15 https://rowsandall.com/rowers/workout/2324/emailcsv https://rowsandall.com/rowers/workout/2324/emailtcx 143 83 2018-01-27 13:23:28+00:00 14981 01:01:36 You’ve unlocked colored socks Europe/Prague other 80.0 lwt
18 16 https://rowsandall.com/rowers/workout/2323/emailcsv https://rowsandall.com/rowers/workout/2323/emailtcx 85 207 2018-01-28 14:43:45+00:00 6519 00:47:35 Afternoon Run Europe/Prague other 80.0 lwt
19 17 https://rowsandall.com/rowers/workout/2322/emailcsv https://rowsandall.com/rowers/workout/2322/emailtcx 121 712 2018-01-29 08:32:25+00:00 12622 02:11:55 Morning Run Europe/Prague other 80.0 lwt
20 18 https://rowsandall.com/rowers/workout/2321/emailcsv https://rowsandall.com/rowers/workout/2321/emailtcx 99 216 2018-01-29 14:02:59+00:00 8801 01:20:06 Afternoon Run Europe/Prague other 80.0 lwt
21 19 https://rowsandall.com/rowers/workout/2320/emailcsv https://rowsandall.com/rowers/workout/2320/emailtcx 224 663 2018-01-30 08:07:27+00:00 24640 04:24:41 Morning Run Europe/Prague other 80.0 lwt
22 20 https://rowsandall.com/rowers/workout/2319/emailcsv https://rowsandall.com/rowers/workout/2319/emailtcx 142 862 2018-01-31 08:34:52+00:00 13659 01:35:37 Morning Run Europe/Prague other 80.0 lwt
23 21 https://rowsandall.com/rowers/workout/2318/emailcsv https://rowsandall.com/rowers/workout/2318/emailtcx 101 244 2018-01-31 14:31:30+00:00 8948 01:11:07 Afternoon Run Europe/Prague other 80.0 lwt
24 22 https://rowsandall.com/rowers/workout/2317/emailcsv https://rowsandall.com/rowers/workout/2317/emailtcx 160 216 2018-02-01 08:46:14+00:00 10501 01:32:54 Morning Run Europe/Prague other 80.0 lwt
25 23 https://rowsandall.com/rowers/workout/2295/emailcsv https://rowsandall.com/rowers/workout/2295/emailtcx 88 75 2018-02-03 14:20:20+00:00 12181 00:51:43 Zwift in the rain Europe/Prague water 80.0 lwt
26 24 https://rowsandall.com/rowers/workout/2316/emailcsv https://rowsandall.com/rowers/workout/2316/emailtcx -5 396 2018-02-04 12:56:40+00:00 9082 00:51:50 Afternoon Run Europe/Prague other 80.0 lwt
27 25 https://rowsandall.com/rowers/workout/2315/emailcsv https://rowsandall.com/rowers/workout/2315/emailtcx 60 40 2018-02-06 17:54:04+00:00 7210 00:31:05 Aborted 2x(1min+2min+3min+4min+3min+2min+1min)/4min 26/24/22/20/22/24/26spm Europe/Prague other 80.0 lwt
28 26 https://rowsandall.com/rowers/workout/2314/emailcsv https://rowsandall.com/rowers/workout/2314/emailtcx 56 0 2018-02-08 06:08:23+00:00 0 00:51:58 Morning Activity Europe/Prague other 80.0 lwt
29 27 https://rowsandall.com/rowers/workout/2313/emailcsv https://rowsandall.com/rowers/workout/2313/emailtcx 16 15 2018-02-10 09:10:16+00:00 3040 00:12:44 WU and cd Europe/Prague other 80.0 lwt
30 28 https://rowsandall.com/rowers/workout/2312/emailcsv https://rowsandall.com/rowers/workout/2312/emailtcx 85 66 2018-02-10 09:23:53+00:00 9305 00:40:48 7x(1min+1min+1min)/3min @ 24/26/28spm Europe/Prague other 80.0 lwt
31 29 https://rowsandall.com/rowers/workout/2311/emailcsv https://rowsandall.com/rowers/workout/2311/emailtcx 14 6 2018-02-10 10:06:03+00:00 2009 00:08:59 WU and cd Europe/Prague other 80.0 lwt
32 30 https://rowsandall.com/rowers/workout/2310/emailcsv https://rowsandall.com/rowers/workout/2310/emailtcx 133 68 2018-02-11 16:57:33+00:00 14450 01:00:00 Steady State (fused) Europe/Prague other 80.0 lwt
33 31 https://rowsandall.com/rowers/workout/2335/emailcsv https://rowsandall.com/rowers/workout/2335/emailtcx 24 20 2018-02-12 05:02:06+00:00 3872 00:27:12.200000 SpdCoach 1 America/Los_Angeles water 80.0 lwt
34 32 https://rowsandall.com/rowers/workout/2338/emailcsv https://rowsandall.com/rowers/workout/2338/emailtcx 431 1524 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
35 33 https://rowsandall.com/rowers/workout/2339/emailcsv https://rowsandall.com/rowers/workout/2339/emailtcx 403 1502 2018-02-12 05:02:06+00:00 7522 09:41:48.200000 Joined Workout America/Los_Angeles water 80.0 lwt
36 34 https://rowsandall.com/rowers/workout/2341/emailcsv https://rowsandall.com/rowers/workout/2341/emailtcx 431 1524 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
37 35 https://rowsandall.com/rowers/workout/2342/emailcsv https://rowsandall.com/rowers/workout/2342/emailtcx 431 1524 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
38 36 https://rowsandall.com/rowers/workout/2343/emailcsv https://rowsandall.com/rowers/workout/2343/emailtcx 431 1524 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
39 37 https://rowsandall.com/rowers/workout/2344/emailcsv https://rowsandall.com/rowers/workout/2344/emailtcx 24 20 2018-02-12 14:02:06+00:00 3872 00:27:12.200000 SpdCoach Sessions imported through email America/Los_Angeles water 80.0 lwt
40 38 https://rowsandall.com/rowers/workout/2347/emailcsv https://rowsandall.com/rowers/workout/2347/emailtcx 89 73 2018-02-12 14:02:06+00:00 9336 00:58:35 Joined Workout imported through email America/Los_Angeles water 80.0 lwt
41 39 https://rowsandall.com/rowers/workout/2336/emailcsv https://rowsandall.com/rowers/workout/2336/emailtcx 37 32 2018-02-12 14:29:01+00:00 3650 00:14:53.200000 SpdCoach 2 Summary for your location at 2018-02-12T14:55:00Z: Temperature 9.0C/48.2F. Wind: 2.5 m/s (5.0 kt). Wind Bearing: 280.0 degrees America/Los_Angeles water 80.0 lwt
42 40 https://rowsandall.com/rowers/workout/2340/emailcsv https://rowsandall.com/rowers/workout/2340/emailtcx 65 49 2018-02-12 14:29:01+00:00 5464 00:31:40 Joined Workout America/Los_Angeles water 80.0 lwt
43 41 https://rowsandall.com/rowers/workout/2345/emailcsv https://rowsandall.com/rowers/workout/2345/emailtcx 37 32 2018-02-12 14:29:01+00:00 3650 00:14:53.200000 SpdCoach Sessions (2) imported through email America/Los_Angeles water 80.0 lwt
44 42 https://rowsandall.com/rowers/workout/2337/emailcsv https://rowsandall.com/rowers/workout/2337/emailtcx 11 5 2018-02-12 14:49:02+00:00 1814 00:11:39 SpdCoach 3 America/Los_Angeles water 80.0 lwt
45 43 https://rowsandall.com/rowers/workout/2346/emailcsv https://rowsandall.com/rowers/workout/2346/emailtcx 11 5 2018-02-12 14:49:02+00:00 1814 00:11:39 SpdCoach Sessions (3) imported through email America/Los_Angeles water 80.0 lwt
46 44 https://rowsandall.com/rowers/workout/2309/emailcsv https://rowsandall.com/rowers/workout/2309/emailtcx 8 9 2018-02-12 18:39:45+00:00 2014 00:08:33 WU and CD Europe/Prague other 80.0 lwt
47 45 https://rowsandall.com/rowers/workout/2308/emailcsv https://rowsandall.com/rowers/workout/2308/emailtcx 90 73 2018-02-12 18:49:04+00:00 10562 00:46:10 4x2km Europe/Prague rower 80.0 lwt
48 46 https://rowsandall.com/rowers/workout/2307/emailcsv https://rowsandall.com/rowers/workout/2307/emailtcx 9 5 2018-02-12 19:36:46+00:00 1998 00:09:35 WU and CD Europe/Prague other 80.0 lwt
49 47 https://rowsandall.com/rowers/workout/2306/emailcsv https://rowsandall.com/rowers/workout/2306/emailtcx 48 0 2018-02-14 05:55:22+00:00 0 00:58:33 Morning Activity Europe/Prague other 80.0 lwt
50 48 https://rowsandall.com/rowers/workout/2378/emailcsv https://rowsandall.com/rowers/workout/2378/emailtcx 40 6 2018-02-17 08:17:50+00:00 4386 00:27:08 Morning Run Europe/Prague other 80.0 lwt
51 49 https://rowsandall.com/rowers/workout/2381/emailcsv https://rowsandall.com/rowers/workout/2381/emailtcx 79 48 2018-02-21 06:26:01+00:00 6119 00:27:20.200000 3x2km Racice Europe/Prague water 80.0 lwt
52 50 https://rowsandall.com/rowers/workout/2384/emailcsv https://rowsandall.com/rowers/workout/2384/emailtcx 107 66 2018-02-22 09:32:01+00:00 8000 00:35:08.500000 8k trial Europe/Prague water 80.0 lwt
53 51 https://rowsandall.com/rowers/workout/2383/emailcsv https://rowsandall.com/rowers/workout/2383/emailtcx -2 50 2018-02-23 15:17:03+00:00 5918 00:25:10.700000 Horin Europe/Prague water 80.0 lwt
54 52 https://rowsandall.com/rowers/workout/2385/emailcsv https://rowsandall.com/rowers/workout/2385/emailtcx 169 0 2018-02-24 11:58:09+00:00 17045 01:35:59 Washington America/New_York water 80.0 lwt
55 53 https://rowsandall.com/rowers/workout/2386/emailcsv https://rowsandall.com/rowers/workout/2386/emailtcx -2 59 2018-02-25 12:24:59+00:00 6182 00:26:24.400000 9x500m/70sec Europe/Prague rower 80.0 lwt
56 54 https://rowsandall.com/rowers/workout/2387/emailcsv https://rowsandall.com/rowers/workout/2387/emailtcx 11 7 2018-02-27 13:19:44+00:00 2206 00:10:00 StatsError Europe/Prague rower 80.0 lwt
57 55 https://rowsandall.com/rowers/workout/2388/emailcsv https://rowsandall.com/rowers/workout/2388/emailtcx 87 410 2018-03-04 12:16:34+00:00 17817 01:29:08 Afternoon Activity Europe/Prague other 80.0 lwt