Private
Public Access
1
0

Merge branch 'develop' into feature/metrics

This commit is contained in:
Sander Roosendaal
2020-01-11 13:05:01 +01:00
70 changed files with 2665 additions and 1361 deletions
+2
View File
@@ -0,0 +1,2 @@
venv
config.yaml
+1
View File
@@ -46,6 +46,7 @@ manage.py
# migrations # migrations
/rowers/migrations/ /rowers/migrations/
/cvkbrno/migrations/ /cvkbrno/migrations/
/survey/migrations/
# secrets # secrets
config.yaml config.yaml
+3
View File
@@ -0,0 +1,3 @@
FROM rosti/python:3.6
WORKDIR /srv/app/
COPY . .
+10
View File
@@ -0,0 +1,10 @@
#!/srv/bin/venv python3.6
import os
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rowsandall_app.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
#execute_from_command_line(sys.argv)
+1
View File
@@ -17,6 +17,7 @@ from .models import (
# Register your models here so you can use them in the Admin module # Register your models here so you can use them in the Admin module
# Rower details directly under the User # Rower details directly under the User
class RowerInline(admin.StackedInline): class RowerInline(admin.StackedInline):
model = Rower model = Rower
+8
View File
@@ -196,3 +196,11 @@ def alert_get_stats(alert,nperiod=0):
} }
# run alert report # run alert report
# check alert permission
def checkalertowner(alert,user):
if alert.manager == user:
return True
if alert.rower.user == user:
return True
return False
+1
View File
@@ -18,6 +18,7 @@ from iso8601 import ParseError
import numpy import numpy
import json import json
from json.decoder import JSONDecodeError
from rowsandall_app.settings import ( from rowsandall_app.settings import (
C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET
+26 -10
View File
@@ -1081,7 +1081,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
makeprivate=False, makeprivate=False,
oarlength=2.89, inboard=0.88, oarlength=2.89, inboard=0.88,
forceunit='lbs', forceunit='lbs',
consistencychecks=False): consistencychecks=False,
impeller=False):
message = None message = None
powerperc = 100 * np.array([r.pw_ut2, powerperc = 100 * np.array([r.pw_ut2,
@@ -1289,7 +1290,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
startdatetime=workoutstartdatetime, startdatetime=workoutstartdatetime,
inboard=inboard, oarlength=oarlength, inboard=inboard, oarlength=oarlength,
timezone=timezone_str, timezone=timezone_str,
privacy=privacy) privacy=privacy,
impeller=impeller)
try: try:
w.save() w.save()
except ValidationError: except ValidationError:
@@ -1421,24 +1423,30 @@ def handle_nonpainsled(f2, fileformat, summary=''):
oarlength = 2.89 oarlength = 2.89
inboard = 0.88 inboard = 0.88
hasrecognized = False hasrecognized = False
impeller = False
row,hasrecognized,summary,fileformat = parsenonpainsled(fileformat,f2,summary) row,hasrecognized,summary,fileformat = parsenonpainsled(fileformat,f2,summary)
# Handle c2log # Handle c2log
if (fileformat == 'c2log' or fileformat == 'rowprolog'): if (fileformat == 'c2log' or fileformat == 'rowprolog'):
return (0,'',0,0,'') return (0,'',0,0,'',impeller)
if not hasrecognized: if not hasrecognized:
return (0,'',0,0,'') return (0,'',0,0,'',impeller)
f_to_be_deleted = f2 f_to_be_deleted = f2
# should delete file # should delete file
f2 = f2[:-4] + 'o.csv' f2 = f2[:-4] + 'o.csv'
try:
row2 = rrdata(df = row.df) row2 = rrdata(df = row.df)
if 'speedcoach2' in fileformat:
# impeller consistency
impellerdata, consistent, ratio = row.impellerconsistent(threshold=0.3)
if impellerdata and consistent:
impeller = True
if impellerdata and not consistent:
row2.use_gpsdata()
row2.write_csv(f2, gzip=True) row2.write_csv(f2, gzip=True)
except:
return (0,'',0,0,'')
# os.remove(f2) # os.remove(f2)
try: try:
@@ -1449,7 +1457,7 @@ def handle_nonpainsled(f2, fileformat, summary=''):
except: except:
pass pass
return (f2, summary, oarlength, inboard, fileformat) return (f2, summary, oarlength, inboard, fileformat, impeller)
# Create new workout from file and store it in the database # Create new workout from file and store it in the database
# This routine should be used everywhere in views.py and mailprocessing.py # This routine should be used everywhere in views.py and mailprocessing.py
@@ -1464,6 +1472,7 @@ def new_workout_from_file(r, f2,
makeprivate=False, makeprivate=False,
notes=''): notes=''):
message = None message = None
impeller = False
try: try:
fileformat = get_file_type(f2) fileformat = get_file_type(f2)
except (IOError,UnicodeDecodeError): except (IOError,UnicodeDecodeError):
@@ -1476,6 +1485,7 @@ def new_workout_from_file(r, f2,
inboard = 0.88 inboard = 0.88
if len(fileformat) == 3 and fileformat[0] == 'zip': if len(fileformat) == 3 and fileformat[0] == 'zip':
f_to_be_deleted = f2 f_to_be_deleted = f2
impeller = False
workoutsbox = Mailbox.objects.filter(name='workouts')[0] workoutsbox = Mailbox.objects.filter(name='workouts')[0]
msg = Message(mailbox=workoutsbox, msg = Message(mailbox=workoutsbox,
from_header=r.user.email, from_header=r.user.email,
@@ -1543,7 +1553,7 @@ def new_workout_from_file(r, f2,
# handle non-Painsled by converting it to painsled compatible CSV # handle non-Painsled by converting it to painsled compatible CSV
if (fileformat != 'csv'): if (fileformat != 'csv'):
f2, summary, oarlength, inboard, fileformat = handle_nonpainsled( f2, summary, oarlength, inboard, fileformat, impeller = handle_nonpainsled(
f2, f2,
fileformat, fileformat,
summary=summary summary=summary
@@ -1571,7 +1581,8 @@ def new_workout_from_file(r, f2,
summary=summary, summary=summary,
inboard=inboard, oarlength=oarlength, inboard=inboard, oarlength=oarlength,
title=title, title=title,
forceunit='N' forceunit='N',
impeller=impeller,
) )
return (id, message, f2) return (id, message, f2)
@@ -1782,6 +1793,11 @@ def delete_strokedata(id):
dirname = 'media/strokedata_{id}.parquet.gz'.format(id=id) dirname = 'media/strokedata_{id}.parquet.gz'.format(id=id)
try: try:
shutil.rmtree(dirname) shutil.rmtree(dirname)
except OSError:
try:
os.remove(dirname)
except FileNotFoundError:
pass
except FileNotFoundError: except FileNotFoundError:
pass pass
+6 -1
View File
@@ -31,6 +31,12 @@ formaxlabels = axlabels.copy()
formaxlabels.pop('None') formaxlabels.pop('None')
parchoices = list(sorted(formaxlabels.items(), key = lambda x:x[1])) parchoices = list(sorted(formaxlabels.items(), key = lambda x:x[1]))
class SurveyForm(forms.Form):
surveydone = forms.ChoiceField(
required=True,
choices=(('YES','YES'),('NO','NO')),
label='Will you take a 2 minute survey to help improve rowsandall?',
widget = forms.RadioSelect)
class FlexibleDecimalField(forms.DecimalField): class FlexibleDecimalField(forms.DecimalField):
@@ -115,7 +121,6 @@ class EmailForm(forms.Form):
lastname = forms.CharField(max_length=255) lastname = forms.CharField(max_length=255)
email = forms.EmailField() email = forms.EmailField()
subject = forms.CharField(max_length=255) subject = forms.CharField(max_length=255)
botcheck = forms.CharField(max_length=5)
message = forms.CharField() message = forms.CharField()
disqualificationreasons = ( disqualificationreasons = (
+3 -2
View File
@@ -86,6 +86,7 @@ def rdata(file, rower=rrower()):
def make_new_workout_from_email(rower, datafile, name, cntr=0,testing=False): def make_new_workout_from_email(rower, datafile, name, cntr=0,testing=False):
""" This one is used in processemail """ """ This one is used in processemail """
workouttype = 'rower' workouttype = 'rower'
impeller = False
try: try:
datafilename = datafile.name datafilename = datafile.name
@@ -139,7 +140,7 @@ def make_new_workout_from_email(rower, datafile, name, cntr=0,testing=False):
if fileformat == 'att': if fileformat == 'att':
return 0 return 0
if fileformat != 'csv': if fileformat != 'csv':
filename_mediadir, summary, oarlength, inboard,fileformat = dataprep.handle_nonpainsled( filename_mediadir, summary, oarlength, inboard,fileformat,impeller = dataprep.handle_nonpainsled(
'media/' + datafilename, fileformat, summary) 'media/' + datafilename, fileformat, summary)
if not filename_mediadir: if not filename_mediadir:
return 0 return 0
@@ -181,7 +182,7 @@ def make_new_workout_from_email(rower, datafile, name, cntr=0,testing=False):
oarlength=oarlength, oarlength=oarlength,
title=name, title=name,
workoutsource=fileformat, workoutsource=fileformat,
notes='' notes='',impeller=impeller,
) )
+1 -1
View File
@@ -58,7 +58,7 @@ class Command(BaseCommand):
# advance next_run # advance next_run
if not testing: if not testing:
alert.next_run = datetime.date.today() + datetime.timedelta(days=alert.period) alert.next_run = datetime.date.today() + datetime.timedelta(days=alert.period-1)
alert.save() alert.save()
if testing: if testing:
+2 -2
View File
@@ -15,7 +15,7 @@ from math import log10
nometrics = [ nometrics = [
'originalvelo', 'originalvelo',
'cumdist', # 'cumdist',
'strokes_slsh_min', 'strokes_slsh_min',
' WorkPerStroke (joules)', ' WorkPerStroke (joules)',
' activityIdx', ' activityIdx',
@@ -258,7 +258,7 @@ rowingmetrics = (
'ax_min': 0, 'ax_min': 0,
'ax_max': 30, 'ax_max': 30,
'default': 0, 'default': 0,
'sigfigs': 0, 'sigfigs': 1,
'mode':'water', 'mode':'water',
'type': 'pro', 'type': 'pro',
'group': 'stroke'}), 'group': 'stroke'}),
+21 -1
View File
@@ -1,4 +1,3 @@
from django.utils import timezone from django.utils import timezone
from rowers.models import Workout, PowerTimeFitnessMetric, Rower, PaidPlan from rowers.models import Workout, PowerTimeFitnessMetric, Rower, PaidPlan
import datetime import datetime
@@ -98,8 +97,29 @@ allowed_paths = [
'/rowers/me/gdpr-optin-confirm' '/rowers/me/gdpr-optin-confirm'
'/rowers/exportallworkouts/', '/rowers/exportallworkouts/',
'/rowers/exportallworkouts', '/rowers/exportallworkouts',
'/rowers/survey/'
] ]
class SurveyMiddleWare(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated and request.path not in allowed_paths:
r = getrower(request.user)
nexturl = request.path
if 'survey' in nexturl:
nexturl = '/rowers/list-workouts'
mustseesurvey = request.user.date_joined <= timezone.now()-datetime.timedelta(days=14) and not r.surveydone
if mustseesurvey:
return redirect(
'/rowers/survey/?next=%s' % nexturl
)
response = self.get_response(request)
return response
class GDPRMiddleWare(object): class GDPRMiddleWare(object):
def __init__(self, get_response): def __init__(self, get_response):
self.get_response = get_response self.get_response = get_response
+6 -3
View File
@@ -730,6 +730,8 @@ class Rower(models.Model):
# Privacy Data # Privacy Data
gdproptin = models.BooleanField(default=False) gdproptin = models.BooleanField(default=False)
gdproptindate = models.DateTimeField(blank=True,null=True) gdproptindate = models.DateTimeField(blank=True,null=True)
surveydone = models.BooleanField(default=False)
surveydonedate = models.DateTimeField(blank=True,null=True)
# Heart Rate Zone data # Heart Rate Zone data
@@ -2734,6 +2736,7 @@ class Workout(models.Model):
choices=privacychoices) choices=privacychoices)
rankingpiece = models.BooleanField(default=False,verbose_name='Ranking Piece') rankingpiece = models.BooleanField(default=False,verbose_name='Ranking Piece')
duplicate = models.BooleanField(default=False,verbose_name='Duplicate Workout') duplicate = models.BooleanField(default=False,verbose_name='Duplicate Workout')
impeller = models.BooleanField(default=False,verbose_name='Impeller')
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
user = self.user user = self.user
@@ -3202,12 +3205,12 @@ class WorkoutForm(ModelForm):
# Used for the rowing physics calculations # Used for the rowing physics calculations
class AdvancedWorkoutForm(ModelForm): class AdvancedWorkoutForm(ModelForm):
quick_calc = forms.BooleanField(initial=True,required=False) #quick_calc = forms.BooleanField(initial=True,required=False)
go_service = forms.BooleanField(initial=False,required=False,label='Experimental') #go_service = forms.BooleanField(initial=False,required=False,label='Experimental')
class Meta: class Meta:
model = Workout model = Workout
fields = ['boattype','weightvalue','quick_calc'] fields = ['boattype','weightvalue']
class RowerExportForm(ModelForm): class RowerExportForm(ModelForm):
class Meta: class Meta:
+3 -2
View File
@@ -706,6 +706,7 @@ def get_team(request):
def get_dates_timeperiod(request,startdatestring='',enddatestring='', def get_dates_timeperiod(request,startdatestring='',enddatestring='',
defaulttimeperiod='thisweek'): defaulttimeperiod='thisweek'):
# set start end date according timeperiod # set start end date according timeperiod
# should always return datetime.date
timeperiod = request.GET.get('when') timeperiod = request.GET.get('when')
@@ -720,8 +721,8 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='',
startdate = dt.datetime.strptime(startdatestring,'%Y-%m-%d').date() startdate = dt.datetime.strptime(startdatestring,'%Y-%m-%d').date()
enddate = dt.datetime.strptime(enddatestring,'%Y-%m-%d').date() enddate = dt.datetime.strptime(enddatestring,'%Y-%m-%d').date()
except ValueError: except ValueError:
startdate = parser.parse(startdatestring,fuzzy=True) startdate = parser.parse(startdatestring,fuzzy=True).date()
enddate = parser.parse(enddatestring, fuzzy=True) enddate = parser.parse(enddatestring, fuzzy=True).date()
return startdate,enddate return startdate,enddate
+4 -10
View File
@@ -1465,19 +1465,11 @@ def handle_otwsetpower(self,f1, boattype, weightvalue,
else: else:
debug = False debug = False
if 'quick_calc' in kwargs:
usetable = kwargs['quick_calc']
else:
usetable = False
if 'go_service' in kwargs:
goservice = kwargs['go_service']
else:
goservice = False
kwargs['jobid'] = job_id kwargs['jobid'] = job_id
weightvalue = float(weightvalue) weightvalue = float(weightvalue)
# check what the real file name is # check what the real file name is
@@ -1518,6 +1510,8 @@ def handle_otwsetpower(self,f1, boattype, weightvalue,
progressurl += "/rowers/record-progress/" progressurl += "/rowers/record-progress/"
progressurl += job_id+'/' progressurl += job_id+'/'
goservice = True
if goservice: if goservice:
# do something (this should return from go service) # do something (this should return from go service)
with grpc.insecure_channel( with grpc.insecure_channel(
+56 -37
View File
@@ -3,6 +3,7 @@
{% block main %} {% block main %}
<h1>Contact us through email</h1> <h1>Contact us through email</h1>
<ul class="main-content"> <ul class="main-content">
<li class="grid_2"> <li class="grid_2">
{% if form.errors %} {% if form.errors %}
@@ -12,51 +13,49 @@
{% endif %} {% endif %}
<form method="post" action="/rowers/email/send/">{% csrf_token %} <form method="post" action="/rowers/email/send/" id="contactform">{% csrf_token %}
<p>
<table> <table>
<tr><td> <tr><td>
<label class="label">Name <span class="required">*</span></label> <label>Name <span class="required">*</span></label>
<span class="span"> <span class="span">
</td><td> </td><td>
<input name= "firstname" class="inputtext" maxlength="255" size="12" /> <input name= "firstname" class="inputtext" maxlength="255" size="12" />
<label class="spanlabel">First</label> <label>First</label>
</td></tr> </td></tr>
<tr><td> <tr><td>
</span> </span>
<span class="span"> <span class="span">
</td><td> </td><td>
<input name= "lastname" class="inputtext" maxlength="255" size="18" /> <input name= "lastname" class="inputtext" maxlength="255" size="18" />
<label class="spanlabel">Last</label> <label>Last</label>
</span> </span>
</td></tr>
<tr><td>
<label class="label">Email Address <span class="required">*</span></label>
</td><td>
<input name="email" class="inputtext" type="text" maxlength="255" size="35" />
</td></tr>
<tr><td>
<label class="label">Subject <span class="required">*</span></label>
</td><td>
<input name="subject" class="inputtext" type="text" maxlength="255" size="45" />
</td></tr>
</table>
<label class="label">You must answer <u>YES</u> to the question below to approve sending this email. <span class="required">*</span></label>
<table>
<tr><td>
Do you want to send me an email?
</td><td>
<input name="botcheck" class="inputtext" type="text" maxlength="5" size="5" />
</td></tr> </td></tr>
<tr><td> <tr><td>
<label class="label">Message <span class="required">*</span></label> <label>Email Address <span class="required">*</span></label>
</td><td>
<input name="email" class="inputtext" type="text" maxlength="255" size="35" />
</td></tr>
<tr><td>
<label>Subject <span class="required">*</span></label>
</td><td>
<input name="subject" class="inputtext" type="text" maxlength="255" size="45" />
</td></tr>
</table>
<table>
<input type="hidden" name="g-recaptcha-response" id='recaptcha'>
</td></tr>
<tr><td>
<label>Message <span class="required">*</span></label>
</td><td> </td><td>
<textarea name="message" class="inputtextarea" rows="11" cols="45"></textarea> <textarea name="message" class="inputtextarea" rows="11" cols="45"></textarea>
</td></tr> </td></tr>
<tr><td> <tr><td>
<input type="submit" name="submitform" value="Send Message" /> <input type="submit" name="submitform" value="Send Message" />
</td></tr> </td></tr>
</table> </table>
</form> </p>
</form>
</li> </li>
<li class="grid_2"> <li class="grid_2">
@@ -78,9 +77,9 @@
<ul> <ul>
<li><a href="https://www.facebook.com/groups/rowsandall/">https://www.facebook.com/groups/rowsandall/</a></li> <li><a href="https://www.facebook.com/groups/rowsandall/">https://www.facebook.com/groups/rowsandall/</a></li>
</ul> </ul>
</li> </li>
<li class="grid_2"> <li class="grid_2">
<h1>Twitter</h1> <h1>Twitter</h1>
<p>You can also check me on Twitter: <p>You can also check me on Twitter:
@@ -89,9 +88,9 @@
</ul> </ul>
When the site is down, this is the appropriate channel to look for apologies, updates, and offer help. When the site is down, this is the appropriate channel to look for apologies, updates, and offer help.
</p> </p>
</li> </li>
<li class="grid_2"> <li class="grid_2">
<h1>Rowsandall s.r.o.</h1> <h1>Rowsandall s.r.o.</h1>
<p><strong>Rowsandall s.r.o.</strong><br /> <p><strong>Rowsandall s.r.o.</strong><br />
@@ -106,12 +105,32 @@
Regional Court in Brno (Společnost je zapsána v obchodním rejstříku vedeném u Krajského soudu v Brně, oddíl C, vložka 105845)<br/> Regional Court in Brno (Společnost je zapsána v obchodním rejstříku vedeném u Krajského soudu v Brně, oddíl C, vložka 105845)<br/>
</p> </p>
</li> </li>
</ul> </ul>
{% endblock %} {% endblock %}
{% block sidebar %} {% block sidebar %}
{% include 'menu_help.html' %} {% include 'menu_help.html' %}
{% endblock %} {% endblock %}
{% block scripts %}
<script src="https://www.google.com/recaptcha/api.js?render=6LdRtMwUAAAAAGcKcFc28pGvmEb1wwDY27i0AX8B"></script>
<script>
// 3
grecaptcha.ready(function() {
// 4
$('#contactform').submit(function(e){
var form = this;
// 5
e.preventDefault()
grecaptcha.execute('6LdRtMwUAAAAAGcKcFc28pGvmEb1wwDY27i0AX8B', {action: 'contactform'}).then(function(token) {
// 6
$('#recaptcha').val(token)
// 7
form.submit()
});
})
});
</script>
{% endblock %}
+125 -8
View File
@@ -29,6 +29,8 @@
{% block meta %} {% block meta %}
{% leaflet_js %} {% leaflet_js %}
{% leaflet_css %} {% leaflet_css %}
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" src="{% static 'js/videogauges.js' %}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script> <script>
@@ -38,6 +40,10 @@
$(this).removeAttr('disabled'); $(this).removeAttr('disabled');
}); });
}); });
document.getElementById("smallscreen").style.display = "none";
if ($(window).width() <= 950) {
$("#smallscreen").show()
}
}); });
</script> </script>
<script> <script>
@@ -102,6 +108,12 @@ function copyText() {
{% language 'en' %} {% language 'en' %}
<h1>Video Analysis for {{ workout.name }}</h1> <h1>Video Analysis for {{ workout.name }}</h1>
<ul class="main-content"> <ul class="main-content">
<li class="grid_4" id="smallscreen">
<p>Your screen is too small to show the full functionality. Click
<a href="/rowers/video/{{ analysis.id|encode }}/m">here</a>
to get to a version that is better suited for small screens.
</p>
</li>
{% if user.is_authenticated and user == workout.user.user and not locked %} {% if user.is_authenticated and user == workout.user.user and not locked %}
<li class="grid_2"> <li class="grid_2">
<p>Paste link to you tube video below</p> <p>Paste link to you tube video below</p>
@@ -252,7 +264,7 @@ function copyText() {
// catchangle = ctch[Math.round(datatime)]; // catchangle = ctch[Math.round(datatime)];
{% for id, metric in metrics.items %} {% for id, metric in metrics.items %}
{{ id }}_now = {{ id }}_values[Math.round(datatime)]; {{ id }}_now = {{ id }}_values[Math.round(datatime)];
// console.log(datatime,{{ id }}_now, "{{ metric.name }}") // console.log(datatime,{{ id }},{{ id }}_now, "{{ metric.name }}")
{% endfor %} {% endfor %}
@@ -270,7 +282,9 @@ function copyText() {
{% for group in metricsgroups %} {% for group in metricsgroups %}
try { try {
set_{{ group }}(); set_{{ group }}();
} catch (e) {} } catch (e) {
console.log(e);
}
{% endfor %} {% endfor %}
try { try {
var newLatLng = new L.LatLng(lat, lon); var newLatLng = new L.LatLng(lat, lon);
@@ -370,13 +384,36 @@ function copyText() {
</span> {{ metric.unit }} </span> {{ metric.unit }}
</li> </li>
{% endfor %} {% endfor %}
{% for group in metricsgroups %} </ul>
<li class="grid_2"> <ul class="main-content">
<canvas id="{{ group }}"></canvas> {% if 'basic' in metricsgroups %}
<li class="grid_1">
<div id="basic_spm"></div>
</li> </li>
{% endfor %} <li class="grid_1">
<div id="basic_boatspeed"></div>
</li>
{% endif %}
{% if 'forcepower' in metricsgroups %}
<li class="grid_1">
<div id="forcepower_power"></div>
</li>
{% endif %}
{% if 'athlete' in metricsgroups %}
<li class="grid_1">
<div id="athlete_hr"></div>
</li>
{% endif %}
{% if 'stroke' in metricsgroups %}
{% if workout.workouttype == 'water' %}
<li class="grid_2" style="height:500px">
<div style="width:100%;height:70%;" id="stroke_angles"></div>
</li>
{% endif %}
{% endif %}
</ul> </ul>
</li> </li>
<li class="grid_2"> <li class="grid_2">
{% if analysis and user.is_authenticated and user == analysis.workout.user.user %} {% if analysis and user.is_authenticated and user == analysis.workout.user.user %}
<p> <p>
@@ -384,12 +421,88 @@ function copyText() {
</p> </p>
{% endif %} {% endif %}
</li> </li>
<li class="grid_2">
<p>We're building Gauges to show the video data based on the
<a href="https://developers.google.com/chart">Google charts API</a>.
You can contribute by developing your own gauge in
<a href="https://jsfiddle.net/">JSFiddle</a> like
<a href="https://jsfiddle.net/roosendaalsander/5xrez3bu/">this example</a>.
Please send us the link to the JSFiddle example by email using the
<a href="/rowers/email/">Contact Form</a> and we'll discuss the possibilities
with you.
</p>
</li>
</ul> </ul>
</form> </form>
<p>&nbsp;</p> <p>&nbsp;</p>
<script> <script>
$(document).ready( function() { $(document).ready( function() {
$(window).load(function() {
// initialize data fields
console.log('initializing first value of data');
{% for id, metric in metrics.items %}
{{ id }}_now = {{ id }}_values[0];
document.getElementById("{{ id }}").innerHTML = {{ id }}_now;
document.getElementById("{{ id }}").className = 'bold';
{% endfor %}
document.getElementById("time").innerHTML = Math.round(videotime);
var slider = document.getElementById("myRange");
document.getElementById("datatime").innerHTML = slider.value;
// gauge settings
{% if workout.workouttype != 'water' %}
speedoptions.max = 7;
speedoptions.redTo = 7;
speedoptions.majorTicks = ['0','1','2','3','4','5','6','7'];
{% endif %}
{% if 'basic' in metricsgroups %}
spm_now = spm_values[0];
boatspeed_now = boatspeed_values[0];
set_basic();
{% endif %}
{% if 'forcepower' in metricsgroups %}
poweroptions.max = {{ workout.user.pw_an|add:100|round100 }};
poweroptions.greenFrom = {{ workout.user.pw_ut2 }};
poweroptions.greenTo = {{ workout.user.pw_at }};
poweroptions.yellowFrom = {{ workout.user.pw_at }};
poweroptions.yellowTo = {{ workout.user.pw_an }};
poweroptions.redFrom = {{ workout.user.pw_an }};
poweroptions.redTo = {{ workout.user.pw_an|add:100|round100 }};
poweroptions.majorTicks = {{ workout.user.pw_an|add:100|round100|majorticks }};
{% if workout.workouttype == 'water' %}
poweroptions.max = {{ workout.user.pw_an|waterpower:workout.user|add:100|round100 }}
poweroptions.greenFrom = {{ workout.user.pw_ut2|waterpower:workout.user }};
poweroptions.greenTo = {{ workout.user.pw_at|waterpower:workout.user }};
poweroptions.yellowFrom = {{ workout.user.pw_at|waterpower:workout.user }};
poweroptions.yellowTo = {{ workout.user.pw_an|waterpower:workout.user }};
poweroptions.redFrom = {{ workout.user.pw_an|waterpower:workout.user }};
poweroptions.redTo = {{ workout.user.pw_an|waterpower:workout.user|add:100|round100 }};
poweroptions.majorTicks = {{ workout.user.pw_an|waterpower:workout.user|add:100|round100|majorticks }};
{% endif %}
power_now = power_values[0];
set_forcepower();
{% endif %}
{% if 'athlete' in metricsgroups %}
hroptions.max = {{ workout.user.max|round20 }}
hroptions.greenFrom = {{ workout.user.ut2 }}
hroptions.greenTo = {{ workout.user.at }}
hroptions.yellowFrom = {{ workout.user.at }}
hroptions.yellowTo = {{ workout.user.an }}
hroptions.redFrom = {{ workout.user.an }}
hroptions.redTo = {{ workout.user.max }}
hroptions.majorTicks = {{ workout.user.max|round20|hrmajorticks:workout.user.rest }}
hr_now = hr_values[0];
set_athlete();
{% endif %}
{% if 'stroke' in metricsgroups %}
{% if workout.workouttype == 'water' %}
anglesoptions.PieStartAngle = 90+catch_now;
set_stroke();
{% endif %}
{% endif %}
// cookie reader // cookie reader
function createCookie(name,value,days) { function createCookie(name,value,days) {
if (days) { if (days) {
@@ -496,7 +609,8 @@ function copyText() {
{% for group in metricsgroups %} {% for group in metricsgroups %}
try { try {
set_{{ group }}(); set_{{ group }}();
} catch (e) {} } catch (e) {
}
{% endfor %} {% endfor %}
try { try {
var newLatLng = new L.LatLng(lat, lon); var newLatLng = new L.LatLng(lat, lon);
@@ -563,7 +677,9 @@ function copyText() {
{% for group in metricsgroups %} {% for group in metricsgroups %}
try { try {
set_{{ group }}(); set_{{ group }}();
} catch (e) {} } catch (e) {
console.log(e);
}
{% endfor %} {% endfor %}
try { try {
var newLatLng = new L.LatLng(lat, lon); var newLatLng = new L.LatLng(lat, lon);
@@ -691,6 +807,7 @@ dataplay.onclick = function() {
// } // }
}); });
});
</script> </script>
{% endlanguage %} {% endlanguage %}
+689
View File
@@ -0,0 +1,689 @@
{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% load i18n %}
{% load leaflet_tags %}
{% block title %}Workout Video{% endblock %}
{% block og_title %}{{ analysis.name }}{% endblock %}
{% block description %}Rowing Video Analysis:{{ analysis.name }}{% endblock %}
{% block og_description %}Rowing Video Analysis:{{ analysis.name }}{% endblock %}
{% block og_image %}
{% if analysis %}
<meta property="og:image" content="https://img.youtube.com/vi/{{ analysis.video_id }}/hqdefault.jpg" />
<meta property="og:image:secure_url" content="https://img.youtube.com/vi/{{ analysis.video_id }}/hqdefault.jpg" />
{% else %}
<meta property="og:image" content="http://rowsandall.com/static/img/logo_r.png" />
<meta property="og:image:secure_url" content="https://rowsandall.com/static/img/logo_r.png" />
{% endif %}
{% endblock %}
{% if analysis %}
{% block image_src %}
<link rel="image_src" href="https://img.youtube.com/vi/{{ analysis.video_id }}/hqdefault.jpg" />
{% endblock %}
{% endif %}
{% block meta %}
{% leaflet_js %}
{% leaflet_css %}
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" src="{% static 'js/videogauges.js' %}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(document).ready(function() {
$('form').submit(function(e) {
$(':disabled').each(function(e) {
$(this).removeAttr('disabled');
});
});
});
</script>
<script>
function copyText() {
var tempInput = document.createElement("input");
tempInput.style = "position: absolute; left: -1000px; top: -1000px";
tempInput.value = "{{ siteurl }}/rowers/video/{{ analysis.id|encode }}/m/";
document.body.appendChild(tempInput);
tempInput.select();
document.execCommand("copy");
alert("Copied to clipboard: " + tempInput.value);
document.body.removeChild(tempInput);
}
</script>
{% endblock %}
{% block main %}
<style>
.slidecontainer {
width: 100%; /* Width of the outside container */
}
.bold { font-weight: bold; }
/* The slider itself */
.slider {
-webkit-appearance: none; /* Override default CSS styles */
appearance: none;
width: 100%; /* Full-width */
height: 25px; /* Specified height */
background: #d3d3d3; /* Grey background */
outline: none; /* Remove outline */
opacity: 0.7; /* Set transparency (for mouse-over effects on hover) */
-webkit-transition: .2s; /* 0.2 seconds transition on hover */
transition: opacity .2s;
}
/* Mouse-over effects */
.slider:hover {
opacity: 1; /* Fully shown on mouse-over */
}
/* The slider handle (use -webkit- (Chrome, Opera, Safari, Edge) and -moz- (Firefox) to override default look) */
.slider::-webkit-slider-thumb {
-webkit-appearance: none; /* Override default look */
appearance: none;
width: 25px; /* Set a specific slider handle width */
height: 25px; /* Slider handle height */
background: #4CAF50; /* Green background */
cursor: pointer; /* Cursor on hover */
}
.slider::-moz-range-thumb {
width: 25px; /* Set a specific slider handle width */
height: 25px; /* Slider handle height */
background: #4CAF50; /* Green background */
cursor: pointer; /* Cursor on hover */
}
</style>
{% language 'en' %}
<h1>Video Analysis for {{ workout.name }}</h1>
<ul class="main-content">
<li class="grid_4">
<p>Playing the video will advance the data in synchronization. Use the regular
YouTube controls to move around in the video and play it.</p>
<p>In this reduced view, you cannot edit the video analysis. There is a separate
view for that <a href="{{ siteurl }}/rowers/video/{{ analysis.id|encode }}">here</a>.
</p>
</li>
<li class="grid_4">
<span class="fb-share-button" style="height:20px; vertical-align: top;"
data-href="{{ siteurl }}/rowers/video/{{ analysis.id|encode }}/m/"
data-layout="button" data-size="small" data-mobile-iframe="false">
<a class="fb-xfbml-parse-ignore" target="_blank"
href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/video/{{ analysis.id|encode }}/m/">
Share</a>
</span>
<span>
<a class="twitter-share-button"
href="https://twitter.com/intent/tweet"
data-url="{{ siteurl }}/rowers/video/{{ analysis.id|encode }}/m/"
data-text="@rowsandall #rowingdata">Tweet</a>
</span>
<span>
<button title="Copy Shareable Link" onclick="copyText()"
style="color:#1c75bc;background:none;border:0;"><i class="fas fa-copy"></i></button>
</span>
</li>
</ul>
<ul class="main-content">
<li class="grid_3">
<div id="theplot" class="flexplot mapdiv">
{{ mapdiv | safe}}
</div>
<div class="slidecontainer">
<input type="range" min="0" max="{{ maxtime }}" value="{{ analysis.delay }}"
id="myRange">
</div>
<div id="dataplay"></div>
<!-- <div id="datastop"></div> -->
</li>
<li class="grid_4">
<div id="player"></div>
<script>
// 1. Code for the map
{{ mapscript | safe }}
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
tag.removeAttribute('allowfullscreen');
tag.setAttribute('donotallowfullscreen','')
tag.setAttribute('playsinline','1')
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// 3. This function creates an <iframe> (and YouTube player)
// after the API code downloads.
var player;
var playing = false;
var dataplaying = false;
var videotime = 0;
var data = JSON.parse('{{ data|safe }}');
{% for id, metric in metrics.items %}
var {{ id }}_values = data["{{ id }}"];
// console.log("{{ id }}_values",{{ id }}_values);
{% endfor %}
// var boatspeed = data["boatspeed"];
var latitude = data["latitude"];
var longitude = data["longitude"];
// var spm = data["spm"];
// var ctch = data["catch"];
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '315',
width: '560',
modestbranding: '1',
playerVars: {'playsinline':'1'},
videoId: '{{ video_id }}',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
// event.target.playVideo();
}
function updateTime() {
var oldTime = videotime;
var slider = document.getElementById("myRange");
var lock = document.getElementById("lock");
if(player && player.getCurrentTime) {
videotime = player.getCurrentTime();
var delay = document.getElementById("id_delay").value;
if (lock.checked) {
sliderpos = Math.round(videotime) + Math.round(delay);
slider.value = sliderpos;
}
// gauge.set(catch_now);
}
if(videotime !== oldTime) {
onProgress(videotime);
}
}
timeupdater = setInterval(updateTime, 1000);
// when the time changes, this will be called.
function onProgress(currentTime) {
var slider = document.getElementById("myRange");
var lock = document.getElementById("lock");
videotime = player.getCurrentTime();
var delay = document.getElementById("id_delay").value;
var output = document.getElementById("id_delay");
datatime = slider.value;
if (lock.checked) {
if (!dataplaying) { // set data values
sliderpos = Math.round(videotime) + Math.round(delay);
slider.value = sliderpos;
// Setting Data
// velo = boatspeed[Math.round(datatime)];
lat = latitude[Math.round(datatime)];
lon = longitude[Math.round(datatime)];
// strokerate = spm[Math.round(datatime)];
// catchangle = ctch[Math.round(datatime)];
{% for id, metric in metrics.items %}
{{ id }}_now = {{ id }}_values[Math.round(datatime)];
// console.log(datatime,{{ id }},{{ id }}_now, "{{ metric.name }}")
{% endfor %}
{% for group in metricsgroups %}
try {
set_{{ group }}();
} catch (e) {
console.log(e);
}
{% endfor %}
try {
var newLatLng = new L.LatLng(lat, lon);
// console.log(newLatLng);
marker.setLatLng(newLatLng);
} catch (e) {
}
}
} else {
if (!dataplaying) {
output.value = Math.round(datatime)-Math.round(videotime);
}
}
}
function stopVideo() {
player.pauseVideo();
playing = false;
}
// call this function when player state changes
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING && lock.checked) {
var dataplay = document.getElementById("dataplay").childNodes[0];
dataplay.value = String.fromCharCode(10074,10074);
} else if (lock.checked) {
var dataplay = document.getElementById("dataplay").childNodes[0];
dataplay.value = String.fromCharCode(9658);
}
}
</script>
</li>
<li class="grid_4">
<input type="hidden" name="lock" id="lock" value="Lock">
</li>
</ul>
<p>&nbsp;</p>
<form enctype="multipart/form-data" action="" method="post">
<ul class="main-content">
<li class="grid_4">
<input type="hidden" id="id_delay" value="{{ analysis.delay }}">
</li>
<li class="grid_4" >
<ul class="main-content">
{% if 'basic' in metricsgroups %}
<li class="grid_1">
<div id="basic_spm"></div>
</li>
<li class="grid_1">
<div id="basic_boatspeed"></div>
</li>
{% endif %}
{% if 'forcepower' in metricsgroups %}
<li class="grid_1">
<div id="forcepower_power"></div>
</li>
{% endif %}
{% if 'athlete' in metricsgroups %}
<li class="grid_1">
<div id="athlete_hr"></div>
</li>
{% endif %}
{% if 'stroke' in metricsgroups %}
{% if workout.workouttype == 'water' %}
<li class="grid_1" style="height:500px">
<div style="width:100%;height:70%;" id="stroke_angles"></div>
</li>
{% endif %}
{% endif %}
</ul>
</li>
</ul>
</form>
<p>&nbsp;</p>
<script>
$(document).ready( function() {
$(window).load(function() {
// initialize data fields
console.log('initializing first value of data');
{% for id, metric in metrics.items %}
{{ id }}_now = {{ id }}_values[0];
{% endfor %}
var slider = document.getElementById("myRange");
// gauge settings
{% if workout.workouttype != 'water' %}
speedoptions.max = 7;
speedoptions.redTo = 7;
speedoptions.majorTicks = ['0','1','2','3','4','5','6','7'];
{% endif %}
{% if 'basic' in metricsgroups %}
spm_now = spm_values[0];
boatspeed_now = boatspeed_values[0];
set_basic();
{% endif %}
{% if 'forcepower' in metricsgroups %}
poweroptions.max = {{ workout.user.pw_an|add:100|round100 }};
poweroptions.greenFrom = {{ workout.user.pw_ut2 }};
poweroptions.greenTo = {{ workout.user.pw_at }};
poweroptions.yellowFrom = {{ workout.user.pw_at }};
poweroptions.yellowTo = {{ workout.user.pw_an }};
poweroptions.redFrom = {{ workout.user.pw_an }};
poweroptions.redTo = {{ workout.user.pw_an|add:100|round100 }};
poweroptions.majorTicks = {{ workout.user.pw_an|add:100|round100|majorticks }};
{% if workout.workouttype == 'water' %}
poweroptions.max = {{ workout.user.pw_an|waterpower:workout.user|add:100|round100 }}
poweroptions.greenFrom = {{ workout.user.pw_ut2|waterpower:workout.user }};
poweroptions.greenTo = {{ workout.user.pw_at|waterpower:workout.user }};
poweroptions.yellowFrom = {{ workout.user.pw_at|waterpower:workout.user }};
poweroptions.yellowTo = {{ workout.user.pw_an|waterpower:workout.user }};
poweroptions.redFrom = {{ workout.user.pw_an|waterpower:workout.user }};
poweroptions.redTo = {{ workout.user.pw_an|waterpower:workout.user|add:100|round100 }};
poweroptions.majorTicks = {{ workout.user.pw_an|waterpower:workout.user|add:100|round100|majorticks }};
{% endif %}
power_now = power_values[0];
set_forcepower();
{% endif %}
{% if 'athlete' in metricsgroups %}
hroptions.max = {{ workout.user.max|round20 }}
hroptions.greenFrom = {{ workout.user.ut2 }}
hroptions.greenTo = {{ workout.user.at }}
hroptions.yellowFrom = {{ workout.user.at }}
hroptions.yellowTo = {{ workout.user.an }}
hroptions.redFrom = {{ workout.user.an }}
hroptions.redTo = {{ workout.user.max }}
hroptions.majorTicks = {{ workout.user.max|round20|hrmajorticks:workout.user.rest }}
hr_now = hr_values[0];
set_athlete();
{% endif %}
{% if 'stroke' in metricsgroups %}
{% if workout.workouttype == 'water' %}
anglesoptions.PieStartAngle = 90+catch_now;
set_stroke();
{% endif %}
{% endif %}
// cookie reader
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
// lock
var lock = document.getElementById("lock");
var output = document.getElementById("id_delay");
var cookie = readCookie("lock{{ workout.id }}");
var delay = output.value;
if (cookie=="true") {
lock.checked = true;
output.disabled = true;
}
// lock.onchange nog doen
{% if locked %}
lock.checked = true;
output.disabled = true;
{% endif %}
// slider
var slider = document.getElementById("myRange");
{% if user.is_authenticated and user == workout.user.user %}
document.getElementById("myRange").style.display = "block";
{% else %}
document.getElementById("myRange").style.display = "none";
{% endif %}
var output = document.getElementById("id_delay");
// Update the current slider value (each time you drag the slider handle)
slider.oninput = function() {
if (!lock.checked) {
try {
delay = Math.round(slider.value)-Math.round(player.getCurrentTime());
output.value = Math.round(slider.value)-Math.round(player.getCurrentTime()); // Display the default slider value
}
catch(err) {
output.value = Math.round(slider.value);
delay = Math.round(slider.value);
}
}
clearInterval(timeupdater);
var datatime = this.value
var videotime = Math.round(player.getCurrentTime());
if (lock.checked) {
if (this.value-output.value > 0) {
player.seekTo(this.value-output.value);
videotime = this.value-output.value;
} else {
if (playing && !dataplaying) {
player.seekTo(0);
player.playVideo();
}
else if (!playing && !dataplaying) {
player.seekTo(0);
player.pauseVideo();
playing = false;
}
}
} else {
// console.log('changing, not checked');
output.value = this.value-Math.round(player.getCurrentTime());
}
// Setting Data
// velo = boatspeed[Math.round(datatime)];
lat = latitude[Math.round(datatime)];
lon = longitude[Math.round(datatime)];
// strokerate = spm[Math.round(datatime)];
// catchangle = ctch[Math.round(datatime)];
{% for id, metric in metrics.items %}
{{ id }}_now = {{ id }}_values[Math.round(datatime)];
// console.log(datatime,{{ id }}_now, "{{ metric.name }}")
{% endfor %}
{% for group in metricsgroups %}
try {
set_{{ group }}();
} catch (e) {
}
{% endfor %}
try {
var newLatLng = new L.LatLng(lat, lon);
// console.log(newLatLng);
marker.setLatLng(newLatLng);
} catch (e) {
}
timeupdater = setInterval(updateTime, 1000);
}
output.oninput = function() {
slider.value = this.value+Math.round(player.getCurrentTime());
}
// Update the current slider value (each time the slider is changed)
slider.onchange = function() {
clearInterval(timeupdater)
if (lock.checked) {
if (this.value-output.value > 0) {
player.seekTo(this.value-output.value);
if (playing) {
player.playVideo();
} else {
player.pauseVideo();
}
} else {
if (playing) {
player.seekTo(0);
player.playVideo();
}
else {
player.seekTo(0);
player.pauseVideo();
playing = false;
}
}
} else {
output.value = this.value-Math.round(player.getCurrentTime());
}
var datatime = this.value
var videotime = Math.round(player.getCurrentTime());
//
// Setting Data
// velo = boatspeed[Math.round(datatime)];
lat = latitude[Math.round(datatime)];
lon = longitude[Math.round(datatime)];
// strokerate = spm[Math.round(datatime)];
// catchangle = ctch[Math.round(datatime)];
{% for id, metric in metrics.items %}
{{ id }}_now = {{ id }}_values[Math.round(datatime)];
// console.log(datatime,{{ id }}_now, "{{ metric.name }}")
{% endfor %}
{% for group in metricsgroups %}
try {
set_{{ group }}();
} catch (e) {
console.log(e);
}
{% endfor %}
try {
var newLatLng = new L.LatLng(lat, lon);
// console.log(newLatLng);
marker.setLatLng(newLatLng);
} catch (e) {
console.log('error')
}
console.log('changed all')
timeupdater = setInterval(updateTime, 1000);
}
output.oninput = function() {
slider.value = this.value+Math.round(player.getCurrentTime());
}
// lock delay form field if checkbox checked
lock.oninput = function() {
if (this.checked) {
output.disabled = true;
createCookie("lock{{ workout.id}}","true",0);
} else {
output.disabled = false;
createCookie("lock{{ workout.id }}","false",0);
}
}
// Slider start stop
// moet de buttons pas hieronder definieren en dan in de html
// pluggen
var timer;
function clock() {
timer = setInterval(myClock, 1000);
var c = parseInt(slider.value,10);
console.log('starting clock');
function myClock() {
c = c+1;
slider.value = c;
// update data fields
lat = latitude[Math.round(c)];
lon = longitude[Math.round(c)];
{% for id, metric in metrics.items %}
{{ id }}_now = {{ id }}_values[Math.round(c)];
// console.log(datatime,{{ id }}_now, "{{ metric.name }}")
{% endfor %}
{% for group in metricsgroups %}
try {
set_{{ group }}();
} catch (e) {}
{% endfor %}
try {
var newLatLng = new L.LatLng(lat, lon);
// console.log(newLatLng);
marker.setLatLng(newLatLng);
} catch (e) {
}
if (lock.checked) {
player.seekTo(c+parseInt(output.value));
} else {
delay = Math.round(slider.value)-Math.round(player.getCurrentTime());
output.value = Math.round(slider.value)-Math.round(player.getCurrentTime());
}
if (c == latitude.length) {
clearInterval(timer);
c = 0;
}
}
}
// onderstaande alleen als lock.checked
var dataplay = document.createElement("input");
dataplay.type = "button";
dataplay.value = String.fromCharCode(9658);
document.getElementById("dataplay").appendChild(dataplay);
// var datastop = document.createElement("input");
// datastop.type = "button";
// datastop.value = "Stop";
// document.getElementById("datastop").appendChild(datastop)
dataplay.onclick = function() {
if (lock.checked) {
dataplaying = false;
if (playing == false) {
player.playVideo();
dataplay.value = String.fromCharCode(10074,10074);
playing = true;
} else {
player.pauseVideo();
dataplay.value = String.fromCharCode(9658);
playing = false;
}
} else {
if (!dataplaying) {
clock();
dataplay.value = String.fromCharCode(10074,10074);
dataplaying = true;
if (lock.checked) {
playing = true;
}
} else {
clearInterval(timer);
dataplay.value = String.fromCharCode(9658);
dataplaying = false;
}
}
}
});
});
</script>
{% endlanguage %}
{% endblock %}
{% block sidebar %}
{% include 'menu_workout.html' %}
{% endblock %}
+16 -1
View File
@@ -287,10 +287,25 @@
<i class="fas fa-calculator-alt fa-fw"></i>&nbsp;OTW Power <i class="fas fa-calculator-alt fa-fw"></i>&nbsp;OTW Power
</a> </a>
</li> </li>
{% if 'speedcoach2' in workout.workoutsource %}
<li id="advanced-usegps">
<a href="/rowers/workout/{{ workout.id|encode }}/otwusegps/">
<i class="fas fa-satellite"></i>
{% if workout.impeller %}&nbsp;{% else %}&bull;&nbsp;{% endif %}Use GPS data
</a>
</li>
<li id="advanced-useimpeller">
<a href="/rowers/workout/{{ workout.id|encode }}/otwuseimpeller/">
<i class="fas fa-wind-turbine fa-rotate-180"></i>
{% if workout.impeller %}&bull;&nbsp;{% else %}&nbsp;{% endif %}Use Impeller data
</a>
</li>
{% endif %}
{% endif %} {% endif %}
<li id="advanced-instroke"> <li id="advanced-instroke">
<a href="/rowers/workout/{{ workout.id|encode }}/instroke/"> <a href="/rowers/workout/{{ workout.id|encode }}/instroke/">
<i class="fas fa-search-plus fa-fw"></i>&nbsp;In-Stroke Metrics <i class="fas fa-search-plus fa-fw"></i>
In-Stroke Metrics
</a> </a>
</li> </li>
<li id="advanced-recalcsummary"> <li id="advanced-recalcsummary">
+11 -1
View File
@@ -7,6 +7,17 @@
Thank you. We have received the payment of &euro; {{ amount }} for Rowsandall related services. Thank you. We have received the payment of &euro; {{ amount }} for Rowsandall related services.
</p> </p>
<p>
With your contribution, you are helping to keep this service to the rowing community
running. As the founder and developer of the Rowsandall.com site I am very interested
to know what you think of Rowsandall.com, as well as suggestions for improvements.
</p>
<p>
So don't hesitate to respond to this email and let me know. I will read and respond to each
email.
</p>
<p> <p>
Please contact our customer service by replying to this email if you have any further Please contact our customer service by replying to this email if you have any further
questions regarding the payment. questions regarding the payment.
@@ -16,4 +27,3 @@
Best Regards, the Rowsandall Team Best Regards, the Rowsandall Team
</p> </p>
{% endblock %} {% endblock %}
+31
View File
@@ -0,0 +1,31 @@
{% extends "emailbase.html" %}
{% block body %}
<p>Dear <strong>{{ first_name }}</strong>,</p>
<p>
Welcome on the trial for the Self-Coach plan.
</p>
<p>
As the developer of the Rowsandall.com site I am very interested to know what you think of Rowsandall.com. Especially, I'd like to understand how you started using the site, what you are looking for, and what you think could be improved.
</p>
<p>
The Self-Coach functionality allows you to create training plans and sessions for you and your training group. Feel free to contact me any time you need help.
</p>
<p>
I'd also love to hear a bit about your rowing background.
</p>
<p>
So don't hesitate to respond to this email and let me know. I will read and respond to each
email.
</p>
<p>
Thank you very much for your help and for supporting <a href="rowsandall.com">rowsandall.com</a>.
</p>
<p>
Best Regards, the Rowsandall Team
</p>
{% endblock %}
+33
View File
@@ -0,0 +1,33 @@
{% extends "emailbase.html" %}
{% block body %}
<p>Dear <strong>{{ first_name }}</strong>,</p>
<p>
Welcome on the trial for the Pro plan.
</p>
<p>
As the developer of the Rowsandall.com site I am very interested to know
what you think of Rowsandall.com.
Especially, I'd like to understand how you started using the site,
what you are looking for, and what you think could be improved.
</p>
<p>
I'd also love to hear a bit about your rowing background.
</p>
<p>
So don't hesitate to respond to this email and let me know. I will read and respond to each
email.
</p>
<p>
Thank you very much for your help and for supporting <a href="rowsandall.com">rowsandall.com</a>.
</p>
<p>
Best Regards, the Rowsandall Team
</p>
{% endblock %}
@@ -9,8 +9,20 @@
You are now on the Rowsandall paid plan "{{ planname }}". You are now on the Rowsandall paid plan "{{ planname }}".
</p> </p>
<p>
With your contribution, you are helping to keep this service to the rowing community
running. As the founder and developer of the Rowsandall.com site I am very interested
to know what you think of Rowsandall.com, as well as suggestions for improvements.
</p>
<p>
So don't hesitate to respond to this email and let me know. I will read and respond to each
email.
</p>
{% if recurring=='recurring' %} {% if recurring=='recurring' %}
<p> <p>
Some more information about the subscription.
The subscription cost is &euro;{{ price }} per year. The subscription cost is &euro;{{ price }} per year.
Your next charge is due on {{ end_of_billing_period }}. We will charge you automatically Your next charge is due on {{ end_of_billing_period }}. We will charge you automatically
on that date. on that date.
@@ -60,4 +72,3 @@
Best Regards, the Rowsandall Team Best Regards, the Rowsandall Team
</p> </p>
{% endblock %} {% endblock %}
+47
View File
@@ -0,0 +1,47 @@
{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}File loading{% endblock %}
{% block meta %}
<script type='text/javascript'
src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'>
</script>
<script type='text/javascript'
src='https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js'>
</script>
<script>
$(document).ready(function(){
var frm = $("#surveyform")
frm.submit(function(e) {
// e.preventDefault()
const formData = new FormData(e.target);
console.log(formData.get('surveydone'));
if (formData.get('surveydone')=='YES') {
var a = window.open('https://wp.me/P8g86e-Bs', "survey");
a.focus();
}
});
});
</script>
{% endblock %}
{% block main %}
<ul class="main-content">
<li class="grid_4">
<form enctype="multipart/form-data" method="post" id="surveyform">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" name="submit" value="SUBMIT">
</li>
</ul>
{% endblock %}
{% block sidebar %}
{% include 'menu_profile.html' %}
{% endblock %}
+48
View File
@@ -0,0 +1,48 @@
{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Rowsandall {% endblock %}
{% block meta %}
<script type='text/javascript'
src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'>
</script>
<script>
$(document).ready(function(){
var frm = $("#surveyform")
frm.submit(function(e) {
e.preventDefault()
const formData = new FormData(e.target);
console.log(formData);
});
});
</script>
{% endblock %}
{% block main %}
<ul class="main-content">
<li>
<form enctype="multipart/form-data" method="post" id="surveyform">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" name="submit" value="SUBMIT">
</li>
</ul>
{% endblock %}
{% block sidebar %}
{% include 'menu_profile.html' %}
{% endblock %}
+39 -3
View File
@@ -121,6 +121,45 @@ def is_coach(rower,rowers):
return True return True
@register.filter
def waterpower(x,rower):
if rower is not None:
return int(x*(100-rower.otwslack)/100.)
return int(x)
@register.filter
def round20(x):
try:
return int(20.*(1+int(int(x)/20)))
except ValueError:
return 20
@register.filter
def round100(x):
try:
return int(100.*(1+int(int(x)/100)))
except ValueError:
return 100
@register.filter
def majorticks(maxval):
ticks = range(1+int(maxval/100.))
newticks =[]
for t in ticks:
newticks.append(t*100)
return newticks
@register.filter
def hrmajorticks(maxval,minval):
ticks = range(int((maxval-minval)/20.)-1)
newticks =[]
for t in ticks:
newticks.append(100+t*20)
print(newticks)
return newticks
def strfdeltah(tdelta): def strfdeltah(tdelta):
hours, rest = divmod(tdelta.seconds,3600) hours, rest = divmod(tdelta.seconds,3600)
minutes,seconds = divmod(rest,60) minutes,seconds = divmod(rest,60)
@@ -762,6 +801,3 @@ def previousworkout(workout,user):
return encoder.encode_hex(ws[0].id) return encoder.encode_hex(ws[0].id)
else: else:
return 0 return 0
+4 -5
View File
@@ -20,7 +20,7 @@ class VirtualEventViewTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
self.c = Client() self.c = Client()
@@ -36,7 +36,7 @@ class VirtualEventViewTest(TestCase):
self.rpiet = Rower.objects.create(user=self.upiet, self.rpiet = Rower.objects.create(user=self.upiet,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
self.piet_workouts = WorkoutFactory.create_batch(5, user=self.rpiet) self.piet_workouts = WorkoutFactory.create_batch(5, user=self.rpiet)
@@ -49,7 +49,7 @@ class VirtualEventViewTest(TestCase):
self.rklaas = Rower.objects.create(user=self.uklaas, self.rklaas = Rower.objects.create(user=self.uklaas,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
self.klaas_workouts = WorkoutFactory.create_batch(5, user=self.rklaas) self.klaas_workouts = WorkoutFactory.create_batch(5, user=self.rklaas)
@@ -62,7 +62,7 @@ class VirtualEventViewTest(TestCase):
self.rhenk = Rower.objects.create(user=self.uhenk, self.rhenk = Rower.objects.create(user=self.uhenk,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
self.henk_workouts = WorkoutFactory.create_batch(5, user=self.rhenk) self.henk_workouts = WorkoutFactory.create_batch(5, user=self.rhenk)
@@ -851,4 +851,3 @@ class VirtualEventViewTest(TestCase):
# standalone # standalone
# calculate course adherence # calculate course adherence
# other background jobs # other background jobs
+14 -15
View File
@@ -17,7 +17,7 @@ class WorkoutCompareTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -81,7 +81,7 @@ class BoxPlotTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -179,7 +179,7 @@ class ListWorkoutTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -230,7 +230,7 @@ class PlannedSessionTests(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -281,7 +281,7 @@ class ForcecurveTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -317,7 +317,7 @@ class CumStatsTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -354,7 +354,7 @@ class CumFlexTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -459,7 +459,7 @@ class MultiFlexTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -561,7 +561,7 @@ class HistoTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -650,7 +650,7 @@ class WorkoutCompareTestNew(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -739,7 +739,7 @@ class WorkoutBoxPlotTestNew(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -827,7 +827,7 @@ class WorkoutHistoTestNew(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -915,7 +915,7 @@ class WorkoutFlexallTestNew(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -1003,7 +1003,7 @@ class WorkoutStatsTestNew(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -1134,4 +1134,3 @@ class WorkoutStatsTestNew(TestCase):
response = self.c.post('/rowers/user-analysis-select/',form_data) response = self.c.post('/rowers/user-analysis-select/',form_data)
self.assertEqual(response.status_code,200) self.assertEqual(response.status_code,200)
+1 -2
View File
@@ -36,7 +36,7 @@ class WorkoutViewTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -611,4 +611,3 @@ class WorkoutViewTest(TestCase):
self.assertRedirects(response, self.assertRedirects(response,
expected_url=expected_url, expected_url=expected_url,
status_code=302,target_status_code=200) status_code=302,target_status_code=200)
+1 -2
View File
@@ -18,7 +18,7 @@ class SimpleViewTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
@@ -59,4 +59,3 @@ class SimpleViewTest(TestCase):
self.assertRedirects(response, self.assertRedirects(response,
expected_url='/rowers/list-workouts/', expected_url='/rowers/list-workouts/',
status_code=302,target_status_code=200) status_code=302,target_status_code=200)
+1 -2
View File
@@ -11,7 +11,7 @@ class CoursesTest(TestCase):
self.u = User.objects.create_user('john', self.u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
) )
@@ -78,4 +78,3 @@ class CoursesTest(TestCase):
response.get('Content-Disposition'), response.get('Content-Disposition'),
'attachment; filename="course_1.kml"' 'attachment; filename="course_1.kml"'
) )
+2 -4
View File
@@ -21,7 +21,7 @@ class OTWCPChartTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,sex='male', gdproptin=True,surveydone=True,sex='male',
weightcategory='hwt', weightcategory='hwt',
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -113,7 +113,7 @@ class CPChartTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,sex='male', gdproptin=True,surveydone=True,sex='male',
weightcategory='hwt', weightcategory='hwt',
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -322,5 +322,3 @@ class CPChartTest(TestCase):
response = self.c.get(url) response = self.c.get(url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
+14 -15
View File
@@ -12,14 +12,14 @@ class EmailUpload(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.theadmin = UserFactory(is_staff=True) self.theadmin = UserFactory(is_staff=True)
self.rtheadmin = Rower.objects.create(user=self.theadmin, self.rtheadmin = Rower.objects.create(user=self.theadmin,
birthdate = faker.profile()['birthdate'], birthdate = faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -73,14 +73,14 @@ class ZipEmailUpload(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.theadmin = UserFactory(is_staff=True) self.theadmin = UserFactory(is_staff=True)
self.rtheadmin = Rower.objects.create(user=self.theadmin, self.rtheadmin = Rower.objects.create(user=self.theadmin,
birthdate = faker.profile()['birthdate'], birthdate = faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -135,14 +135,14 @@ class EmailUniCodeUpload(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.theadmin = UserFactory(is_staff=True) self.theadmin = UserFactory(is_staff=True)
self.rtheadmin = Rower.objects.create(user=self.theadmin, self.rtheadmin = Rower.objects.create(user=self.theadmin,
birthdate = faker.profile()['birthdate'], birthdate = faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -196,14 +196,14 @@ class EmailBikeErgUpload(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.theadmin = UserFactory(is_staff=True) self.theadmin = UserFactory(is_staff=True)
self.rtheadmin = Rower.objects.create(user=self.theadmin, self.rtheadmin = Rower.objects.create(user=self.theadmin,
birthdate = faker.profile()['birthdate'], birthdate = faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -257,14 +257,14 @@ class EmailBikeUpload(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.theadmin = UserFactory(is_staff=True) self.theadmin = UserFactory(is_staff=True)
self.rtheadmin = Rower.objects.create(user=self.theadmin, self.rtheadmin = Rower.objects.create(user=self.theadmin,
birthdate = faker.profile()['birthdate'], birthdate = faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -321,14 +321,14 @@ class EmailTests(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.theadmin = UserFactory(is_staff=True) self.theadmin = UserFactory(is_staff=True)
self.rtheadmin = Rower.objects.create(user=self.theadmin, self.rtheadmin = Rower.objects.create(user=self.theadmin,
birthdate = faker.profile()['birthdate'], birthdate = faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -404,7 +404,7 @@ class EmailAdminUpload(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
birthdate = faker.profile()['birthdate'] birthdate = faker.profile()['birthdate']
) )
@@ -412,7 +412,7 @@ class EmailAdminUpload(TestCase):
self.theadmin = UserFactory(is_staff=True) self.theadmin = UserFactory(is_staff=True)
self.rtheadmin = Rower.objects.create(user=self.theadmin, self.rtheadmin = Rower.objects.create(user=self.theadmin,
birthdate = faker.profile()['birthdate'], birthdate = faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -473,4 +473,3 @@ race 1
result = results[0] result = results[0]
self.assertTrue(result.coursecompleted) self.assertTrue(result.coursecompleted)
+1 -1
View File
@@ -14,7 +14,7 @@ class EmpowerTest(TestCase):
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot', 'koeinsloot',
) )
r = Rower.objects.create(user=u,rowerplan='coach',gdproptin=True, r = Rower.objects.create(user=u,rowerplan='coach',gdproptin=True,surveydone=True,
gdproptindate=timezone.now()) gdproptindate=timezone.now())
self.c = Client() self.c = Client()
+1 -1
View File
@@ -12,7 +12,7 @@ class WorkoutViewTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
showfavoritechartnotes=True) showfavoritechartnotes=True)
+8 -8
View File
@@ -22,7 +22,7 @@ class C2Objects(DjangoTestCase):
self.u.first_name = 'John' self.u.first_name = 'John'
self.u.last_name = 'Sander' self.u.last_name = 'Sander'
self.u.save() self.u.save()
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
@@ -157,7 +157,7 @@ class C2ObjectsTokenExpired(DjangoTestCase):
self.u.first_name = 'John' self.u.first_name = 'John'
self.u.last_name = 'Sander' self.u.last_name = 'Sander'
self.u.save() self.u.save()
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
@@ -236,7 +236,7 @@ class StravaObjects(DjangoTestCase):
self.u.first_name = 'John' self.u.first_name = 'John'
self.u.last_name = 'Sander' self.u.last_name = 'Sander'
self.u.save() self.u.save()
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
@@ -342,7 +342,7 @@ class STObjects(DjangoTestCase):
self.u.first_name = 'John' self.u.first_name = 'John'
self.u.last_name = 'Sander' self.u.last_name = 'Sander'
self.u.save() self.u.save()
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
@@ -490,7 +490,7 @@ class RunKeeperObjects(DjangoTestCase):
self.u.first_name = 'John' self.u.first_name = 'John'
self.u.last_name = 'Sander' self.u.last_name = 'Sander'
self.u.save() self.u.save()
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
@@ -583,7 +583,7 @@ class UAObjects(DjangoTestCase):
self.u.first_name = 'John' self.u.first_name = 'John'
self.u.last_name = 'Sander' self.u.last_name = 'Sander'
self.u.save() self.u.save()
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
@@ -686,7 +686,7 @@ class TPObjects(DjangoTestCase):
self.u.first_name = 'John' self.u.first_name = 'John'
self.u.last_name = 'Sander' self.u.last_name = 'Sander'
self.u.save() self.u.save()
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
@@ -769,7 +769,7 @@ class AutoExportTests(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
+1 -3
View File
@@ -14,7 +14,7 @@ class InteractiveChartTest(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.nu = datetime.datetime.now() self.nu = datetime.datetime.now()
@@ -137,5 +137,3 @@ class InteractiveChartTest(TestCase):
res = iplots.interactive_flex_chart2(self.wote.id,promember=1, res = iplots.interactive_flex_chart2(self.wote.id,promember=1,
xparam='distance', xparam='distance',
yparam1='pace',yparam2='spm') yparam1='pace',yparam2='spm')
+2 -5
View File
@@ -17,7 +17,7 @@ class WorkoutTests(TestCase):
self.u = User.objects.create_user('john', self.u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
nu = datetime.datetime.now() nu = datetime.datetime.now()
@@ -37,7 +37,7 @@ class C2Tests(TestCase):
self.u = User.objects.create_user('john', self.u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.nu = datetime.datetime.now() self.nu = datetime.datetime.now()
@@ -77,6 +77,3 @@ class subroutinetests(TestCase):
jsond = json.dumps(data) jsond = json.dumps(data)
data = c2stuff.createc2workoutdata_as_splits(w) data = c2stuff.createc2workoutdata_as_splits(w)
jsond = json.dumps(data) jsond = json.dumps(data)
-3
View File
@@ -84,6 +84,3 @@ class NewUserRegistrationTest(TestCase):
self.assertRedirects(response, self.assertRedirects(response,
expected_url='/login/', expected_url='/login/',
status_code=302,target_status_code=200) status_code=302,target_status_code=200)
+12 -13
View File
@@ -64,7 +64,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -122,7 +122,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -185,7 +185,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -251,7 +251,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -289,7 +289,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -329,7 +329,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -350,7 +350,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -396,7 +396,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -441,7 +441,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -486,7 +486,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -536,7 +536,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -581,7 +581,7 @@ class PaymentTest(TestCase):
u = UserFactory() u = UserFactory()
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
paymentprocessor='braintree', paymentprocessor='braintree',
@@ -620,4 +620,3 @@ class PaymentTest(TestCase):
self.assertRedirects(response, self.assertRedirects(response,
expected_url = '/rowers/downgradecompleted/', expected_url = '/rowers/downgradecompleted/',
status_code=302,target_status_code=200) status_code=302,target_status_code=200)
+24 -24
View File
@@ -23,7 +23,7 @@ class PermissionsFreeCoach(TestCase):
self.ufreecoach = UserFactory(username='coachuser') self.ufreecoach = UserFactory(username='coachuser')
self.rfreecoach = Rower.objects.create(user=self.ufreecoach, self.rfreecoach = Rower.objects.create(user=self.ufreecoach,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='freecoach',clubsize=100) rowerplan='freecoach',clubsize=100)
self.coachinggroup = CoachingGroup.objects.create() self.coachinggroup = CoachingGroup.objects.create()
@@ -37,7 +37,7 @@ class PermissionsFreeCoach(TestCase):
self.uplan = UserFactory(username='planuser') self.uplan = UserFactory(username='planuser')
self.rplan = Rower.objects.create(user=self.uplan, self.rplan = Rower.objects.create(user=self.uplan,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='plan') rowerplan='plan')
self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan) self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan)
@@ -49,7 +49,7 @@ class PermissionsFreeCoach(TestCase):
self.upro = UserFactory(username='prouser') self.upro = UserFactory(username='prouser')
self.rpro = Rower.objects.create(user=self.upro, self.rpro = Rower.objects.create(user=self.upro,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='pro') rowerplan='pro')
self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro) self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro)
@@ -61,7 +61,7 @@ class PermissionsFreeCoach(TestCase):
self.uplan2 = UserFactory(username='planuser2') self.uplan2 = UserFactory(username='planuser2')
self.rplan2 = Rower.objects.create(user=self.uplan2, self.rplan2 = Rower.objects.create(user=self.uplan2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='plan') rowerplan='plan')
self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2) self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2)
@@ -73,7 +73,7 @@ class PermissionsFreeCoach(TestCase):
self.upro2 = UserFactory(username='prouser2') self.upro2 = UserFactory(username='prouser2')
self.rpro2 = Rower.objects.create(user=self.upro2, self.rpro2 = Rower.objects.create(user=self.upro2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='pro') rowerplan='pro')
self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2) self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2)
@@ -85,7 +85,7 @@ class PermissionsFreeCoach(TestCase):
self.ubasic = UserFactory(username='basicuser') self.ubasic = UserFactory(username='basicuser')
self.rbasic = Rower.objects.create(user=self.ubasic, self.rbasic = Rower.objects.create(user=self.ubasic,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic) self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic)
@@ -201,7 +201,7 @@ class PermissionsBasicsTests(TestCase):
self.ucoach = UserFactory(username='coachuser') self.ucoach = UserFactory(username='coachuser')
self.rcoach = Rower.objects.create(user=self.ucoach, self.rcoach = Rower.objects.create(user=self.ucoach,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='coach',clubsize=10) rowerplan='coach',clubsize=10)
self.ucoach_workouts = WorkoutFactory.create_batch(5, user=self.rcoach) self.ucoach_workouts = WorkoutFactory.create_batch(5, user=self.rcoach)
@@ -216,7 +216,7 @@ class PermissionsBasicsTests(TestCase):
self.uplan = UserFactory(username='planuser') self.uplan = UserFactory(username='planuser')
self.rplan = Rower.objects.create(user=self.uplan, self.rplan = Rower.objects.create(user=self.uplan,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='plan') rowerplan='plan')
self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan) self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan)
@@ -228,7 +228,7 @@ class PermissionsBasicsTests(TestCase):
self.upro = UserFactory(username='prouser') self.upro = UserFactory(username='prouser')
self.rpro = Rower.objects.create(user=self.upro, self.rpro = Rower.objects.create(user=self.upro,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='pro') rowerplan='pro')
self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro) self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro)
@@ -240,7 +240,7 @@ class PermissionsBasicsTests(TestCase):
self.uplan2 = UserFactory(username='planuser2') self.uplan2 = UserFactory(username='planuser2')
self.rplan2 = Rower.objects.create(user=self.uplan2, self.rplan2 = Rower.objects.create(user=self.uplan2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='plan') rowerplan='plan')
self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2) self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2)
@@ -252,7 +252,7 @@ class PermissionsBasicsTests(TestCase):
self.upro2 = UserFactory(username='prouser2') self.upro2 = UserFactory(username='prouser2')
self.rpro2 = Rower.objects.create(user=self.upro2, self.rpro2 = Rower.objects.create(user=self.upro2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='pro') rowerplan='pro')
self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2) self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2)
@@ -264,7 +264,7 @@ class PermissionsBasicsTests(TestCase):
self.ubasic = UserFactory(username='basicuser') self.ubasic = UserFactory(username='basicuser')
self.rbasic = Rower.objects.create(user=self.ubasic, self.rbasic = Rower.objects.create(user=self.ubasic,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic) self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic)
@@ -461,7 +461,7 @@ class PermissionsViewTests(TestCase):
self.ucoach = UserFactory(username='coachuser') self.ucoach = UserFactory(username='coachuser')
self.rcoach = Rower.objects.create(user=self.ucoach, self.rcoach = Rower.objects.create(user=self.ucoach,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='coach',clubsize=10) rowerplan='coach',clubsize=10)
self.ucoach_workouts = WorkoutFactory.create_batch(5, user=self.rcoach) self.ucoach_workouts = WorkoutFactory.create_batch(5, user=self.rcoach)
@@ -476,7 +476,7 @@ class PermissionsViewTests(TestCase):
self.uplan = UserFactory(username='planuser') self.uplan = UserFactory(username='planuser')
self.rplan = Rower.objects.create(user=self.uplan, self.rplan = Rower.objects.create(user=self.uplan,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='plan') rowerplan='plan')
self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan) self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan)
@@ -488,7 +488,7 @@ class PermissionsViewTests(TestCase):
self.upro = UserFactory(username='prouser') self.upro = UserFactory(username='prouser')
self.rpro = Rower.objects.create(user=self.upro, self.rpro = Rower.objects.create(user=self.upro,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='pro') rowerplan='pro')
self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro) self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro)
@@ -500,7 +500,7 @@ class PermissionsViewTests(TestCase):
self.uplan2 = UserFactory(username='planuser2') self.uplan2 = UserFactory(username='planuser2')
self.rplan2 = Rower.objects.create(user=self.uplan2, self.rplan2 = Rower.objects.create(user=self.uplan2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='plan') rowerplan='plan')
self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2) self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2)
@@ -512,7 +512,7 @@ class PermissionsViewTests(TestCase):
self.upro2 = UserFactory(username='prouser2') self.upro2 = UserFactory(username='prouser2')
self.rpro2 = Rower.objects.create(user=self.upro2, self.rpro2 = Rower.objects.create(user=self.upro2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='pro') rowerplan='pro')
self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2) self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2)
@@ -524,7 +524,7 @@ class PermissionsViewTests(TestCase):
self.ubasic = UserFactory(username='basicuser') self.ubasic = UserFactory(username='basicuser')
self.rbasic = Rower.objects.create(user=self.ubasic, self.rbasic = Rower.objects.create(user=self.ubasic,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic) self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic)
@@ -1215,7 +1215,7 @@ class PermissionsCoachingTests(TestCase):
self.ucoach = UserFactory(username='coachuser') self.ucoach = UserFactory(username='coachuser')
self.rcoach = Rower.objects.create(user=self.ucoach, self.rcoach = Rower.objects.create(user=self.ucoach,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='coach',clubsize=10) rowerplan='coach',clubsize=10)
self.ucoach_workouts = WorkoutFactory.create_batch(5, user=self.rcoach) self.ucoach_workouts = WorkoutFactory.create_batch(5, user=self.rcoach)
@@ -1230,7 +1230,7 @@ class PermissionsCoachingTests(TestCase):
self.uplan = UserFactory(username='planuser') self.uplan = UserFactory(username='planuser')
self.rplan = Rower.objects.create(user=self.uplan, self.rplan = Rower.objects.create(user=self.uplan,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='plan') rowerplan='plan')
self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan) self.uplan_workouts = WorkoutFactory.create_batch(5, user=self.rplan)
@@ -1242,7 +1242,7 @@ class PermissionsCoachingTests(TestCase):
self.upro = UserFactory(username='prouser') self.upro = UserFactory(username='prouser')
self.rpro = Rower.objects.create(user=self.upro, self.rpro = Rower.objects.create(user=self.upro,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='pro') rowerplan='pro')
self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro) self.upro_workouts = WorkoutFactory.create_batch(5, user=self.rpro)
@@ -1254,7 +1254,7 @@ class PermissionsCoachingTests(TestCase):
self.uplan2 = UserFactory(username='planuser2') self.uplan2 = UserFactory(username='planuser2')
self.rplan2 = Rower.objects.create(user=self.uplan2, self.rplan2 = Rower.objects.create(user=self.uplan2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='plan') rowerplan='plan')
self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2) self.uplan2_workouts = WorkoutFactory.create_batch(5, user=self.rplan2)
@@ -1266,7 +1266,7 @@ class PermissionsCoachingTests(TestCase):
self.upro2 = UserFactory(username='prouser2') self.upro2 = UserFactory(username='prouser2')
self.rpro2 = Rower.objects.create(user=self.upro2, self.rpro2 = Rower.objects.create(user=self.upro2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='pro') rowerplan='pro')
self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2) self.upro2_workouts = WorkoutFactory.create_batch(5, user=self.rpro2)
@@ -1278,7 +1278,7 @@ class PermissionsCoachingTests(TestCase):
self.ubasic = UserFactory(username='basicuser') self.ubasic = UserFactory(username='basicuser')
self.rbasic = Rower.objects.create(user=self.ubasic, self.rbasic = Rower.objects.create(user=self.ubasic,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True,gdproptindate=timezone.now(), gdproptin=True,surveydone=True,gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic) self.ubasic_workouts = WorkoutFactory.create_batch(5, user=self.rbasic)
+7 -7
View File
@@ -17,7 +17,7 @@ class TrainingPlanTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -175,7 +175,7 @@ class SessionLinkTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -348,7 +348,7 @@ class SessionCompleteTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -603,7 +603,7 @@ class ChallengeCompleteTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -827,7 +827,7 @@ class MandatoryTestCompleteTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -1040,7 +1040,7 @@ class PlannedSessionsView(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
self.r.save() self.r.save()
@@ -1049,7 +1049,7 @@ class PlannedSessionsView(TestCase):
self.u2 = UserFactory(username='testbasicuser') self.u2 = UserFactory(username='testbasicuser')
self.r2 = Rower.objects.create(user=self.u2, self.r2 = Rower.objects.create(user=self.u2,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
+1 -4
View File
@@ -14,7 +14,7 @@ class TrialsTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
@@ -64,6 +64,3 @@ class TrialsTest(TestCase):
self.assertEqual(hasplannedsessions(self.u),True) self.assertEqual(hasplannedsessions(self.u),True)
self.assertEqual(iscoachmember(self.u),False) self.assertEqual(iscoachmember(self.u),False)
self.assertEqual(ispromember(self.u),True) self.assertEqual(ispromember(self.u),True)
+1 -1
View File
@@ -14,7 +14,7 @@ class DataTest(TestCase):
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u,gdproptin=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now()
) )
self.nu = datetime.datetime.now() self.nu = datetime.datetime.now()
+19 -5
View File
@@ -11,6 +11,24 @@ from django.http import Http404
from rowers.views import get_workout from rowers.views import get_workout
class TestDateTime(TestCase):
def setUp(self):
self.factory = RequestFactory()
def tearDown(self):
pass
def test_get_dates(self):
request = self.factory.get('/rowers/sessions/create/user/230/?startdate=13.01.2020&enddate=19.01.2020')
startdate,enddate = get_dates_timeperiod(request)
teststart = datetime.date(2020,1,1)
self.assertTrue(teststart<startdate)
testend = datetime.date(2020,12,12)
self.assertTrue(testend>enddate)
# tests simple functions from views.py # tests simple functions from views.py
class SimpleViewTest(TestCase): class SimpleViewTest(TestCase):
def setUp(self): def setUp(self):
@@ -18,7 +36,7 @@ class SimpleViewTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -108,7 +126,3 @@ class SimpleViewTest(TestCase):
login = self.c.login(username=self.u.username, password=self.password) login = self.c.login(username=self.u.username, password=self.password)
self.assertEqual(login,False) self.assertEqual(login,False)
+1 -1
View File
@@ -18,7 +18,7 @@ class PlotTests(TestCase):
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
r = Rower.objects.create(user=u, r = Rower.objects.create(user=u,
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='basic') rowerplan='basic')
self.nu = datetime.datetime.now() self.nu = datetime.datetime.now()
+2 -4
View File
@@ -41,7 +41,7 @@ class TeamTest(TestCase):
r = Rower.objects.create( r = Rower.objects.create(
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
user=u, user=u,
@@ -264,7 +264,7 @@ class TeamTestLowLevel(TestCase):
r = Rower.objects.create( r = Rower.objects.create(
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
user=u, user=u,
@@ -353,5 +353,3 @@ class TeamTestLowLevel(TestCase):
# cannot create invite for team you don't manage # cannot create invite for team you don't manage
id, comment = create_invite(self.t, self.users[3],self.users[4]) id, comment = create_invite(self.t, self.users[3],self.users[4])
self.assertEqual(id,0) self.assertEqual(id,0)
+2 -2
View File
@@ -26,7 +26,7 @@ class ForceUnits(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -164,7 +164,7 @@ class TestForceUnit(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
+1 -2
View File
@@ -18,7 +18,7 @@ class ViewTest(TestCase):
self.u = User.objects.create_user('john', self.u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot')
self.r = Rower.objects.create(user=self.u,gdproptin=True, self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach', rowerplan='coach',
) )
@@ -783,4 +783,3 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted+'.gz') os.remove(f_to_be_deleted+'.gz')
except (FileNotFoundError,OSError): except (FileNotFoundError,OSError):
pass pass
+1 -3
View File
@@ -80,7 +80,7 @@ class UserPreferencesTest(TestCase):
self.r = Rower.objects.create(user=self.u, self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'], birthdate=faker.profile()['birthdate'],
gdproptin=True, gdproptin=True,surveydone=True,
gdproptindate=timezone.now(), gdproptindate=timezone.now(),
rowerplan='coach') rowerplan='coach')
@@ -245,5 +245,3 @@ class UserPreferencesTest(TestCase):
response = self.c.post(url,form_data) response = self.c.post(url,form_data)
self.assertEqual(response.status_code,200) self.assertEqual(response.status_code,200)
+57
View File
@@ -0,0 +1,57 @@
<?xml version="1.0" ?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.google.com/kml/ext/2.2">
<Document>
<name>Courses.kml</name>
<Folder>
<name>Courses</name>
<Folder>
<name>CrewNerd Examples - Uherské Hradiště</name>
<open>1</open>
<Placemark>
<name>Start</name>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>17.4893745389,49.109471228,0 17.4911067423,49.1094811918,0 17.4909527884,49.1103411557,0 17.4888918133,49.1102899098,0 17.4893745389,49.109471228,0 17.4893745389,49.109471228,0</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
<Placemark>
<name>Turn</name>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>17.4836181002,49.0979347215,0 17.489332427,49.0981702202,0 17.4888058511,49.1024117428,0 17.4836162032,49.1030885423,0 17.4836181002,49.0979347215,0 17.4836181002,49.0979347215,0</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
<Placemark>
<name>Turn</name>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>17.4928830266,49.0866607478,0 17.4973472737,49.0861776065,0 17.4994059869,49.0903340046,0 17.4942740099,49.0899098202,0 17.4928830266,49.0866607478,0 17.4928830266,49.0866607478,0</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
<Placemark>
<name>Finish</name>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>17.4627698339,49.0723911762,0 17.4630054316,49.071305244,0 17.4643666779,49.0712945663,0 17.4641649495,49.0724875988,0 17.4627698339,49.0723911762,0 17.4627698339,49.0723911762,0</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Folder>
</Folder>
</Document>
</kml>
+7
View File
@@ -283,6 +283,10 @@ urlpatterns = [
re_path(r'^graph/(?P<pk>\d+)/delete/$',views.GraphDelete.as_view(),name='graph_delete'), re_path(r'^graph/(?P<pk>\d+)/delete/$',views.GraphDelete.as_view(),name='graph_delete'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-thumbnails/$',views.get_thumbnails, re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-thumbnails/$',views.get_thumbnails,
name='get_thumbnails'), name='get_thumbnails'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/otwuseimpeller/$',views.otw_use_impeller,
name='otw_use_impeller'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/otwusegps/$',views.otw_use_gps,
name='otw_use_gps'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/toggle-ranking/$',views.workout_toggle_ranking, re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/toggle-ranking/$',views.workout_toggle_ranking,
name='workout_toggle_ranking'), name='workout_toggle_ranking'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-testscript/$',views.get_testscript, re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-testscript/$',views.get_testscript,
@@ -346,6 +350,8 @@ urlpatterns = [
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/video/$',views.workout_video_create_view, re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/video/$',views.workout_video_create_view,
name='workout_video_create_view'), name='workout_video_create_view'),
re_path(r'^video/(?P<pk>\d+)/delete/$',views.VideoDelete.as_view(),name='video_delete'), re_path(r'^video/(?P<pk>\d+)/delete/$',views.VideoDelete.as_view(),name='video_delete'),
re_path(r'^video/(?P<id>\w.+)/m/$',views.workout_video_view_mini,
name='workout_video_view_mini'),
re_path(r'^video/(?P<id>\w.+)/$',views.workout_video_view, re_path(r'^video/(?P<id>\w.+)/$',views.workout_video_view,
name='workout_video_view'), name='workout_video_view'),
re_path(r'^videos/',views.list_videos,name='list_videos'), re_path(r'^videos/',views.list_videos,name='list_videos'),
@@ -443,6 +449,7 @@ urlpatterns = [
re_path(r'^user-multiflex-data/$',views.multiflex_data,name='multiflex_data'), re_path(r'^user-multiflex-data/$',views.multiflex_data,name='multiflex_data'),
re_path(r'^me/deactivate/$',views.deactivate_user,name='deactivate_user'), re_path(r'^me/deactivate/$',views.deactivate_user,name='deactivate_user'),
re_path(r'^me/delete/$',views.remove_user,name='remove_user'), re_path(r'^me/delete/$',views.remove_user,name='remove_user'),
re_path(r'^survey/$',views.survey,name='survey'),
re_path(r'^me/gdpr-optin-confirm/?/$',views.user_gdpr_confirm,name='user_gdpr_confirm'), re_path(r'^me/gdpr-optin-confirm/?/$',views.user_gdpr_confirm,name='user_gdpr_confirm'),
re_path(r'^me/gdpr-optin-confirm/$',views.user_gdpr_confirm,name='user_gdpr_confirm'), re_path(r'^me/gdpr-optin-confirm/$',views.user_gdpr_confirm,name='user_gdpr_confirm'),
re_path(r'^me/gdpr-optin/?/$',views.user_gdpr_optin,name='user_gdpr_optin'), re_path(r'^me/gdpr-optin/?/$',views.user_gdpr_optin,name='user_gdpr_optin'),
+11 -8
View File
@@ -4322,9 +4322,10 @@ def agegrouprecordview(request,sex='male',weightcategory='hwt',
}) })
# alert overview view # alert overview view
@user_passes_test(ispromember, login_url="/rowers/paidplans", #@user_passes_test(ispromember, login_url="/rowers/paidplans",
message="This functionality requires a Pro plan or higher. If you are already a Pro user, please log in to access this functionality", # message="This functionality requires a Pro plan or higher. If you are already a Pro user, please log in to access this functionality",
redirect_field_name=None) # redirect_field_name=None)
@login_required
def alerts_view(request,userid=0): def alerts_view(request,userid=0):
r = getrequestrower(request,userid=userid) r = getrequestrower(request,userid=userid)
@@ -4436,9 +4437,7 @@ def alert_create_view(request,userid=0):
}) })
# alert report view # alert report view
@user_passes_test(ispromember, login_url="/rowers/paidplans", @login_required()
message="This functionality requires a Pro plan or higher. If you are already a Pro user, please log in to access this functionality",
redirect_field_name=None)
def alert_report_view(request,id=0,userid=0,nperiod=0): def alert_report_view(request,id=0,userid=0,nperiod=0):
r = getrequestrower(request,userid=userid) r = getrequestrower(request,userid=userid)
if userid == 0: if userid == 0:
@@ -4453,7 +4452,7 @@ def alert_report_view(request,id=0,userid=0,nperiod=0):
raise Http404("This alert doesn't exist") raise Http404("This alert doesn't exist")
if alert.manager != request.user: if not checkalertowner(alert,request.user):
raise PermissionDenied('You are not allowed to edit this Alert') raise PermissionDenied('You are not allowed to edit this Alert')
stats = alert_get_stats(alert,nperiod=nperiod) stats = alert_get_stats(alert,nperiod=nperiod)
@@ -4505,7 +4504,7 @@ def alert_edit_view(request,id=0,userid=0):
raise Http404("This alert doesn't exist") raise Http404("This alert doesn't exist")
if alert.manager != request.user: if not alert.manager != request.user:
raise PermissionDenied('You are not allowed to edit this Alert') raise PermissionDenied('You are not allowed to edit this Alert')
FilterFormSet = formset_factory(ConditionEditForm, formset=BaseConditionFormSet,extra=0) FilterFormSet = formset_factory(ConditionEditForm, formset=BaseConditionFormSet,extra=0)
@@ -4603,6 +4602,7 @@ def alert_edit_view(request,id=0,userid=0):
}) })
# alert delete view # alert delete view
class AlertDelete(DeleteView): class AlertDelete(DeleteView):
login_requird = True login_requird = True
model = Alert model = Alert
@@ -4650,6 +4650,9 @@ class AlertDelete(DeleteView):
def get_object(self, *args, **kwargs): def get_object(self, *args, **kwargs):
obj = super(AlertDelete, self).get_object(*args, **kwargs) obj = super(AlertDelete, self).get_object(*args, **kwargs)
if obj.manager != self.request.user:
raise PermissionDenied("You are not allowed to delete this Alert")
# some checks # some checks
return obj return obj
+7 -6
View File
@@ -445,8 +445,9 @@ def plannedsession_create_view(request,
sps = get_sessions(r,startdate=startdate,enddate=enddate).exclude( sps = get_sessions(r,startdate=startdate,enddate=enddate).exclude(
sessiontype='race') sessiontype='race')
sessiontemplates = PlannedSession.objects.filter(
sessiontemplates = PlannedSession.objects.filter(manager=request.user,is_template=True) manager=request.user,
is_template=True).order_by("name")
try: try:
trainingplan = TrainingPlan.objects.filter( trainingplan = TrainingPlan.objects.filter(
@@ -1511,11 +1512,11 @@ def plannedsession_teamclone_view(request,id=0):
ps.name += ' (copy)' ps.name += ' (copy)'
ps.is_template = False ps.is_template = False
deltadays = ps.enddate-ps.startdate deltadays = ps.preferreddate-ps.startdate
ps.startdate = timezone.now().date() ps.startdate = startdate
ps.enddate = (timezone.now()+deltadays).date() ps.enddate = enddate
ps.preferreddate = ps.preferreddate+deltadays ps.preferreddate = startdate+deltadays
ps.save() ps.save()
+23 -11
View File
@@ -60,7 +60,7 @@ from rowers.forms import (
MetricsForm,DisqualificationForm,disqualificationreasons, MetricsForm,DisqualificationForm,disqualificationreasons,
disqualifiers,SearchForm,BillingForm,PlanSelectForm, disqualifiers,SearchForm,BillingForm,PlanSelectForm,
VideoAnalysisCreateForm,WorkoutSingleSelectForm, VideoAnalysisCreateForm,WorkoutSingleSelectForm,
VideoAnalysisMetricsForm, VideoAnalysisMetricsForm,SurveyForm,
) )
from django.urls import reverse, reverse_lazy from django.urls import reverse, reverse_lazy
@@ -158,7 +158,8 @@ from rowsandall_app.settings import (
RUNKEEPER_CLIENT_ID,RUNKEEPER_REDIRECT_URI,RUNKEEPER_CLIENT_SECRET, RUNKEEPER_CLIENT_ID,RUNKEEPER_REDIRECT_URI,RUNKEEPER_CLIENT_SECRET,
TP_CLIENT_ID,TP_REDIRECT_URI,TP_CLIENT_KEY,TP_CLIENT_SECRET, TP_CLIENT_ID,TP_REDIRECT_URI,TP_CLIENT_KEY,TP_CLIENT_SECRET,
BRAINTREE_MERCHANT_ID,BRAINTREE_PUBLIC_KEY,BRAINTREE_PRIVATE_KEY, BRAINTREE_MERCHANT_ID,BRAINTREE_PUBLIC_KEY,BRAINTREE_PRIVATE_KEY,
PAYMENT_PROCESSING_ON PAYMENT_PROCESSING_ON,
RECAPTCHA_SITE_KEY, RECAPTCHA_SITE_SECRET
) )
#from rowers.tasks_standalone import addcomment2 #from rowers.tasks_standalone import addcomment2
@@ -1073,28 +1074,39 @@ def add_defaultfavorites(r):
f.save() f.save()
return 1 return 1
# Shows email form and sends it if submitted # Shows email form and sends it if submitted
def sendmail(request): def sendmail(request):
if request.method == 'POST': if request.method == 'POST':
# test recaptcha
response_string = request.POST.get('g-recaptcha-response')
# replace below with settings
recaptcha_secret = RECAPTCHA_SITE_SECRET
url = 'https://www.google.com/recaptcha/api/siteverify'
data = {
'secret':recaptcha_secret,
'response': response_string,
}
response = requests.post(url,data=data,verify=True)
success = False
if response.status_code == 200:
success = response.json().get('success')
form = EmailForm(request.POST) form = EmailForm(request.POST)
if form.is_valid(): if form.is_valid() and success:
firstname = form.cleaned_data['firstname'] firstname = form.cleaned_data['firstname']
lastname = form.cleaned_data['lastname'] lastname = form.cleaned_data['lastname']
email = form.cleaned_data['email'] email = form.cleaned_data['email']
subject = form.cleaned_data['subject'] subject = 'Rowsandall Contact Form:'+form.cleaned_data['subject']
botcheck = form.cleaned_data['botcheck'].lower()
message = form.cleaned_data['message'] message = form.cleaned_data['message']
if botcheck == 'yes':
try:
fullemail = firstname + " " + lastname + " " + "<" + email + ">" fullemail = firstname + " " + lastname + " " + "<" + email + ">"
send_mail(subject, message, fullemail, ['info@rowsandall.com']) send_mail(subject, message, fullemail, ['info@rowsandall.com'])
return HttpResponseRedirect('/rowers/email/thankyou/') return HttpResponseRedirect('/rowers/email/thankyou/')
except:
return HttpResponseRedirect('/rowers/email/')
else: else:
messages.error(request,'You have to answer YES to the question') if not success:
return HttpResponseRedirect('/rowers/email/') messages.error(request,'Bots are not welcome')
else: else:
messages.error(request,'Something went wrong. Please try again')
return HttpResponseRedirect('/rowers/email/') return HttpResponseRedirect('/rowers/email/')
else: else:
return HttpResponseRedirect('/rowers/email/') return HttpResponseRedirect('/rowers/email/')
+39 -2
View File
@@ -5,6 +5,31 @@ from __future__ import unicode_literals
from rowers.views.statements import * from rowers.views.statements import *
@login_required()
def survey(request):
r = getrower(request.user)
surveyform = SurveyForm()
if request.method == 'POST':
form = SurveyForm(request.POST)
r.surveydone = True
r.surveydonedate = timezone.now()
r.save()
nexturl = request.GET.get('next')
return HttpResponseRedirect(nexturl)
context = {
'teams':get_my_teams(request.user),
'rower':r,
'form':surveyform,
}
return render(request,'survey.html',context)
@login_required() @login_required()
def start_trial_view(request): def start_trial_view(request):
r = getrower(request.user) r = getrower(request.user)
@@ -30,6 +55,13 @@ def start_trial_view(request):
'Rowsandall Server <info@rowsandall.com>', 'Rowsandall Server <info@rowsandall.com>',
['roosendaalsander@gmail.com']) ['roosendaalsander@gmail.com'])
send_template_email('Rowsandall <info@rowsandall.com>',
[r.user.email],
'Welcome to the Rowsandall Pro Trial',
'protrialewelcome.html',
{'first_name':r.user.first_name,
'last_name':r.user.last_name})
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
@login_required() @login_required()
@@ -58,6 +90,13 @@ def start_plantrial_view(request):
'Rowsandall Server <info@rowsandall.com>', 'Rowsandall Server <info@rowsandall.com>',
['roosendaalsander@gmail.com']) ['roosendaalsander@gmail.com'])
send_template_email('Rowsandall <info@rowsandall.com>',
[r.user.email],
'Welcome to the Rowsandall Self-Coach Trial',
'plantrialwelcome.html',
{'first_name':r.user.first_name,
'last_name':r.user.last_name})
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
# Page where user can manage his favorite charts # Page where user can manage his favorite charts
@@ -491,5 +530,3 @@ def rower_update_empower_view(
'form':form, 'form':form,
'rower':r 'rower':r
}) })
+162 -16
View File
@@ -48,6 +48,116 @@ def get_video_id(url):
else: else:
raise ValueError raise ValueError
# Show a video compared with data
def workout_video_view_mini(request,id=''):
try:
id = encoder.decode_hex(id)
analysis = VideoAnalysis.objects.get(id=id)
except VideoAnalysis.DoesNotExist:
raise Http404("Video Analysis does not exist")
w = analysis.workout
delay = analysis.delay
if w.workouttype in mytypes.otwtypes:
mode = 'water'
else:
mode = 'erg'
if request.user.is_authenticated:
mayedit = checkworkoutuser(request.user,w) and isprorower(request.user.rower)
rower = request.user.rower
else:
mayedit = False
rower = None
# get video ID and offset
if mayedit and request.method == 'POST':
form = VideoAnalysisCreateForm(request.POST)
metricsform = VideoAnalysisMetricsForm(request.POST,mode=mode)
if form.is_valid() and metricsform.is_valid():
video_id = form.cleaned_data['url']
try:
video_id = get_video_id(form.cleaned_data['url'])
except (TypeError,ValueError):
pass
delay = form.cleaned_data['delay']
metricsgroups = metricsform.cleaned_data['groups']
if 'save_button' in request.POST:
analysis.name = form.cleaned_data['name']
analysis.video_id = video_id
analysis.delay = delay
analysis.metricsgroups = metricsgroups
analysis.save()
else:
video_id = id
delay = 0
elif mayedit:
form = VideoAnalysisCreateForm(
initial = {
'name':analysis.name,
'delay': analysis.delay,
'url': analysis.video_id,
}
)
metricsform = VideoAnalysisMetricsForm(initial={'groups':analysis.metricsgroups},
mode=mode)
metricsgroups = analysis.metricsgroups
video_id = analysis.video_id
else:
form = None
metricsform = None
metricsgroups = analysis.metricsgroups
data, metrics, maxtime = dataprep.get_video_data(w,groups=metricsgroups,mode=mode)
hascoordinates = pd.Series(data['latitude']).std() > 0
# create map
if hascoordinates:
mapscript, mapdiv = leaflet_chart_video(data['latitude'],data['longitude'],
w.name)
else:
mapscript, mapdiv = interactive_chart_video(data)
data['longitude'] = data['spm']
data['latitude'] = list(range(len(data['spm'])))
breadcrumbs = [
{
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
'url':get_workout_default_page(request,encoder.encode_hex(w.id)),
'name': w.name
},
{
'url':reverse('workout_video_view_mini',kwargs={'id':encoder.encode_hex(analysis.id)}),
'name': 'Video Analysis'
}
]
return render(request,
'embedded_video_mini.html',
{
'workout':w,
'rower':rower,
'data': json.dumps(data,default=default),
'mapscript': mapscript,
'mapdiv': mapdiv,
'video_id': analysis.video_id,
'form':form,
'breadcrumbs':breadcrumbs,
'analysis':analysis,
'maxtime':maxtime,
'metrics':metrics,
'locked': True,
'metricsform':metricsform,
'metricsgroups': metricsgroups,
'siteurl': settings.SITE_URL,
})
# Show a video compared with data # Show a video compared with data
def workout_video_view(request,id=''): def workout_video_view(request,id=''):
@@ -346,18 +456,54 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False):
'teams':get_my_teams(request.user), 'teams':get_my_teams(request.user),
}) })
# Test asynchronous tasking and messaging # Switch from GPS to Impeller (only for SpeedCoach 2, if impeller data)
#@login_required() @login_required
#def workout_test_task_view(request,id=0): def otw_use_impeller(request,id=0):
# row = Workout.objects.get(id=id) w = get_workout(id)
# res = myqueue(queuehigh,addcomment2,request.user.id,row.id)#
# if (checkworkoutuser(request.user,w)==False):
# raise PermissionDenied("Access denied")
# url = reverse('workout_edit_view',
# kwargs = { row = rdata(w.csvfilename)
# 'id':int(id), success = row.use_impellerdata()
# }) if success:
# return HttpResponseRedirect(url) row.write_csv(w.csvfilename)
dataprep.update_strokedata(w.id,row.df)
w.impeller = True
w.save()
messages.info(request,'The distance and speed data are now based on Impeller data')
else:
messages.error(request,'No impeller data found')
url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)})
return HttpResponseRedirect(url)
# Switch from Impeller to GPS (only for SpeedCoach 2, if impeller data)
@login_required
def otw_use_gps(request,id=0):
w = get_workout(id)
if (checkworkoutuser(request.user,w)==False):
raise PermissionDenied("Access denied")
row = rdata(w.csvfilename)
success = row.use_gpsdata()
if success:
row.write_csv(w.csvfilename)
dataprep.update_strokedata(w.id,row.df)
w.impeller = False
w.save()
messages.info(request,'The distance and speed data are now based on GPS data')
else:
messages.error(request,'No GPS data found')
url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)})
return HttpResponseRedirect(url)
# Show Stroke power histogram for a workout # Show Stroke power histogram for a workout
@login_required() @login_required()
@@ -2623,8 +2769,8 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
form = AdvancedWorkoutForm(request.POST) form = AdvancedWorkoutForm(request.POST)
if form.is_valid(): if form.is_valid():
quick_calc = form.cleaned_data['quick_calc'] #quick_calc = form.cleaned_data['quick_calc']
go_service = form.cleaned_data['go_service'] #go_service = form.cleaned_data['go_service']
boattype = form.cleaned_data['boattype'] boattype = form.cleaned_data['boattype']
weightvalue = form.cleaned_data['weightvalue'] weightvalue = form.cleaned_data['weightvalue']
w.boattype = boattype w.boattype = boattype
@@ -2669,8 +2815,8 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
first_name,last_name,emailaddress,encoder.decode_hex(id), first_name,last_name,emailaddress,encoder.decode_hex(id),
ps=[r.p0,r.p1,r.p2,r.p3], ps=[r.p0,r.p1,r.p2,r.p3],
ratio=r.cpratio, ratio=r.cpratio,
quick_calc = quick_calc, # quick_calc = quick_calc,
go_service=go_service, # go_service=go_service,
emailbounced = r.emailbounced emailbounced = r.emailbounced
) )
+12
View File
@@ -47,6 +47,7 @@ ALLOWED_HOSTS = CFG['allowed_hosts']
INSTALLED_APPS = [ INSTALLED_APPS = [
'rowers', 'rowers',
'survey',
# 'cvkbrno', # 'cvkbrno',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
@@ -97,6 +98,7 @@ MIDDLEWARE = [
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'tz_detect.middleware.TimezoneMiddleware', 'tz_detect.middleware.TimezoneMiddleware',
'rowers.middleware.SurveyMiddleWare',
'rowers.middleware.GDPRMiddleWare', 'rowers.middleware.GDPRMiddleWare',
'rowers.middleware.PowerTimeFitnessMetricMiddleWare', 'rowers.middleware.PowerTimeFitnessMetricMiddleWare',
'rowers.middleware.RowerPlanMiddleWare', 'rowers.middleware.RowerPlanMiddleWare',
@@ -494,3 +496,13 @@ try:
CELERY = CFG['use_celery'] CELERY = CFG['use_celery']
except KeyError: except KeyError:
CELERY = False CELERY = False
# Recaptcha
try:
RECAPTCHA_SITE_KEY = CFG['recaptcha_site_key']
RECAPTCHA_SITE_SECRET = CFG['recaptcha_site_secret']
except KeyError:
RECAPTCHA_SITE_KEY = ''
RECAPTCHA_SITE_SECRET = ''
+1 -1
View File
@@ -60,7 +60,7 @@ DEBUG = True
TEMPLATES[0]['OPTIONS']['debug'] = DEBUG TEMPLATES[0]['OPTIONS']['debug'] = DEBUG
ALLOWED_HOSTS = ['localhost'] ALLOWED_HOSTS = ['localhost','127.0.0.1']
# INSTALLED_APPS += ['debug_toolbar',] # INSTALLED_APPS += ['debug_toolbar',]
+2
View File
@@ -22,6 +22,7 @@ from django.views.generic import TemplateView
from rowsandall_app.views import rootview, landingview from rowsandall_app.views import rootview, landingview
from django.contrib.auth import views as auth_views from django.contrib.auth import views as auth_views
from rowers import views as rowersviews from rowers import views as rowersviews
from survey import views as surveyviews
import django import django
@@ -65,6 +66,7 @@ urlpatterns += [
{'next_page': '/'}, {'next_page': '/'},
name='logout',), name='logout',),
re_path(r'^rowers/',include('rowers.urls')), re_path(r'^rowers/',include('rowers.urls')),
re_path(r'^survey/',include('survey.urls')),
# re_path(r'^cvkbrno/',include('cvkbrno.urls')), # re_path(r'^cvkbrno/',include('cvkbrno.urls')),
# re_path(r'^admin/rq/',include('django_rq_dashboard.urls')), # re_path(r'^admin/rq/',include('django_rq_dashboard.urls')),
re_path(r'^call\_back',rowersviews.rower_process_callback), re_path(r'^call\_back',rowersviews.rower_process_callback),
@@ -1,434 +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/2542/emailcsv,https://rowsandall.com/rowers/workout/2542/emailtcx,0,0,1970-01-01 00:00:00+00:00,9578,00:47:55.400000,Test Auto Sync Pro User,,Europe/Prague,rower,80.0,lwt
1,https://rowsandall.com/rowers/workout/2500/emailcsv,https://rowsandall.com/rowers/workout/2500/emailtcx,0,0,2014-02-26 20:32:33+00:00,65,00:00:02,Sample Workout JSON,,UTC,water,80.0,lwt
2,https://rowsandall.com/rowers/workout/3033/emailcsv,https://rowsandall.com/rowers/workout/3033/emailtcx,95,264,2015-06-02 06:29:02+00:00,14002,00:59:37.700000,Test P,,Europe/Prague,water,80.0,hwt
3,https://rowsandall.com/rowers/workout/2501/emailcsv,https://rowsandall.com/rowers/workout/2501/emailtcx,0,0,2016-04-02 08:15:08+00:00,10269,01:05:24,Completed a workout (generic) 6.35 mi on 04/02/16,,Europe/Prague,water,80.0,lwt
4,https://rowsandall.com/rowers/workout/2408/emailcsv,https://rowsandall.com/rowers/workout/2408/emailtcx,0,0,2016-07-30 08:40:36+00:00,1001,00:03:41,Comparison,,Europe/Berlin,rower,80.0,lwt
5,https://rowsandall.com/rowers/workout/3032/emailcsv,https://rowsandall.com/rowers/workout/3032/emailtcx,0,0,2016-07-31 12:35:01+00:00,1111,00:04:32.700000,,,Europe/Prague,water,80.0,hwt
6,https://rowsandall.com/rowers/workout/2572/emailcsv,https://rowsandall.com/rowers/workout/2572/emailtcx,0,0,2016-11-28 08:37:02+00:00,499,00:01:58,BC,,Europe/Prague,rower,80.0,lwt
7,https://rowsandall.com/rowers/workout/2379/emailcsv,https://rowsandall.com/rowers/workout/2379/emailtcx,0,0,2017-10-27 16:14:42+00:00,742,00:02:25,Test Weba,,Europe/Prague,water,80.0,lwt
8,https://rowsandall.com/rowers/workout/2380/emailcsv,https://rowsandall.com/rowers/workout/2380/emailtcx,0,0,2017-10-27 16:14:42+00:00,742,00:02:25,Test Weba,,Europe/Belgrade,water,80.0,lwt
9,https://rowsandall.com/rowers/workout/2521/emailcsv,https://rowsandall.com/rowers/workout/2521/emailtcx,0,0,2017-11-09 09:15:32+00:00,49842,02:19:37,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
10,https://rowsandall.com/rowers/workout/2524/emailcsv,https://rowsandall.com/rowers/workout/2524/emailtcx,0,0,2017-11-09 09:15:32+00:00,49842,02:19:37,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
11,https://rowsandall.com/rowers/workout/2527/emailcsv,https://rowsandall.com/rowers/workout/2527/emailtcx,0,0,2017-11-09 09:15:32+00:00,49842,02:19:37,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
12,https://rowsandall.com/rowers/workout/2531/emailcsv,https://rowsandall.com/rowers/workout/2531/emailtcx,0,0,2017-11-09 09:15:32+00:00,49842,02:19:37,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
13,https://rowsandall.com/rowers/workout/2523/emailcsv,https://rowsandall.com/rowers/workout/2523/emailtcx,0,0,2017-11-09 15:15:32+00:00,0,02:28:28,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
14,https://rowsandall.com/rowers/workout/2526/emailcsv,https://rowsandall.com/rowers/workout/2526/emailtcx,0,0,2017-11-09 15:15:32+00:00,0,02:28:28,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
15,https://rowsandall.com/rowers/workout/2529/emailcsv,https://rowsandall.com/rowers/workout/2529/emailtcx,0,0,2017-11-09 15:15:32+00:00,0,02:28:28,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
16,https://rowsandall.com/rowers/workout/2533/emailcsv,https://rowsandall.com/rowers/workout/2533/emailtcx,0,0,2017-11-09 15:15:32+00:00,0,02:28:28,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
17,https://rowsandall.com/rowers/workout/2520/emailcsv,https://rowsandall.com/rowers/workout/2520/emailtcx,0,0,2017-11-09 18:15:32+00:00,10016,01:06:03,Polar Import,,Europe/Helsinki,rower,80.0,lwt
18,https://rowsandall.com/rowers/workout/2522/emailcsv,https://rowsandall.com/rowers/workout/2522/emailtcx,0,0,2017-11-09 18:15:32+00:00,10016,01:06:03,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
19,https://rowsandall.com/rowers/workout/2525/emailcsv,https://rowsandall.com/rowers/workout/2525/emailtcx,0,0,2017-11-09 18:15:32+00:00,10016,01:06:03,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
20,https://rowsandall.com/rowers/workout/2528/emailcsv,https://rowsandall.com/rowers/workout/2528/emailtcx,0,0,2017-11-09 18:15:32+00:00,10016,01:06:03,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
21,https://rowsandall.com/rowers/workout/2532/emailcsv,https://rowsandall.com/rowers/workout/2532/emailtcx,0,0,2017-11-09 18:15:32+00:00,10016,01:06:03,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
22,https://rowsandall.com/rowers/workout/2494/emailcsv,https://rowsandall.com/rowers/workout/2494/emailtcx,0,0,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,Race,,Europe/Rome,water,80.0,lwt
23,https://rowsandall.com/rowers/workout/2496/emailcsv,https://rowsandall.com/rowers/workout/2496/emailtcx,0,0,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,Race,,Europe/Rome,water,80.0,lwt
24,https://rowsandall.com/rowers/workout/2497/emailcsv,https://rowsandall.com/rowers/workout/2497/emailtcx,0,0,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,SpdCoach 2,,Europe/Rome,rower,80.0,lwt
25,https://rowsandall.com/rowers/workout/2498/emailcsv,https://rowsandall.com/rowers/workout/2498/emailtcx,0,0,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,boat speed test,,Europe/Rome,water,80.0,lwt
26,https://rowsandall.com/rowers/workout/2499/emailcsv,https://rowsandall.com/rowers/workout/2499/emailtcx,0,0,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,Boat Speed test 2,,Europe/Rome,water,80.0,lwt
27,https://rowsandall.com/rowers/workout/2724/emailcsv,https://rowsandall.com/rowers/workout/2724/emailtcx,0,0,2018-01-01 09:27:47+00:00,5000,00:18:37,C2 Import Workout from 2018-01-01 09:27:47+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
28,https://rowsandall.com/rowers/workout/2723/emailcsv,https://rowsandall.com/rowers/workout/2723/emailtcx,0,0,2018-01-01 09:48:09+00:00,2963,00:13:29,C2 Import Workout from 2018-01-01 09:48:09+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
29,https://rowsandall.com/rowers/workout/2722/emailcsv,https://rowsandall.com/rowers/workout/2722/emailtcx,0,0,2018-01-02 18:22:08+00:00,14183,00:59:49.900000,C2 Import Workout from 2018-01-02 18:22:08+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
30,https://rowsandall.com/rowers/workout/2721/emailcsv,https://rowsandall.com/rowers/workout/2721/emailtcx,0,0,2018-01-03 16:24:47+00:00,4821,00:20:04.500000,C2 Import Workout from 2018-01-03 16:24:47+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
31,https://rowsandall.com/rowers/workout/2720/emailcsv,https://rowsandall.com/rowers/workout/2720/emailtcx,0,0,2018-01-03 16:46:19+00:00,2000,00:07:07.500000,C2 Import Workout from 2018-01-03 16:46:19+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
32,https://rowsandall.com/rowers/workout/2719/emailcsv,https://rowsandall.com/rowers/workout/2719/emailtcx,0,0,2018-01-03 16:57:04+00:00,2997,00:13:35.100000,C2 Import Workout from 2018-01-03 16:57:04+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
33,https://rowsandall.com/rowers/workout/2718/emailcsv,https://rowsandall.com/rowers/workout/2718/emailtcx,0,0,2018-01-06 13:59:30+00:00,4722,00:20:06.200000,C2 Import Workout from 2018-01-06 13:59:30+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
34,https://rowsandall.com/rowers/workout/2717/emailcsv,https://rowsandall.com/rowers/workout/2717/emailtcx,0,0,2018-01-06 14:20:43+00:00,1171,00:04:00,C2 Import Workout from 2018-01-06 14:20:43+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
35,https://rowsandall.com/rowers/workout/2716/emailcsv,https://rowsandall.com/rowers/workout/2716/emailtcx,0,0,2018-01-06 14:25:53+00:00,8006,00:36:13.600000,C2 Import Workout from 2018-01-06 14:25:53+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
36,https://rowsandall.com/rowers/workout/2715/emailcsv,https://rowsandall.com/rowers/workout/2715/emailtcx,0,0,2018-01-07 14:03:51+00:00,2520,00:10:42.700000,C2 Import Workout from 2018-01-07 14:03:51+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
37,https://rowsandall.com/rowers/workout/2714/emailcsv,https://rowsandall.com/rowers/workout/2714/emailtcx,0,0,2018-01-07 14:18:45+00:00,9996,00:42:35.100000,C2 Import Workout from 2018-01-07 14:18:45+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
38,https://rowsandall.com/rowers/workout/2713/emailcsv,https://rowsandall.com/rowers/workout/2713/emailtcx,0,0,2018-01-09 18:22:19+00:00,5267,00:22:34.200000,C2 Import Workout from 2018-01-09 18:22:19+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
39,https://rowsandall.com/rowers/workout/2712/emailcsv,https://rowsandall.com/rowers/workout/2712/emailtcx,0,0,2018-01-09 18:46:20+00:00,1000,00:03:21.400000,C2 Import Workout from 2018-01-09 18:46:20+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
40,https://rowsandall.com/rowers/workout/2711/emailcsv,https://rowsandall.com/rowers/workout/2711/emailtcx,0,0,2018-01-09 18:51:03+00:00,2300,00:10:04.500000,C2 Import Workout from 2018-01-09 18:51:03+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
41,https://rowsandall.com/rowers/workout/2710/emailcsv,https://rowsandall.com/rowers/workout/2710/emailtcx,0,0,2018-01-12 16:09:10+00:00,2008,00:08:39.100000,C2 Import Workout from 2018-01-12 16:09:10+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
42,https://rowsandall.com/rowers/workout/2709/emailcsv,https://rowsandall.com/rowers/workout/2709/emailtcx,0,0,2018-01-12 16:19:00+00:00,500,00:01:33.400000,C2 Import Workout from 2018-01-12 16:19:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
43,https://rowsandall.com/rowers/workout/2708/emailcsv,https://rowsandall.com/rowers/workout/2708/emailtcx,0,0,2018-01-12 16:21:06+00:00,2002,00:09:25.600000,C2 Import Workout from 2018-01-12 16:21:06+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
44,https://rowsandall.com/rowers/workout/2707/emailcsv,https://rowsandall.com/rowers/workout/2707/emailtcx,0,0,2018-01-12 16:31:08+00:00,100,00:00:17.600000,C2 Import Workout from 2018-01-12 16:31:08+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
45,https://rowsandall.com/rowers/workout/2706/emailcsv,https://rowsandall.com/rowers/workout/2706/emailtcx,0,0,2018-01-12 16:31:58+00:00,2011,00:08:56.600000,C2 Import Workout from 2018-01-12 16:31:58+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
46,https://rowsandall.com/rowers/workout/2705/emailcsv,https://rowsandall.com/rowers/workout/2705/emailtcx,0,0,2018-01-13 12:40:00+00:00,2000,00:06:55.800000,C2 Import Workout from 2018-01-13 12:40:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
47,https://rowsandall.com/rowers/workout/2704/emailcsv,https://rowsandall.com/rowers/workout/2704/emailtcx,0,0,2018-01-16 18:40:49+00:00,2007,00:08:30.800000,C2 Import Workout from 2018-01-16 18:40:49+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
48,https://rowsandall.com/rowers/workout/2703/emailcsv,https://rowsandall.com/rowers/workout/2703/emailtcx,0,0,2018-01-16 18:50:09+00:00,333,00:01:00,C2 Import Workout from 2018-01-16 18:50:09+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
49,https://rowsandall.com/rowers/workout/2702/emailcsv,https://rowsandall.com/rowers/workout/2702/emailtcx,0,0,2018-01-16 18:51:41+00:00,6820,00:31:22.200000,C2 Import Workout from 2018-01-16 18:51:41+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
50,https://rowsandall.com/rowers/workout/2701/emailcsv,https://rowsandall.com/rowers/workout/2701/emailtcx,0,0,2018-01-16 19:24:23+00:00,2008,00:09:01.100000,C2 Import Workout from 2018-01-16 19:24:23+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
51,https://rowsandall.com/rowers/workout/2700/emailcsv,https://rowsandall.com/rowers/workout/2700/emailtcx,0,0,2018-01-18 19:01:45+00:00,2007,00:08:27.600000,C2 Import Workout from 2018-01-18 19:01:45+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
52,https://rowsandall.com/rowers/workout/2699/emailcsv,https://rowsandall.com/rowers/workout/2699/emailtcx,0,0,2018-01-18 19:10:50+00:00,6918,00:29:14.200000,C2 Import Workout from 2018-01-18 19:10:50+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
53,https://rowsandall.com/rowers/workout/2698/emailcsv,https://rowsandall.com/rowers/workout/2698/emailtcx,0,0,2018-01-18 19:40:40+00:00,1217,00:06:11.100000,C2 Import Workout from 2018-01-18 19:40:40+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
54,https://rowsandall.com/rowers/workout/2697/emailcsv,https://rowsandall.com/rowers/workout/2697/emailtcx,0,0,2018-01-18 19:47:32+00:00,6697,00:29:16.700000,C2 Import Workout from 2018-01-18 19:47:32+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
55,https://rowsandall.com/rowers/workout/2696/emailcsv,https://rowsandall.com/rowers/workout/2696/emailtcx,0,0,2018-01-18 20:17:58+00:00,1997,00:09:10.700000,C2 Import Workout from 2018-01-18 20:17:58+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
56,https://rowsandall.com/rowers/workout/2692/emailcsv,https://rowsandall.com/rowers/workout/2692/emailtcx,0,0,2018-01-19 00:00:00+00:00,200,00:02:00.200000,C2 Import Workout from 2018-01-19 00:00:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
57,https://rowsandall.com/rowers/workout/2693/emailcsv,https://rowsandall.com/rowers/workout/2693/emailtcx,0,0,2018-01-19 00:00:00+00:00,200,00:01:55,C2 Import Workout from 2018-01-19 00:00:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
58,https://rowsandall.com/rowers/workout/2694/emailcsv,https://rowsandall.com/rowers/workout/2694/emailtcx,0,0,2018-01-19 00:00:00+00:00,200,00:02:00,C2 Import Workout from 2018-01-19 00:00:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
59,https://rowsandall.com/rowers/workout/2695/emailcsv,https://rowsandall.com/rowers/workout/2695/emailtcx,0,0,2018-01-19 00:00:00+00:00,200,00:01:10,C2 Import Workout from 2018-01-19 00:00:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
60,https://rowsandall.com/rowers/workout/2691/emailcsv,https://rowsandall.com/rowers/workout/2691/emailtcx,0,0,2018-01-20 13:22:31+00:00,19381,01:20:39.100000,C2 Import Workout from 2018-01-20 13:22:31+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
61,https://rowsandall.com/rowers/workout/2690/emailcsv,https://rowsandall.com/rowers/workout/2690/emailtcx,0,0,2018-01-24 18:55:23+00:00,210,00:01:43.400000,C2 Import Workout from 2018-01-24 18:55:23+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
62,https://rowsandall.com/rowers/workout/2689/emailcsv,https://rowsandall.com/rowers/workout/2689/emailtcx,0,0,2018-01-24 18:59:06+00:00,2110,00:08:42.700000,C2 Import Workout from 2018-01-24 18:59:06+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
63,https://rowsandall.com/rowers/workout/2688/emailcsv,https://rowsandall.com/rowers/workout/2688/emailtcx,0,0,2018-01-24 19:08:04+00:00,6081,00:25:10,C2 Import Workout from 2018-01-24 19:08:04+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
64,https://rowsandall.com/rowers/workout/2687/emailcsv,https://rowsandall.com/rowers/workout/2687/emailtcx,0,0,2018-01-24 19:24:18+00:00,14426,01:00:12.600000,C2 Import Workout from 2018-01-24 19:24:18+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
65,https://rowsandall.com/rowers/workout/2686/emailcsv,https://rowsandall.com/rowers/workout/2686/emailtcx,0,0,2018-01-27 13:23:26+00:00,14981,01:01:39.600000,C2 Import Workout from 2018-01-27 13:23:26+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
66,https://rowsandall.com/rowers/workout/2685/emailcsv,https://rowsandall.com/rowers/workout/2685/emailtcx,0,0,2018-01-27 14:25:07+00:00,18338,01:15:22.800000,C2 Import Workout from 2018-01-27 14:25:07+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
67,https://rowsandall.com/rowers/workout/2684/emailcsv,https://rowsandall.com/rowers/workout/2684/emailtcx,0,0,2018-02-03 14:20:18+00:00,12181,00:51:46,C2 Import Workout from 2018-02-03 14:20:18+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
68,https://rowsandall.com/rowers/workout/2683/emailcsv,https://rowsandall.com/rowers/workout/2683/emailtcx,0,0,2018-02-06 17:54:01+00:00,7210,00:31:09,C2 Import Workout from 2018-02-06 17:54:01+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
69,https://rowsandall.com/rowers/workout/2682/emailcsv,https://rowsandall.com/rowers/workout/2682/emailtcx,0,0,2018-02-10 09:10:14+00:00,3040,00:12:47.200000,C2 Import Workout from 2018-02-10 09:10:14+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
70,https://rowsandall.com/rowers/workout/2681/emailcsv,https://rowsandall.com/rowers/workout/2681/emailtcx,0,0,2018-02-10 09:23:52+00:00,9305,00:40:50.900000,C2 Import Workout from 2018-02-10 09:23:52+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
71,https://rowsandall.com/rowers/workout/2680/emailcsv,https://rowsandall.com/rowers/workout/2680/emailtcx,0,0,2018-02-10 10:06:00+00:00,2009,00:09:04.200000,C2 Import Workout from 2018-02-10 10:06:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
72,https://rowsandall.com/rowers/workout/2679/emailcsv,https://rowsandall.com/rowers/workout/2679/emailtcx,0,0,2018-02-11 16:57:32+00:00,14430,01:01:23,C2 Import Workout from 2018-02-11 16:57:32+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
73,https://rowsandall.com/rowers/workout/2335/emailcsv,https://rowsandall.com/rowers/workout/2335/emailtcx,0,0,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,SpdCoach 1,,America/Los_Angeles,water,80.0,lwt
74,https://rowsandall.com/rowers/workout/2338/emailcsv,https://rowsandall.com/rowers/workout/2338/emailtcx,0,0,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
75,https://rowsandall.com/rowers/workout/2339/emailcsv,https://rowsandall.com/rowers/workout/2339/emailtcx,0,0,2018-02-12 05:02:06+00:00,7522,09:41:48.200000,Joined Workout,,America/Los_Angeles,water,80.0,lwt
76,https://rowsandall.com/rowers/workout/2341/emailcsv,https://rowsandall.com/rowers/workout/2341/emailtcx,0,0,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
77,https://rowsandall.com/rowers/workout/2342/emailcsv,https://rowsandall.com/rowers/workout/2342/emailtcx,0,0,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
78,https://rowsandall.com/rowers/workout/2343/emailcsv,https://rowsandall.com/rowers/workout/2343/emailtcx,0,0,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
79,https://rowsandall.com/rowers/workout/2410/emailcsv,https://rowsandall.com/rowers/workout/2410/emailtcx,0,0,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,Test,,America/Los_Angeles,water,80.0,lwt
80,https://rowsandall.com/rowers/workout/2414/emailcsv,https://rowsandall.com/rowers/workout/2414/emailtcx,0,0,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
81,https://rowsandall.com/rowers/workout/2416/emailcsv,https://rowsandall.com/rowers/workout/2416/emailtcx,0,0,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,Test aaaa,,America/Los_Angeles,water,80.0,lwt
82,https://rowsandall.com/rowers/workout/2417/emailcsv,https://rowsandall.com/rowers/workout/2417/emailtcx,0,0,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
83,https://rowsandall.com/rowers/workout/2418/emailcsv,https://rowsandall.com/rowers/workout/2418/emailtcx,0,0,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,Test i,,America/Los_Angeles,water,80.0,lwt
84,https://rowsandall.com/rowers/workout/2419/emailcsv,https://rowsandall.com/rowers/workout/2419/emailtcx,0,0,2018-02-12 05:02:06+00:00,11394,09:42:05.500000,Joined Workout,,America/Los_Angeles,water,80.0,lwt
85,https://rowsandall.com/rowers/workout/2420/emailcsv,https://rowsandall.com/rowers/workout/2420/emailtcx,0,0,2018-02-12 13:55:06+00:00,3872,00:27:12.200000,Test ii,,America/Los_Angeles,water,80.0,lwt
86,https://rowsandall.com/rowers/workout/2421/emailcsv,https://rowsandall.com/rowers/workout/2421/emailtcx,0,0,2018-02-12 13:55:06+00:00,350236,00:49:05.500000,Joined Workout,,America/Los_Angeles,water,80.0,lwt
87,https://rowsandall.com/rowers/workout/2344/emailcsv,https://rowsandall.com/rowers/workout/2344/emailtcx,0,0,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
88,https://rowsandall.com/rowers/workout/2347/emailcsv,https://rowsandall.com/rowers/workout/2347/emailtcx,0,0,2018-02-12 14:02:06+00:00,9336,00:58:35,Joined Workout,imported through email,America/Los_Angeles,water,80.0,lwt
89,https://rowsandall.com/rowers/workout/2411/emailcsv,https://rowsandall.com/rowers/workout/2411/emailtcx,0,0,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,Test 2,,America/Los_Angeles,water,80.0,lwt
90,https://rowsandall.com/rowers/workout/2415/emailcsv,https://rowsandall.com/rowers/workout/2415/emailtcx,0,0,2018-02-12 14:02:06+00:00,9336,00:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
91,https://rowsandall.com/rowers/workout/2430/emailcsv,https://rowsandall.com/rowers/workout/2430/emailtcx,0,0,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,Water,,America/Los_Angeles,water,80.0,lwt
92,https://rowsandall.com/rowers/workout/2445/emailcsv,https://rowsandall.com/rowers/workout/2445/emailtcx,0,0,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,Test P,imported through email,America/Los_Angeles,water,80.0,lwt
93,https://rowsandall.com/rowers/workout/2449/emailcsv,https://rowsandall.com/rowers/workout/2449/emailtcx,0,0,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,Water 2x,imported through email,America/Los_Angeles,water,80.0,lwt
94,https://rowsandall.com/rowers/workout/2412/emailcsv,https://rowsandall.com/rowers/workout/2412/emailtcx,0,0,2018-02-12 14:22:01+00:00,3650,00:14:53.200000,Test 3,,America/Los_Angeles,water,80.0,lwt
95,https://rowsandall.com/rowers/workout/2336/emailcsv,https://rowsandall.com/rowers/workout/2336/emailtcx,0,0,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
96,https://rowsandall.com/rowers/workout/2340/emailcsv,https://rowsandall.com/rowers/workout/2340/emailtcx,0,0,2018-02-12 14:29:01+00:00,5464,00:31:40,Joined Workout,,America/Los_Angeles,water,80.0,lwt
97,https://rowsandall.com/rowers/workout/2345/emailcsv,https://rowsandall.com/rowers/workout/2345/emailtcx,0,0,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
98,https://rowsandall.com/rowers/workout/2433/emailcsv,https://rowsandall.com/rowers/workout/2433/emailtcx,0,0,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,Test,,America/Los_Angeles,rower,80.0,lwt
99,https://rowsandall.com/rowers/workout/2442/emailcsv,https://rowsandall.com/rowers/workout/2442/emailtcx,0,0,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,Water,imported through email,America/Los_Angeles,water,80.0,lwt
100,https://rowsandall.com/rowers/workout/2444/emailcsv,https://rowsandall.com/rowers/workout/2444/emailtcx,0,0,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,SpdCoach 2,imported through email,America/Los_Angeles,water,80.0,lwt
101,https://rowsandall.com/rowers/workout/2337/emailcsv,https://rowsandall.com/rowers/workout/2337/emailtcx,0,0,2018-02-12 14:49:02+00:00,1814,00:11:39,SpdCoach 3,,America/Los_Angeles,water,80.0,lwt
102,https://rowsandall.com/rowers/workout/2346/emailcsv,https://rowsandall.com/rowers/workout/2346/emailtcx,0,0,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
103,https://rowsandall.com/rowers/workout/2413/emailcsv,https://rowsandall.com/rowers/workout/2413/emailtcx,0,0,2018-02-12 14:49:02+00:00,1814,00:11:39,Test 4,,America/Los_Angeles,water,80.0,lwt
104,https://rowsandall.com/rowers/workout/2443/emailcsv,https://rowsandall.com/rowers/workout/2443/emailtcx,0,0,2018-02-12 14:49:02+00:00,1814,00:11:39,water weer,imported through email,America/Los_Angeles,water,80.0,lwt
105,https://rowsandall.com/rowers/workout/2678/emailcsv,https://rowsandall.com/rowers/workout/2678/emailtcx,0,0,2018-02-12 18:39:42+00:00,2014,00:08:37.700000,C2 Import Workout from 2018-02-12 18:39:42+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
106,https://rowsandall.com/rowers/workout/2677/emailcsv,https://rowsandall.com/rowers/workout/2677/emailtcx,0,0,2018-02-12 18:49:03+00:00,10562,00:46:12.400000,C2 Import Workout from 2018-02-12 18:49:03+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
107,https://rowsandall.com/rowers/workout/2676/emailcsv,https://rowsandall.com/rowers/workout/2676/emailtcx,0,0,2018-02-12 19:36:43+00:00,1998,00:09:39.800000,C2 Import Workout from 2018-02-12 19:36:43+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
108,https://rowsandall.com/rowers/workout/2675/emailcsv,https://rowsandall.com/rowers/workout/2675/emailtcx,0,0,2018-02-15 18:16:50+00:00,12440,00:51:41.500000,C2 Import Workout from 2018-02-15 18:16:50+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
109,https://rowsandall.com/rowers/workout/2674/emailcsv,https://rowsandall.com/rowers/workout/2674/emailtcx,0,0,2018-02-15 19:08:28+00:00,14477,01:00:21.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
110,https://rowsandall.com/rowers/workout/2673/emailcsv,https://rowsandall.com/rowers/workout/2673/emailtcx,0,0,2018-02-16 14:24:03+00:00,3012,00:12:58.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
111,https://rowsandall.com/rowers/workout/2672/emailcsv,https://rowsandall.com/rowers/workout/2672/emailtcx,0,0,2018-02-16 14:37:40+00:00,5277,00:23:00,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
112,https://rowsandall.com/rowers/workout/2671/emailcsv,https://rowsandall.com/rowers/workout/2671/emailtcx,0,0,2018-02-16 15:01:29+00:00,1036,00:05:03.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
113,https://rowsandall.com/rowers/workout/2670/emailcsv,https://rowsandall.com/rowers/workout/2670/emailtcx,0,0,2018-02-16 15:07:03+00:00,5113,00:23:22,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
114,https://rowsandall.com/rowers/workout/2669/emailcsv,https://rowsandall.com/rowers/workout/2669/emailtcx,0,0,2018-02-16 15:34:40+00:00,1259,00:05:48.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
115,https://rowsandall.com/rowers/workout/2668/emailcsv,https://rowsandall.com/rowers/workout/2668/emailtcx,0,0,2018-02-18 13:30:59+00:00,13541,00:56:07.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
116,https://rowsandall.com/rowers/workout/2667/emailcsv,https://rowsandall.com/rowers/workout/2667/emailtcx,0,0,2018-02-20 18:08:13+00:00,2008,00:08:36.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
117,https://rowsandall.com/rowers/workout/2666/emailcsv,https://rowsandall.com/rowers/workout/2666/emailtcx,0,0,2018-02-20 18:17:17+00:00,10914,00:48:06.100000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
118,https://rowsandall.com/rowers/workout/2665/emailcsv,https://rowsandall.com/rowers/workout/2665/emailtcx,0,0,2018-02-20 19:06:36+00:00,1513,00:07:37.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
119,https://rowsandall.com/rowers/workout/2381/emailcsv,https://rowsandall.com/rowers/workout/2381/emailtcx,0,0,2018-02-21 06:26:01+00:00,6119,00:27:20.200000,3x2km Racice,,Europe/Prague,water,80.0,lwt
120,https://rowsandall.com/rowers/workout/2384/emailcsv,https://rowsandall.com/rowers/workout/2384/emailtcx,0,0,2018-02-22 09:32:01+00:00,8000,00:35:08.500000,8k trial,,Europe/Prague,water,80.0,lwt
121,https://rowsandall.com/rowers/workout/2664/emailcsv,https://rowsandall.com/rowers/workout/2664/emailtcx,0,0,2018-02-22 18:40:03+00:00,11481,00:49:17.400000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
122,https://rowsandall.com/rowers/workout/2663/emailcsv,https://rowsandall.com/rowers/workout/2663/emailtcx,0,0,2018-02-23 15:12:10+00:00,2008,00:08:44.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
123,https://rowsandall.com/rowers/workout/2383/emailcsv,https://rowsandall.com/rowers/workout/2383/emailtcx,0,0,2018-02-23 15:17:03+00:00,5918,00:25:10.700000,Horin,,Europe/Prague,water,80.0,lwt
124,https://rowsandall.com/rowers/workout/2662/emailcsv,https://rowsandall.com/rowers/workout/2662/emailtcx,0,0,2018-02-23 15:21:44+00:00,8804,00:39:58,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
125,https://rowsandall.com/rowers/workout/2661/emailcsv,https://rowsandall.com/rowers/workout/2661/emailtcx,0,0,2018-02-23 16:02:23+00:00,2008,00:09:05,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
126,https://rowsandall.com/rowers/workout/2385/emailcsv,https://rowsandall.com/rowers/workout/2385/emailtcx,0,0,2018-02-24 11:58:09+00:00,17045,01:35:59,Washington,,America/New_York,water,80.0,lwt
127,https://rowsandall.com/rowers/workout/2660/emailcsv,https://rowsandall.com/rowers/workout/2660/emailtcx,0,0,2018-02-24 15:07:07+00:00,14544,01:01:04.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
128,https://rowsandall.com/rowers/workout/2386/emailcsv,https://rowsandall.com/rowers/workout/2386/emailtcx,0,0,2018-02-25 12:24:59+00:00,6182,00:26:24.400000,9x500m/70sec,,Europe/Prague,rower,80.0,lwt
129,https://rowsandall.com/rowers/workout/2659/emailcsv,https://rowsandall.com/rowers/workout/2659/emailtcx,0,0,2018-02-25 14:15:13+00:00,16623,01:22:28,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
130,https://rowsandall.com/rowers/workout/2400/emailcsv,https://rowsandall.com/rowers/workout/2400/emailtcx,0,0,2018-02-25 22:45:28+00:00,4175,00:25:07.700000,Test CP,,Europe/Prague,rower,80.0,lwt
131,https://rowsandall.com/rowers/workout/2387/emailcsv,https://rowsandall.com/rowers/workout/2387/emailtcx,0,0,2018-02-27 13:19:44+00:00,2206,00:10:00,StatsError,,Europe/Prague,rower,80.0,lwt
132,https://rowsandall.com/rowers/workout/2658/emailcsv,https://rowsandall.com/rowers/workout/2658/emailtcx,0,0,2018-02-27 16:32:56+00:00,13549,00:56:44.900000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
133,https://rowsandall.com/rowers/workout/2657/emailcsv,https://rowsandall.com/rowers/workout/2657/emailtcx,0,0,2018-03-03 13:50:12+00:00,2012,00:08:42.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
134,https://rowsandall.com/rowers/workout/2656/emailcsv,https://rowsandall.com/rowers/workout/2656/emailtcx,0,0,2018-03-03 14:00:26+00:00,6270,00:26:41.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
135,https://rowsandall.com/rowers/workout/2655/emailcsv,https://rowsandall.com/rowers/workout/2655/emailtcx,0,0,2018-03-03 14:27:41+00:00,999,00:05:44.100000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
136,https://rowsandall.com/rowers/workout/2395/emailcsv,https://rowsandall.com/rowers/workout/2395/emailtcx,0,0,2018-03-03 14:33:51+00:00,6098,00:26:35.400000,Flex chart not working,,Europe/Prague,rower,80.0,lwt
137,https://rowsandall.com/rowers/workout/2654/emailcsv,https://rowsandall.com/rowers/workout/2654/emailtcx,0,0,2018-03-03 14:33:51+00:00,6098,00:26:35.400000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
138,https://rowsandall.com/rowers/workout/2653/emailcsv,https://rowsandall.com/rowers/workout/2653/emailtcx,0,0,2018-03-03 15:01:34+00:00,1559,00:07:16.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
139,https://rowsandall.com/rowers/workout/2392/emailcsv,https://rowsandall.com/rowers/workout/2392/emailtcx,0,0,2018-03-05 13:51:23+00:00,13802,01:06:00,Mike's average workout,,Europe/Prague,rower,80.0,lwt
140,https://rowsandall.com/rowers/workout/2396/emailcsv,https://rowsandall.com/rowers/workout/2396/emailtcx,0,0,2018-03-05 13:51:23+00:00,4058,00:17:00,Mike's average workout (1),,Europe/Prague,rower,80.0,lwt
141,https://rowsandall.com/rowers/workout/2397/emailcsv,https://rowsandall.com/rowers/workout/2397/emailtcx,0,0,2018-03-05 14:08:23+00:00,9738,00:49:00,Mike's average workout (2),,Europe/Prague,rower,80.0,lwt
142,https://rowsandall.com/rowers/workout/2389/emailcsv,https://rowsandall.com/rowers/workout/2389/emailtcx,0,0,2018-03-05 17:48:31+00:00,7022,00:29:44.400000,test,wat een kutsessie,Europe/Prague,rower,80.0,lwt
143,https://rowsandall.com/rowers/workout/2652/emailcsv,https://rowsandall.com/rowers/workout/2652/emailtcx,0,0,2018-03-05 17:48:31+00:00,7022,00:29:45.900000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
144,https://rowsandall.com/rowers/workout/2390/emailcsv,https://rowsandall.com/rowers/workout/2390/emailtcx,0,0,2018-03-05 17:50:46+00:00,5019,00:31:27.500000,,,Europe/Prague,rower,80.0,lwt
145,https://rowsandall.com/rowers/workout/2651/emailcsv,https://rowsandall.com/rowers/workout/2651/emailtcx,0,0,2018-03-08 18:34:05+00:00,2010,00:08:38.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
146,https://rowsandall.com/rowers/workout/2650/emailcsv,https://rowsandall.com/rowers/workout/2650/emailtcx,0,0,2018-03-08 18:43:29+00:00,10444,00:46:52.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
147,https://rowsandall.com/rowers/workout/2649/emailcsv,https://rowsandall.com/rowers/workout/2649/emailtcx,0,0,2018-03-08 19:31:31+00:00,269,00:01:42,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
148,https://rowsandall.com/rowers/workout/2398/emailcsv,https://rowsandall.com/rowers/workout/2398/emailtcx,0,0,2018-03-09 11:52:48+00:00,4160,00:13:00,test template,"Dit zijn de notes
Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang
LAngwoordzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz",Europe/Prague,rower,80.0,lwt
149,https://rowsandall.com/rowers/workout/2399/emailcsv,https://rowsandall.com/rowers/workout/2399/emailtcx,0,0,2018-03-09 11:59:13+00:00,4160,00:13:00,Test P,,Europe/Prague,rower,80.0,lwt
150,https://rowsandall.com/rowers/workout/2401/emailcsv,https://rowsandall.com/rowers/workout/2401/emailtcx,0,0,2018-03-13 07:32:40+00:00,6479,00:30:27.300000,high power values?,,Europe/Prague,rower,80.0,lwt
151,https://rowsandall.com/rowers/workout/2648/emailcsv,https://rowsandall.com/rowers/workout/2648/emailtcx,0,0,2018-03-13 18:18:31+00:00,2009,00:08:30,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
152,https://rowsandall.com/rowers/workout/2404/emailcsv,https://rowsandall.com/rowers/workout/2404/emailtcx,0,0,2018-03-13 18:28:00.900000+00:00,9996,00:40:00,C2 Rower Timed. 10.0,"C2 Rower Timed. 10.0km, 40.00 min. (PainSled)",Europe/Prague,rower,80.0,lwt
153,https://rowsandall.com/rowers/workout/2405/emailcsv,https://rowsandall.com/rowers/workout/2405/emailtcx,0,0,2018-03-13 18:28:00.900000+00:00,10850,00:45:32.400000,C2 Rower Timed. 10.0,"C2 Rower Timed. 10.0km, 40.00 min. (PainSled)",Europe/Prague,rower,80.0,lwt
154,https://rowsandall.com/rowers/workout/2647/emailcsv,https://rowsandall.com/rowers/workout/2647/emailtcx,0,0,2018-03-13 18:28:01+00:00,10864,00:46:12.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
155,https://rowsandall.com/rowers/workout/2646/emailcsv,https://rowsandall.com/rowers/workout/2646/emailtcx,0,0,2018-03-13 19:15:15+00:00,1015,00:05:05.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
156,https://rowsandall.com/rowers/workout/2645/emailcsv,https://rowsandall.com/rowers/workout/2645/emailtcx,0,0,2018-03-13 19:18:21+00:00,2009,00:08:29.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,hwt
157,https://rowsandall.com/rowers/workout/2644/emailcsv,https://rowsandall.com/rowers/workout/2644/emailtcx,0,0,2018-03-13 19:28:00+00:00,9996,00:40:00,Imported workout,imported from Concept2 log,UTC,rower,80.0,hwt
158,https://rowsandall.com/rowers/workout/2402/emailcsv,https://rowsandall.com/rowers/workout/2402/emailtcx,0,0,2018-03-13 21:15:46+00:00,1311,00:13:04.100000,Stroke Count,,Europe/Prague,rower,80.0,lwt
159,https://rowsandall.com/rowers/workout/2403/emailcsv,https://rowsandall.com/rowers/workout/2403/emailtcx,0,0,2018-03-14 19:33:20+00:00,10850,00:45:32.400000,4x10min,,Europe/Prague,rower,80.0,lwt
160,https://rowsandall.com/rowers/workout/2406/emailcsv,https://rowsandall.com/rowers/workout/2406/emailtcx,0,0,2018-03-15 06:22:52+00:00,336,00:01:00,Test 1 minute,,Europe/Prague,rower,80.0,lwt
161,https://rowsandall.com/rowers/workout/2422/emailcsv,https://rowsandall.com/rowers/workout/2422/emailtcx,0,0,2018-03-15 06:22:52+00:00,8136,23:59:59.900000,Joined Workout,,Europe/Prague,rower,80.0,lwt
162,https://rowsandall.com/rowers/workout/2407/emailcsv,https://rowsandall.com/rowers/workout/2407/emailtcx,0,0,2018-03-15 06:23:09+00:00,7800,00:30:00,Thirty Dirty,,Europe/Prague,rower,80.0,lwt
163,https://rowsandall.com/rowers/workout/2434/emailcsv,https://rowsandall.com/rowers/workout/2434/emailtcx,0,0,2018-03-15 06:25:09+00:00,7800,23:59:59.900000,30 min,,Europe/Prague,rower,80.0,lwt
164,https://rowsandall.com/rowers/workout/2643/emailcsv,https://rowsandall.com/rowers/workout/2643/emailtcx,0,0,2018-03-15 18:48:48+00:00,2013,00:08:36.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
165,https://rowsandall.com/rowers/workout/2425/emailcsv,https://rowsandall.com/rowers/workout/2425/emailtcx,0,0,2018-03-15 18:58:08+00:00,10169,00:44:31.200000,Joined Workout,,Europe/Prague,rower,80.0,lwt
166,https://rowsandall.com/rowers/workout/2438/emailcsv,https://rowsandall.com/rowers/workout/2438/emailtcx,0,0,2018-03-15 18:58:08+00:00,8157,00:34:21.600000,Test,imported through email,Europe/Prague,rower,80.0,lwt
167,https://rowsandall.com/rowers/workout/2642/emailcsv,https://rowsandall.com/rowers/workout/2642/emailtcx,0,0,2018-03-15 18:58:08+00:00,8157,00:34:21.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
168,https://rowsandall.com/rowers/workout/2423/emailcsv,https://rowsandall.com/rowers/workout/2423/emailtcx,0,0,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,6x4min,,Europe/Prague,rower,80.0,lwt
169,https://rowsandall.com/rowers/workout/2431/emailcsv,https://rowsandall.com/rowers/workout/2431/emailtcx,0,0,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,Indoor,,Europe/Prague,rower,80.0,lwt
170,https://rowsandall.com/rowers/workout/2432/emailcsv,https://rowsandall.com/rowers/workout/2432/emailtcx,0,0,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,test,,Europe/Prague,rower,80.0,lwt
171,https://rowsandall.com/rowers/workout/2435/emailcsv,https://rowsandall.com/rowers/workout/2435/emailtcx,0,0,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,Test,,Europe/Prague,rower,80.0,lwt
172,https://rowsandall.com/rowers/workout/2436/emailcsv,https://rowsandall.com/rowers/workout/2436/emailtcx,0,0,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,r,,Europe/Prague,rower,80.0,lwt
173,https://rowsandall.com/rowers/workout/2437/emailcsv,https://rowsandall.com/rowers/workout/2437/emailtcx,0,0,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,a,,Europe/Prague,rower,80.0,lwt
174,https://rowsandall.com/rowers/workout/2440/emailcsv,https://rowsandall.com/rowers/workout/2440/emailtcx,0,0,2018-03-15 19:33:15+00:00,2012,00:09:24.300000,another one,imported through email,Europe/Prague,rower,80.0,lwt
175,https://rowsandall.com/rowers/workout/2641/emailcsv,https://rowsandall.com/rowers/workout/2641/emailtcx,0,0,2018-03-15 19:33:15+00:00,2012,00:09:24.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
176,https://rowsandall.com/rowers/workout/2424/emailcsv,https://rowsandall.com/rowers/workout/2424/emailtcx,0,0,2018-03-15 19:33:15.009331+00:00,2012,00:09:24.400000,6x4min,,Europe/Prague,rower,80.0,lwt
177,https://rowsandall.com/rowers/workout/2429/emailcsv,https://rowsandall.com/rowers/workout/2429/emailtcx,0,0,2018-03-16 12:04:52+00:00,9595,00:54:45,Joined Workout,,America/New_York,rower,80.0,lwt
178,https://rowsandall.com/rowers/workout/2426/emailcsv,https://rowsandall.com/rowers/workout/2426/emailtcx,0,0,2018-03-16 12:09:23+00:00,9269,00:50:14,Test P,,America/New_York,rower,80.0,lwt
179,https://rowsandall.com/rowers/workout/2428/emailcsv,https://rowsandall.com/rowers/workout/2428/emailtcx,0,0,2018-03-16 12:09:23+00:00,9269,00:50:14,,,America/New_York,rower,80.0,lwt
180,https://rowsandall.com/rowers/workout/2427/emailcsv,https://rowsandall.com/rowers/workout/2427/emailtcx,0,0,2018-03-16 13:00:52+00:00,326,00:04:03,Water Workout,,America/New_York,water,80.0,lwt
181,https://rowsandall.com/rowers/workout/2640/emailcsv,https://rowsandall.com/rowers/workout/2640/emailtcx,0,0,2018-03-17 14:14:56+00:00,15231,01:03:19.100000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
182,https://rowsandall.com/rowers/workout/2639/emailcsv,https://rowsandall.com/rowers/workout/2639/emailtcx,0,0,2018-03-18 14:03:27+00:00,3876,00:16:16.200000,Imported workout,imported from Concept2 log,UTC,slides,80.0,lwt
183,https://rowsandall.com/rowers/workout/2638/emailcsv,https://rowsandall.com/rowers/workout/2638/emailtcx,0,0,2018-03-18 14:20:52+00:00,6000,00:22:17.500000,Imported workout,imported from Concept2 log,UTC,slides,80.0,lwt
184,https://rowsandall.com/rowers/workout/2637/emailcsv,https://rowsandall.com/rowers/workout/2637/emailtcx,0,0,2018-03-18 14:44:46+00:00,4163,00:19:13.200000,Imported workout,imported from Concept2 log,UTC,slides,80.0,lwt
185,https://rowsandall.com/rowers/workout/2636/emailcsv,https://rowsandall.com/rowers/workout/2636/emailtcx,0,0,2018-03-22 18:38:59+00:00,2007,00:08:43.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
186,https://rowsandall.com/rowers/workout/2635/emailcsv,https://rowsandall.com/rowers/workout/2635/emailtcx,0,0,2018-03-22 18:48:29+00:00,6770,00:29:38.200000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
187,https://rowsandall.com/rowers/workout/2634/emailcsv,https://rowsandall.com/rowers/workout/2634/emailtcx,0,0,2018-03-22 19:18:50+00:00,2010,00:08:46.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
188,https://rowsandall.com/rowers/workout/2633/emailcsv,https://rowsandall.com/rowers/workout/2633/emailtcx,0,0,2018-03-24 09:20:07+00:00,15446,01:22:56.300000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
189,https://rowsandall.com/rowers/workout/2451/emailcsv,https://rowsandall.com/rowers/workout/2451/emailtcx,0,0,2018-03-25 09:59:12+00:00,29000,01:50:13,test,,Europe/Zurich,rower,80.0,lwt
190,https://rowsandall.com/rowers/workout/2452/emailcsv,https://rowsandall.com/rowers/workout/2452/emailtcx,0,0,2018-03-25 09:59:12+00:00,29000,01:50:13,Background processing test,imported through email,Europe/Zurich,water,80.0,lwt
191,https://rowsandall.com/rowers/workout/2632/emailcsv,https://rowsandall.com/rowers/workout/2632/emailtcx,0,0,2018-03-25 14:29:09+00:00,6664,00:46:07,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
192,https://rowsandall.com/rowers/workout/2453/emailcsv,https://rowsandall.com/rowers/workout/2453/emailtcx,0,0,2018-03-29 13:45:00+00:00,2000,07:25:00,test api,string,UTC,water,80.0,lwt
193,https://rowsandall.com/rowers/workout/2454/emailcsv,https://rowsandall.com/rowers/workout/2454/emailtcx,0,0,2018-04-02 11:02:55+00:00,3848,00:22:14.200000,RP3 curve,,Europe/Prague,rower,80.0,lwt
194,https://rowsandall.com/rowers/workout/2455/emailcsv,https://rowsandall.com/rowers/workout/2455/emailtcx,0,0,2018-04-02 11:04:18+00:00,3848,00:22:14.200000,,,Europe/Prague,rower,80.0,lwt
195,https://rowsandall.com/rowers/workout/2631/emailcsv,https://rowsandall.com/rowers/workout/2631/emailtcx,0,0,2018-04-03 14:34:01+00:00,2822,00:14:43.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
196,https://rowsandall.com/rowers/workout/2630/emailcsv,https://rowsandall.com/rowers/workout/2630/emailtcx,0,0,2018-04-03 14:50:01+00:00,7505,00:39:46.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
197,https://rowsandall.com/rowers/workout/2456/emailcsv,https://rowsandall.com/rowers/workout/2456/emailtcx,0,0,2018-04-03 15:50:52+00:00,7200,00:37:44,In Stroke,,Europe/Prague,water,80.0,lwt
198,https://rowsandall.com/rowers/workout/2457/emailcsv,https://rowsandall.com/rowers/workout/2457/emailtcx,0,0,2018-04-03 15:50:52+00:00,7200,00:37:44,In Stroke 2,,Europe/Prague,water,80.0,lwt
199,https://rowsandall.com/rowers/workout/2629/emailcsv,https://rowsandall.com/rowers/workout/2629/emailtcx,0,0,2018-04-04 18:30:27+00:00,27,00:00:03.200000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
200,https://rowsandall.com/rowers/workout/2628/emailcsv,https://rowsandall.com/rowers/workout/2628/emailtcx,0,0,2018-04-04 19:00:43+00:00,8309,00:48:07.400000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
201,https://rowsandall.com/rowers/workout/2458/emailcsv,https://rowsandall.com/rowers/workout/2458/emailtcx,0,0,2018-04-07 07:41:02+00:00,10568,01:06:08.800000,2x3km fail,,Europe/Prague,water,80.0,lwt
202,https://rowsandall.com/rowers/workout/2460/emailcsv,https://rowsandall.com/rowers/workout/2460/emailtcx,0,0,2018-04-07 07:41:02+00:00,10568,01:06:08.800000,Update,,Europe/Prague,water,80.0,lwt
203,https://rowsandall.com/rowers/workout/2627/emailcsv,https://rowsandall.com/rowers/workout/2627/emailtcx,0,0,2018-04-07 07:41:02+00:00,2243,00:12:20.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
204,https://rowsandall.com/rowers/workout/2626/emailcsv,https://rowsandall.com/rowers/workout/2626/emailtcx,0,0,2018-04-07 07:55:02+00:00,3167,00:16:59.800000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
205,https://rowsandall.com/rowers/workout/2625/emailcsv,https://rowsandall.com/rowers/workout/2625/emailtcx,0,0,2018-04-07 08:14:02+00:00,2977,00:14:58,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
206,https://rowsandall.com/rowers/workout/2623/emailcsv,https://rowsandall.com/rowers/workout/2623/emailtcx,0,0,2018-04-07 08:33:03+00:00,2180,00:14:07.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
207,https://rowsandall.com/rowers/workout/2622/emailcsv,https://rowsandall.com/rowers/workout/2622/emailtcx,0,0,2018-04-10 17:38:22+00:00,11703,00:48:59.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
208,https://rowsandall.com/rowers/workout/2621/emailcsv,https://rowsandall.com/rowers/workout/2621/emailtcx,0,0,2018-04-10 18:27:53+00:00,17284,01:11:55.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
209,https://rowsandall.com/rowers/workout/2620/emailcsv,https://rowsandall.com/rowers/workout/2620/emailtcx,0,0,2018-04-11 18:37:27+00:00,10122,01:15:44.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
210,https://rowsandall.com/rowers/workout/2619/emailcsv,https://rowsandall.com/rowers/workout/2619/emailtcx,0,0,2018-04-12 16:17:02+00:00,10408,00:53:45.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
211,https://rowsandall.com/rowers/workout/2618/emailcsv,https://rowsandall.com/rowers/workout/2618/emailtcx,0,0,2018-04-15 08:34:05+00:00,11129,01:03:38,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
212,https://rowsandall.com/rowers/workout/2617/emailcsv,https://rowsandall.com/rowers/workout/2617/emailtcx,0,0,2018-04-18 13:43:04+00:00,1942,00:10:55.300000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
213,https://rowsandall.com/rowers/workout/2616/emailcsv,https://rowsandall.com/rowers/workout/2616/emailtcx,0,0,2018-04-18 13:57:01+00:00,7979,00:36:10.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
214,https://rowsandall.com/rowers/workout/2615/emailcsv,https://rowsandall.com/rowers/workout/2615/emailtcx,0,0,2018-04-18 14:49:06+00:00,1512,00:08:27.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
215,https://rowsandall.com/rowers/workout/2614/emailcsv,https://rowsandall.com/rowers/workout/2614/emailtcx,0,0,2018-04-20 15:51:41+00:00,9748,01:06:50.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
216,https://rowsandall.com/rowers/workout/2613/emailcsv,https://rowsandall.com/rowers/workout/2613/emailtcx,0,0,2018-04-21 15:38:04+00:00,5254,00:27:02.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
217,https://rowsandall.com/rowers/workout/2612/emailcsv,https://rowsandall.com/rowers/workout/2612/emailtcx,0,0,2018-04-22 07:15:01+00:00,12282,01:08:28.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
218,https://rowsandall.com/rowers/workout/2471/emailcsv,https://rowsandall.com/rowers/workout/2471/emailtcx,0,0,2018-04-23 11:00:00+00:00,1017,00:03:55.200000,7x150min/1min,,America/New_York,water,80.0,lwt
219,https://rowsandall.com/rowers/workout/2472/emailcsv,https://rowsandall.com/rowers/workout/2472/emailtcx,0,0,2018-04-23 11:00:00+00:00,1017,00:03:55.200000,7x15min test 2,,America/New_York,water,80.0,lwt
220,https://rowsandall.com/rowers/workout/2473/emailcsv,https://rowsandall.com/rowers/workout/2473/emailtcx,0,0,2018-04-23 11:00:00+00:00,1017,00:03:55.200000,7x150min/1min,,America/New_York,water,80.0,lwt
221,https://rowsandall.com/rowers/workout/2474/emailcsv,https://rowsandall.com/rowers/workout/2474/emailtcx,0,0,2018-04-23 11:00:00+00:00,1017,00:03:55,test firmware,,America/New_York,water,80.0,lwt
222,https://rowsandall.com/rowers/workout/2478/emailcsv,https://rowsandall.com/rowers/workout/2478/emailtcx,0,0,2018-04-23 11:00:00+00:00,1017,00:03:55.200000,Firmware 2,,America/New_York,water,80.0,lwt
223,https://rowsandall.com/rowers/workout/2611/emailcsv,https://rowsandall.com/rowers/workout/2611/emailtcx,0,0,2018-04-23 17:46:25+00:00,13558,00:58:11.900000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
224,https://rowsandall.com/rowers/workout/2465/emailcsv,https://rowsandall.com/rowers/workout/2465/emailtcx,0,0,2018-04-23 20:42:00+00:00,8000,00:36:01.500000,Racice,,Europe/Prague,water,80.0,lwt
225,https://rowsandall.com/rowers/workout/2610/emailcsv,https://rowsandall.com/rowers/workout/2610/emailtcx,0,0,2018-04-24 12:12:03+00:00,2959,00:16:42.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
226,https://rowsandall.com/rowers/workout/2609/emailcsv,https://rowsandall.com/rowers/workout/2609/emailtcx,0,0,2018-04-24 12:32:00+00:00,7516,00:38:49.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
227,https://rowsandall.com/rowers/workout/2466/emailcsv,https://rowsandall.com/rowers/workout/2466/emailtcx,0,0,2018-04-24 13:35:30+00:00,9420,00:48:00,,,Europe/Prague,water,80.0,lwt
228,https://rowsandall.com/rowers/workout/2608/emailcsv,https://rowsandall.com/rowers/workout/2608/emailtcx,0,0,2018-04-25 17:50:26+00:00,10171,01:12:33.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
229,https://rowsandall.com/rowers/workout/2470/emailcsv,https://rowsandall.com/rowers/workout/2470/emailtcx,0,0,2018-04-25 22:59:01+00:00,4159,00:26:43.200000,SpeedCoach 7x150m,,America/New_York,water,80.0,lwt
230,https://rowsandall.com/rowers/workout/2607/emailcsv,https://rowsandall.com/rowers/workout/2607/emailtcx,0,0,2018-04-26 16:18:01+00:00,2016,00:12:30.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
231,https://rowsandall.com/rowers/workout/2606/emailcsv,https://rowsandall.com/rowers/workout/2606/emailtcx,0,0,2018-04-26 16:33:00+00:00,4605,00:22:35.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
232,https://rowsandall.com/rowers/workout/2605/emailcsv,https://rowsandall.com/rowers/workout/2605/emailtcx,0,0,2018-04-26 16:56:03+00:00,1301,00:07:07.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
233,https://rowsandall.com/rowers/workout/2604/emailcsv,https://rowsandall.com/rowers/workout/2604/emailtcx,0,0,2018-04-28 08:02:01+00:00,11924,01:18:20.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
234,https://rowsandall.com/rowers/workout/2469/emailcsv,https://rowsandall.com/rowers/workout/2469/emailtcx,0,0,2018-04-29 07:22:01+00:00,8040,00:50:06,Test P,,America/New_York,water,80.0,lwt
235,https://rowsandall.com/rowers/workout/2603/emailcsv,https://rowsandall.com/rowers/workout/2603/emailtcx,0,0,2018-04-29 07:22:01+00:00,8040,00:50:05.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
236,https://rowsandall.com/rowers/workout/2559/emailcsv,https://rowsandall.com/rowers/workout/2559/emailtcx,0,0,2018-05-03 16:02:08+00:00,10909,01:00:35,Intervals Tests (6),imported through email,Europe/Amsterdam,water,80.0,lwt
237,https://rowsandall.com/rowers/workout/2602/emailcsv,https://rowsandall.com/rowers/workout/2602/emailtcx,0,0,2018-05-04 05:47:04+00:00,3472,00:18:53.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
238,https://rowsandall.com/rowers/workout/2479/emailcsv,https://rowsandall.com/rowers/workout/2479/emailtcx,0,0,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Zip test,imported through email,Europe/Prague,water,80.0,lwt
239,https://rowsandall.com/rowers/workout/2481/emailcsv,https://rowsandall.com/rowers/workout/2481/emailtcx,0,0,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Zip test 2,imported through email,Europe/Prague,water,80.0,lwt
240,https://rowsandall.com/rowers/workout/2483/emailcsv,https://rowsandall.com/rowers/workout/2483/emailtcx,0,0,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Test Zip 3,imported through email,Europe/Prague,water,80.0,lwt
241,https://rowsandall.com/rowers/workout/2601/emailcsv,https://rowsandall.com/rowers/workout/2601/emailtcx,0,0,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
242,https://rowsandall.com/rowers/workout/2860/emailcsv,https://rowsandall.com/rowers/workout/2860/emailtcx,0,0,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Zip test,"imported through email
from speedcoach2v2.15 via rowsandall.com",Europe/Prague,water,80.0,hwt
243,https://rowsandall.com/rowers/workout/2600/emailcsv,https://rowsandall.com/rowers/workout/2600/emailtcx,0,0,2018-05-04 06:35:04+00:00,1009,00:06:44.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
244,https://rowsandall.com/rowers/workout/2599/emailcsv,https://rowsandall.com/rowers/workout/2599/emailtcx,0,0,2018-05-05 07:06:02+00:00,11180,01:01:01.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
245,https://rowsandall.com/rowers/workout/2598/emailcsv,https://rowsandall.com/rowers/workout/2598/emailtcx,0,0,2018-05-05 08:11:04+00:00,1152,00:06:56.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
246,https://rowsandall.com/rowers/workout/2597/emailcsv,https://rowsandall.com/rowers/workout/2597/emailtcx,0,0,2018-05-07 15:41:06+00:00,11019,01:00:40.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
247,https://rowsandall.com/rowers/workout/2490/emailcsv,https://rowsandall.com/rowers/workout/2490/emailtcx,0,0,2018-05-10 09:11:24+00:00,15263,01:39:34,Naarden goed,,Europe/Amsterdam,water,80.0,lwt
248,https://rowsandall.com/rowers/workout/2491/emailcsv,https://rowsandall.com/rowers/workout/2491/emailtcx,0,0,2018-05-10 09:11:24+00:00,7378,00:44:59,Naarden goed (1),,Europe/Amsterdam,water,80.0,lwt
249,https://rowsandall.com/rowers/workout/2492/emailcsv,https://rowsandall.com/rowers/workout/2492/emailtcx,0,0,2018-05-10 09:56:24+00:00,7876,00:54:33,Naarden goed (2),,Europe/Amsterdam,water,80.0,lwt
250,https://rowsandall.com/rowers/workout/2596/emailcsv,https://rowsandall.com/rowers/workout/2596/emailtcx,0,0,2018-05-10 16:15:02+00:00,11983,01:01:26,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
251,https://rowsandall.com/rowers/workout/2485/emailcsv,https://rowsandall.com/rowers/workout/2485/emailtcx,0,0,2018-05-10 16:55:01+00:00,8000,00:36:01.500000,6k,,Europe/Prague,water,80.0,lwt
252,https://rowsandall.com/rowers/workout/2486/emailcsv,https://rowsandall.com/rowers/workout/2486/emailtcx,0,0,2018-05-10 16:55:01+00:00,8000,00:36:01.500000,Racice 2,,Europe/Prague,water,80.0,lwt
253,https://rowsandall.com/rowers/workout/2488/emailcsv,https://rowsandall.com/rowers/workout/2488/emailtcx,0,0,2018-05-11 07:02:52+00:00,15364,01:22:34,Naarden 1,,Europe/Amsterdam,water,80.0,lwt
254,https://rowsandall.com/rowers/workout/2504/emailcsv,https://rowsandall.com/rowers/workout/2504/emailtcx,0,0,2018-05-12 10:01:00+00:00,16814,01:42:53,DC,"Summary for your location at 2018-05-12T12:52:00Z: Temperature 21.1C/69.9F. Wind: 3.0 m/s (6.0 kt). Wind Bearing: 30.0 degrees
Summary for your location at 2018-05-12T10:52:00Z: Temperature 19.4C/66.9F. Wind: 3.0 m/s (6.0 kt). Wind Bearing: 40.0 degrees
Summary for your location at 2018-05-12T11:52:00Z: Temperature 20.6C/69.0F. Wind: 3.6 m/s (7.0 kt). Wind Bearing: 20.0 degrees
Summary for your location at 2018-05-12T10:52:26+00:00: Clear. Temperature 64.52F/18.0C. Wind: 0.96 m/s. Wind Bearing: 29 degrees",America/New_York,water,80.0,lwt
255,https://rowsandall.com/rowers/workout/2931/emailcsv,https://rowsandall.com/rowers/workout/2931/emailtcx,0,0,2018-05-12 14:22:12+00:00,6510,00:46:56,Test P,,Europe/Bratislava,water,80.0,hwt
256,https://rowsandall.com/rowers/workout/2513/emailcsv,https://rowsandall.com/rowers/workout/2513/emailtcx,0,0,2018-05-13 07:57:02+00:00,4605,00:35:11.700000,Quad,,Europe/Bratislava,water,80.0,lwt
257,https://rowsandall.com/rowers/workout/2595/emailcsv,https://rowsandall.com/rowers/workout/2595/emailtcx,0,0,2018-05-13 07:57:02+00:00,4605,00:35:11.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
258,https://rowsandall.com/rowers/workout/2502/emailcsv,https://rowsandall.com/rowers/workout/2502/emailtcx,0,0,2018-05-13 09:22:49+00:00,973,00:03:53.900000,Completed a workout (generic) 0.6 mi on 05/13/18,,Europe/Bratislava,water,80.0,lwt
259,https://rowsandall.com/rowers/workout/2503/emailcsv,https://rowsandall.com/rowers/workout/2503/emailtcx,0,0,2018-05-13 09:22:49+00:00,973,00:03:53.900000,Completed a workout (generic) 0.6 mi on 05/13/18,,Europe/Bratislava,water,80.0,lwt
260,https://rowsandall.com/rowers/workout/2594/emailcsv,https://rowsandall.com/rowers/workout/2594/emailtcx,0,0,2018-05-13 16:50:32+00:00,2723,00:27:17.200000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
261,https://rowsandall.com/rowers/workout/2593/emailcsv,https://rowsandall.com/rowers/workout/2593/emailtcx,0,0,2018-05-13 16:51:01+00:00,5929,00:43:44.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
262,https://rowsandall.com/rowers/workout/2855/emailcsv,https://rowsandall.com/rowers/workout/2855/emailtcx,0,0,2018-05-14 13:53:04+00:00,6091,00:25:00.200000,Hradiste,"
from csv via rowsandall.com",Europe/Prague,water,80.0,lwt
263,https://rowsandall.com/rowers/workout/2963/emailcsv,https://rowsandall.com/rowers/workout/2963/emailtcx,0,0,2018-05-14 13:53:04+00:00,6091,00:25:00.200000,Hradiste,"
from csv via rowsandall.com",Europe/Prague,water,80.0,hwt
264,https://rowsandall.com/rowers/workout/2493/emailcsv,https://rowsandall.com/rowers/workout/2493/emailtcx,0,0,2018-05-15 10:35:00+00:00,10526,00:44:01.700000,Turin,,Europe/Rome,water,80.0,lwt
265,https://rowsandall.com/rowers/workout/2489/emailcsv,https://rowsandall.com/rowers/workout/2489/emailtcx,0,0,2018-05-17 17:40:00+00:00,15364,01:22:34,Naarden 2,,Europe/Amsterdam,water,80.0,lwt
266,https://rowsandall.com/rowers/workout/2464/emailcsv,https://rowsandall.com/rowers/workout/2464/emailtcx,0,0,2018-05-18 13:02:00+00:00,6091,00:25:00.200000,Hradiste,"Failed to download METAR data
Failed to download METAR data
Failed to download METAR data
Failed to download METAR data
Failed to download METAR data",Europe/Prague,water,80.0,lwt
267,https://rowsandall.com/rowers/workout/2505/emailcsv,https://rowsandall.com/rowers/workout/2505/emailtcx,0,0,2018-05-19 11:55:34+00:00,14274,01:12:33.600000,Roos,,America/New_York,water,80.0,lwt
268,https://rowsandall.com/rowers/workout/2506/emailcsv,https://rowsandall.com/rowers/workout/2506/emailtcx,0,0,2018-05-19 11:55:34+00:00,7384,00:33:59.800000,Roos (1),,America/New_York,water,80.0,lwt
269,https://rowsandall.com/rowers/workout/2507/emailcsv,https://rowsandall.com/rowers/workout/2507/emailtcx,0,0,2018-05-19 12:29:34+00:00,6885,00:38:32.200000,Roos (2),,America/New_York,water,80.0,lwt
270,https://rowsandall.com/rowers/workout/2511/emailcsv,https://rowsandall.com/rowers/workout/2511/emailtcx,0,0,2018-05-27 10:17:01+00:00,10663,00:59:29.700000,Test P,,Europe/Prague,water,80.0,lwt
271,https://rowsandall.com/rowers/workout/2518/emailcsv,https://rowsandall.com/rowers/workout/2518/emailtcx,0,0,2018-05-27 10:17:01+00:00,10663,00:59:29.700000,dubbel,,Europe/Prague,water,80.0,lwt
272,https://rowsandall.com/rowers/workout/2592/emailcsv,https://rowsandall.com/rowers/workout/2592/emailtcx,0,0,2018-05-27 10:17:01+00:00,10663,00:59:29.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
273,https://rowsandall.com/rowers/workout/2591/emailcsv,https://rowsandall.com/rowers/workout/2591/emailtcx,0,0,2018-05-28 15:11:01+00:00,9642,00:56:16.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
274,https://rowsandall.com/rowers/workout/2514/emailcsv,https://rowsandall.com/rowers/workout/2514/emailtcx,0,0,2018-05-30 18:05:25+00:00,11237,01:04:45.500000,Eight,imported through email,Europe/Prague,water,80.0,lwt
275,https://rowsandall.com/rowers/workout/2516/emailcsv,https://rowsandall.com/rowers/workout/2516/emailtcx,0,0,2018-05-30 18:05:25+00:00,11237,01:04:45.500000,Twee Zonder,imported through email,Europe/Prague,water,80.0,lwt
276,https://rowsandall.com/rowers/workout/2590/emailcsv,https://rowsandall.com/rowers/workout/2590/emailtcx,0,0,2018-05-30 18:05:25+00:00,11237,01:04:45.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
277,https://rowsandall.com/rowers/workout/2512/emailcsv,https://rowsandall.com/rowers/workout/2512/emailtcx,0,0,2018-05-31 16:30:07+00:00,8837,00:47:42.500000,Test,,Europe/Prague,water,80.0,lwt
278,https://rowsandall.com/rowers/workout/2589/emailcsv,https://rowsandall.com/rowers/workout/2589/emailtcx,0,0,2018-05-31 16:30:07+00:00,8837,00:47:42.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
279,https://rowsandall.com/rowers/workout/2508/emailcsv,https://rowsandall.com/rowers/workout/2508/emailtcx,0,0,2018-06-01 07:57:02+00:00,4605,00:35:11.700000,Piestany,,Europe/Bratislava,water,80.0,lwt
280,https://rowsandall.com/rowers/workout/2510/emailcsv,https://rowsandall.com/rowers/workout/2510/emailtcx,0,0,2018-06-01 08:02:02+00:00,3975,00:30:08.700000,Piestany (2),,Europe/Bratislava,water,80.0,lwt
281,https://rowsandall.com/rowers/workout/2509/emailcsv,https://rowsandall.com/rowers/workout/2509/emailtcx,0,0,2018-06-01 11:30:07+00:00,8837,00:47:42.500000,Test,,Europe/Prague,water,80.0,lwt
282,https://rowsandall.com/rowers/workout/2569/emailcsv,https://rowsandall.com/rowers/workout/2569/emailtcx,0,0,2018-06-01 15:00:00+00:00,11237,01:04:45.500000,Acht Intervals,,Europe/Prague,water,80.0,lwt
283,https://rowsandall.com/rowers/workout/2588/emailcsv,https://rowsandall.com/rowers/workout/2588/emailtcx,0,0,2018-06-02 17:00:07+00:00,12511,01:07:58,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
284,https://rowsandall.com/rowers/workout/2587/emailcsv,https://rowsandall.com/rowers/workout/2587/emailtcx,0,0,2018-06-03 07:57:02+00:00,10830,01:04:35.900000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
285,https://rowsandall.com/rowers/workout/2586/emailcsv,https://rowsandall.com/rowers/workout/2586/emailtcx,0,0,2018-06-03 15:50:25+00:00,6125,00:48:38.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
286,https://rowsandall.com/rowers/workout/2535/emailcsv,https://rowsandall.com/rowers/workout/2535/emailtcx,0,0,2018-06-05 13:07:02+00:00,0,00:05:01,Test - Delete,,Europe/Prague,rower,80.0,lwt
287,https://rowsandall.com/rowers/workout/2536/emailcsv,https://rowsandall.com/rowers/workout/2536/emailtcx,0,0,2018-06-05 13:07:02+00:00,0,00:05:01,Test Sync - Delete,"
from tcx via rowsandall.com",Europe/Prague,rower,80.0,lwt
288,https://rowsandall.com/rowers/workout/2537/emailcsv,https://rowsandall.com/rowers/workout/2537/emailtcx,0,0,2018-06-05 13:07:02+00:00,0,00:05:01,Test P,"
from tcx via rowsandall.com",Europe/Prague,rower,80.0,lwt
289,https://rowsandall.com/rowers/workout/2538/emailcsv,https://rowsandall.com/rowers/workout/2538/emailtcx,0,0,2018-06-05 13:07:02+00:00,0,00:05:01,Test P,imported through email,Europe/Prague,rower,80.0,lwt
290,https://rowsandall.com/rowers/workout/2539/emailcsv,https://rowsandall.com/rowers/workout/2539/emailtcx,0,0,2018-06-05 13:07:02+00:00,0,00:05:01,Test P,"imported through email
from tcx via rowsandall.com",Europe/Prague,rower,80.0,lwt
291,https://rowsandall.com/rowers/workout/2540/emailcsv,https://rowsandall.com/rowers/workout/2540/emailtcx,0,0,2018-06-05 13:07:02+00:00,0,00:05:01,Workout from Background Queue,imported through email,Europe/Prague,rower,80.0,lwt
292,https://rowsandall.com/rowers/workout/2624/emailcsv,https://rowsandall.com/rowers/workout/2624/emailtcx,0,0,2018-06-05 13:51:01.900000+00:00,12744,01:08:22.100000,imported through ema,imported through email,Europe/Prague,water,80.0,lwt
293,https://rowsandall.com/rowers/workout/2534/emailcsv,https://rowsandall.com/rowers/workout/2534/emailtcx,0,0,2018-06-05 14:05:02+00:00,0,00:01:33,Import from Polar Flow,imported through email,Europe/Prague,rower,80.0,lwt
294,https://rowsandall.com/rowers/workout/2519/emailcsv,https://rowsandall.com/rowers/workout/2519/emailtcx,0,0,2018-06-05 14:09:57+00:00,0,00:03:38,TCX from Polar API,,Europe/Prague,water,80.0,lwt
295,https://rowsandall.com/rowers/workout/2546/emailcsv,https://rowsandall.com/rowers/workout/2546/emailtcx,0,0,2018-06-05 15:51:01+00:00,12744,01:08:22.200000,8x glad,,Europe/Prague,water,80.0,lwt
296,https://rowsandall.com/rowers/workout/2547/emailcsv,https://rowsandall.com/rowers/workout/2547/emailtcx,0,0,2018-06-05 15:51:01+00:00,12746,01:08:22.200000,1x glad,,Europe/Prague,c-boat,80.0,lwt
297,https://rowsandall.com/rowers/workout/2548/emailcsv,https://rowsandall.com/rowers/workout/2548/emailtcx,0,68,2018-06-05 15:51:01+00:00,12744,01:08:22.200000,1x glad,,Europe/Prague,water,80.0,lwt
298,https://rowsandall.com/rowers/workout/2549/emailcsv,https://rowsandall.com/rowers/workout/2549/emailtcx,0,0,2018-06-05 15:51:01+00:00,12746,01:08:22.200000,test,,Europe/Prague,water,80.0,lwt
299,https://rowsandall.com/rowers/workout/2550/emailcsv,https://rowsandall.com/rowers/workout/2550/emailtcx,0,0,2018-06-05 15:51:01+00:00,12746,01:08:22.200000,test tcx,,Europe/Prague,water,80.0,lwt
300,https://rowsandall.com/rowers/workout/2552/emailcsv,https://rowsandall.com/rowers/workout/2552/emailtcx,0,0,2018-06-05 15:51:01+00:00,6522,00:33:00,8x glad (1),,Europe/Prague,water,80.0,lwt
301,https://rowsandall.com/rowers/workout/2585/emailcsv,https://rowsandall.com/rowers/workout/2585/emailtcx,0,0,2018-06-05 15:51:01+00:00,12744,01:08:22.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
302,https://rowsandall.com/rowers/workout/2553/emailcsv,https://rowsandall.com/rowers/workout/2553/emailtcx,0,0,2018-06-05 16:24:01+00:00,6213,00:35:19.500000,8x glad (2),,Europe/Prague,water,80.0,lwt
303,https://rowsandall.com/rowers/workout/2584/emailcsv,https://rowsandall.com/rowers/workout/2584/emailtcx,0,0,2018-06-06 17:40:24+00:00,5273,00:42:59,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
304,https://rowsandall.com/rowers/workout/2545/emailcsv,https://rowsandall.com/rowers/workout/2545/emailtcx,0,0,2018-06-08 07:25:33+00:00,1994,00:01:59.400000,Test,,Europe/Prague,rower,80.0,hwt
305,https://rowsandall.com/rowers/workout/2560/emailcsv,https://rowsandall.com/rowers/workout/2560/emailtcx,0,0,2018-06-11 15:21:01+00:00,10369,00:56:21.400000,Intervals Tests (7),imported through email,Europe/Prague,water,80.0,lwt
306,https://rowsandall.com/rowers/workout/2568/emailcsv,https://rowsandall.com/rowers/workout/2568/emailtcx,0,11,2018-06-11 15:21:01+00:00,10369,00:56:21.400000,3/2/1,"
5x5min/5min
5x5min/5min",Europe/Prague,water,80.0,lwt
307,https://rowsandall.com/rowers/workout/2583/emailcsv,https://rowsandall.com/rowers/workout/2583/emailtcx,0,0,2018-06-11 15:21:01+00:00,10369,00:56:21.400000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
308,https://rowsandall.com/rowers/workout/2554/emailcsv,https://rowsandall.com/rowers/workout/2554/emailtcx,0,0,2018-06-13 14:18:19+00:00,16543,01:30:01.300000,Intervals Tests,,America/New_York,rower,80.0,lwt
309,https://rowsandall.com/rowers/workout/2555/emailcsv,https://rowsandall.com/rowers/workout/2555/emailtcx,0,0,2018-06-13 14:18:35+00:00,12205,01:03:29.500000,Intervals Tests (2),,America/New_York,rower,80.0,lwt
310,https://rowsandall.com/rowers/workout/2556/emailcsv,https://rowsandall.com/rowers/workout/2556/emailtcx,0,0,2018-06-13 14:18:48+00:00,9016,00:48:28.100000,Intervals Tests (3),"
9x1km",America/New_York,rower,80.0,lwt
311,https://rowsandall.com/rowers/workout/2557/emailcsv,https://rowsandall.com/rowers/workout/2557/emailtcx,0,0,2018-06-13 14:19:01+00:00,4789,00:22:05,Intervals Tests (4),,America/New_York,rower,80.0,lwt
312,https://rowsandall.com/rowers/workout/2558/emailcsv,https://rowsandall.com/rowers/workout/2558/emailtcx,0,0,2018-06-13 14:19:19+00:00,0,00:22:54,Intervals Tests (5),,Europe/Prague,rower,80.0,lwt
313,https://rowsandall.com/rowers/workout/2582/emailcsv,https://rowsandall.com/rowers/workout/2582/emailtcx,0,0,2018-06-13 16:11:02+00:00,4191,00:23:36.400000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
314,https://rowsandall.com/rowers/workout/2581/emailcsv,https://rowsandall.com/rowers/workout/2581/emailtcx,0,0,2018-06-15 08:05:04+00:00,7301,00:39:44.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
315,https://rowsandall.com/rowers/workout/2580/emailcsv,https://rowsandall.com/rowers/workout/2580/emailtcx,0,0,2018-06-16 08:04:00+00:00,5182,00:40:48.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
316,https://rowsandall.com/rowers/workout/2579/emailcsv,https://rowsandall.com/rowers/workout/2579/emailtcx,0,0,2018-06-16 13:17:06+00:00,8196,00:52:10.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
317,https://rowsandall.com/rowers/workout/2950/emailcsv,https://rowsandall.com/rowers/workout/2950/emailtcx,0,0,2018-06-17 10:23:24+00:00,6004,01:00:54,Lunch Run,,Europe/Vienna,water,80.0,hwt
318,https://rowsandall.com/rowers/workout/2954/emailcsv,https://rowsandall.com/rowers/workout/2954/emailtcx,0,0,2018-06-17 10:23:24+00:00,6004,01:00:54,Lunch Run,,Europe/Vienna,water,80.0,hwt
319,https://rowsandall.com/rowers/workout/3035/emailcsv,https://rowsandall.com/rowers/workout/3035/emailtcx,0,17,2018-06-17 10:23:24+00:00,6004,01:00:54,Lunch Run, ,Europe/Vienna,other,80.0,hwt
320,https://rowsandall.com/rowers/workout/2578/emailcsv,https://rowsandall.com/rowers/workout/2578/emailtcx,0,0,2018-06-18 16:05:05+00:00,10313,00:55:54.900000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
321,https://rowsandall.com/rowers/workout/2948/emailcsv,https://rowsandall.com/rowers/workout/2948/emailtcx,0,0,2018-06-18 16:05:05+00:00,10313,00:55:54,Steady,,Europe/Prague,water,80.0,hwt
322,https://rowsandall.com/rowers/workout/2952/emailcsv,https://rowsandall.com/rowers/workout/2952/emailtcx,0,0,2018-06-18 16:05:05+00:00,10313,00:55:54,Steady,,Europe/Prague,water,80.0,hwt
323,https://rowsandall.com/rowers/workout/2573/emailcsv,https://rowsandall.com/rowers/workout/2573/emailtcx,0,0,2018-06-19 05:57:02+00:00,10437,00:56:06.900000,Pink,,Europe/Prague,water,80.0,lwt
324,https://rowsandall.com/rowers/workout/2577/emailcsv,https://rowsandall.com/rowers/workout/2577/emailtcx,0,0,2018-06-19 05:57:02+00:00,10437,00:56:06.900000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
325,https://rowsandall.com/rowers/workout/2946/emailcsv,https://rowsandall.com/rowers/workout/2946/emailtcx,0,0,2018-06-19 05:57:04+00:00,10437,00:56:04,3x6min,,Europe/Prague,water,80.0,hwt
326,https://rowsandall.com/rowers/workout/2570/emailcsv,https://rowsandall.com/rowers/workout/2570/emailtcx,0,0,2018-06-19 15:11:14.220000+00:00,7538,00:56:14.600000,Test,,Europe/Vienna,water,80.0,lwt
327,https://rowsandall.com/rowers/workout/2571/emailcsv,https://rowsandall.com/rowers/workout/2571/emailtcx,0,0,2018-06-20 18:24:08+00:00,7538,00:56:14.500000,Ritmo,,Europe/Vienna,water,80.0,lwt
328,https://rowsandall.com/rowers/workout/2858/emailcsv,https://rowsandall.com/rowers/workout/2858/emailtcx,0,0,2018-06-22 04:33:02.500000+00:00,3344,00:16:55.700000,imported through ema,imported through email,Europe/Prague,water,80.0,hwt
329,https://rowsandall.com/rowers/workout/2576/emailcsv,https://rowsandall.com/rowers/workout/2576/emailtcx,0,0,2018-06-22 05:41:04+00:00,9298,00:50:44,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
330,https://rowsandall.com/rowers/workout/2944/emailcsv,https://rowsandall.com/rowers/workout/2944/emailtcx,0,0,2018-06-22 05:41:04+00:00,9298,00:50:44,Steady,,Europe/Prague,water,80.0,hwt
331,https://rowsandall.com/rowers/workout/2575/emailcsv,https://rowsandall.com/rowers/workout/2575/emailtcx,0,0,2018-06-22 06:33:01+00:00,3344,00:16:55.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
332,https://rowsandall.com/rowers/workout/2942/emailcsv,https://rowsandall.com/rowers/workout/2942/emailtcx,27,11,2018-06-22 06:33:02+00:00,3344,00:16:54,Steady (2),,Europe/Prague,water,80.0,hwt
333,https://rowsandall.com/rowers/workout/2940/emailcsv,https://rowsandall.com/rowers/workout/2940/emailtcx,0,0,2018-06-22 10:45:04+00:00,7540,00:56:14,test delete,,Europe/Vienna,water,80.0,hwt
334,https://rowsandall.com/rowers/workout/2725/emailcsv,https://rowsandall.com/rowers/workout/2725/emailtcx,0,0,2018-06-22 12:17:56+00:00,15642,01:15:00,Mike,"
3x20min/5min",Europe/Prague,water,80.0,lwt
335,https://rowsandall.com/rowers/workout/2726/emailcsv,https://rowsandall.com/rowers/workout/2726/emailtcx,0,0,2018-06-22 12:17:56+00:00,15642,01:15:00,Mike test,,Europe/Prague,water,80.0,lwt
336,https://rowsandall.com/rowers/workout/2848/emailcsv,https://rowsandall.com/rowers/workout/2848/emailtcx,0,0,2018-06-24 05:34:07+00:00,10194,00:57:48.900000,Imported,,Europe/Prague,water,80.0,lwt
337,https://rowsandall.com/rowers/workout/2849/emailcsv,https://rowsandall.com/rowers/workout/2849/emailtcx,0,0,2018-06-24 05:34:07.200000+00:00,10194,00:57:48.900000,Imported,,Europe/Prague,water,80.0,lwt
338,https://rowsandall.com/rowers/workout/2957/emailcsv,https://rowsandall.com/rowers/workout/2957/emailtcx,0,0,2018-06-24 05:34:07.200000+00:00,10194,00:57:48.900000,Imported,,Europe/Prague,water,80.0,hwt
339,https://rowsandall.com/rowers/workout/2938/emailcsv,https://rowsandall.com/rowers/workout/2938/emailtcx,0,0,2018-06-24 07:34:07+00:00,10194,00:57:43,Double,,Europe/Prague,water,80.0,hwt
340,https://rowsandall.com/rowers/workout/3059/emailcsv,https://rowsandall.com/rowers/workout/3059/emailtcx,0,0,2018-06-26 15:06:01+00:00,10393,01:00:55.900000,C2 Import Workout from 2018-06-26 15:06:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
341,https://rowsandall.com/rowers/workout/2936/emailcsv,https://rowsandall.com/rowers/workout/2936/emailtcx,42,30,2018-06-26 15:06:04+00:00,5651,00:31:24,Sprintervals,,Europe/Prague,water,80.0,hwt
342,https://rowsandall.com/rowers/workout/2934/emailcsv,https://rowsandall.com/rowers/workout/2934/emailtcx,0,0,2018-06-26 15:38:08+00:00,1056,00:05:12,Sprintervals (2),,Europe/Brussels,water,80.0,hwt
343,https://rowsandall.com/rowers/workout/2932/emailcsv,https://rowsandall.com/rowers/workout/2932/emailtcx,0,0,2018-06-26 15:44:06+00:00,3684,00:22:50,Sprintervals (3),,Europe/Prague,water,80.0,hwt
344,https://rowsandall.com/rowers/workout/2959/emailcsv,https://rowsandall.com/rowers/workout/2959/emailtcx,160,38,2018-06-30 05:31:02.200000+00:00,13878,01:21:16.600000,,"
from speedcoach2v2.15 via rowsandall.com",Europe/Prague,water,80.0,hwt
345,https://rowsandall.com/rowers/workout/2958/emailcsv,https://rowsandall.com/rowers/workout/2958/emailtcx,0,0,2018-06-30 07:31:01+00:00,13878,01:21:16.600000,C2 Import Workout from 2018-06-30 07:31:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
346,https://rowsandall.com/rowers/workout/3030/emailcsv,https://rowsandall.com/rowers/workout/3030/emailtcx,80,6031,2018-07-01 11:57:30+00:00,12879,00:57:00,Ride to pub, ,Europe/Prague,other,80.0,hwt
347,https://rowsandall.com/rowers/workout/3031/emailcsv,https://rowsandall.com/rowers/workout/3031/emailtcx,0,0,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test P,,Europe/Prague,water,80.0,hwt
348,https://rowsandall.com/rowers/workout/3058/emailcsv,https://rowsandall.com/rowers/workout/3058/emailtcx,0,0,2018-07-02 16:21:01+00:00,2858,00:15:40.600000,C2 Import Workout from 2018-07-02 16:21:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
349,https://rowsandall.com/rowers/workout/3063/emailcsv,https://rowsandall.com/rowers/workout/3063/emailtcx,120,79,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test Strava Export,,Europe/Prague,water,80.0,hwt
350,https://rowsandall.com/rowers/workout/3064/emailcsv,https://rowsandall.com/rowers/workout/3064/emailtcx,120,79,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test Strava Export,,Europe/Prague,water,80.0,hwt
351,https://rowsandall.com/rowers/workout/3065/emailcsv,https://rowsandall.com/rowers/workout/3065/emailtcx,0,0,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test Strava Export,,Europe/Prague,water,80.0,hwt
352,https://rowsandall.com/rowers/workout/3066/emailcsv,https://rowsandall.com/rowers/workout/3066/emailtcx,120,79,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test Strava Export,,Europe/Prague,water,80.0,hwt
353,https://rowsandall.com/rowers/workout/3068/emailcsv,https://rowsandall.com/rowers/workout/3068/emailtcx,0,0,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Should be exported To Strava,,Europe/Prague,water,80.0,hwt
354,https://rowsandall.com/rowers/workout/3070/emailcsv,https://rowsandall.com/rowers/workout/3070/emailtcx,120,79,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Should Not Be Exported To Strava,,Europe/Prague,water,80.0,hwt
355,https://rowsandall.com/rowers/workout/3057/emailcsv,https://rowsandall.com/rowers/workout/3057/emailtcx,0,0,2018-07-02 16:40:02+00:00,2001,00:08:29,C2 Import Workout from 2018-07-02 16:40:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
356,https://rowsandall.com/rowers/workout/3056/emailcsv,https://rowsandall.com/rowers/workout/3056/emailtcx,0,0,2018-07-02 16:50:02+00:00,2136,00:09:16.200000,C2 Import Workout from 2018-07-02 16:50:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
357,https://rowsandall.com/rowers/workout/3055/emailcsv,https://rowsandall.com/rowers/workout/3055/emailtcx,0,0,2018-07-02 17:01:02+00:00,2058,00:08:38.800000,C2 Import Workout from 2018-07-02 17:01:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
358,https://rowsandall.com/rowers/workout/3008/emailcsv,https://rowsandall.com/rowers/workout/3008/emailtcx,22,0,2018-07-02 17:01:05+00:00,2058,00:08:35,2ks with focus (4),,Europe/Prague,water,80.0,hwt
359,https://rowsandall.com/rowers/workout/3028/emailcsv,https://rowsandall.com/rowers/workout/3028/emailtcx,22,0,2018-07-02 17:01:05+00:00,2058,00:08:35,2ks with focus (4),,Europe/Prague,water,80.0,hwt
360,https://rowsandall.com/rowers/workout/3054/emailcsv,https://rowsandall.com/rowers/workout/3054/emailtcx,0,0,2018-07-02 17:11:02+00:00,2149,00:09:47.300000,C2 Import Workout from 2018-07-02 17:11:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
361,https://rowsandall.com/rowers/workout/3006/emailcsv,https://rowsandall.com/rowers/workout/3006/emailtcx,27,0,2018-07-02 17:11:05+00:00,2149,00:09:44,2ks with focus (5),,Europe/Prague,water,80.0,hwt
362,https://rowsandall.com/rowers/workout/3026/emailcsv,https://rowsandall.com/rowers/workout/3026/emailtcx,27,0,2018-07-02 17:11:05+00:00,2149,00:09:44,2ks with focus (5),,Europe/Prague,water,80.0,hwt
363,https://rowsandall.com/rowers/workout/3053/emailcsv,https://rowsandall.com/rowers/workout/3053/emailtcx,0,0,2018-07-02 17:24:02+00:00,1328,00:06:15.500000,C2 Import Workout from 2018-07-02 17:24:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
364,https://rowsandall.com/rowers/workout/3004/emailcsv,https://rowsandall.com/rowers/workout/3004/emailtcx,10,0,2018-07-02 17:24:05+00:00,1328,00:06:12,2ks with focus (6),,Europe/Prague,water,80.0,hwt
365,https://rowsandall.com/rowers/workout/3024/emailcsv,https://rowsandall.com/rowers/workout/3024/emailtcx,10,0,2018-07-02 17:24:05+00:00,1328,00:06:12,2ks with focus (6),,Europe/Prague,water,80.0,hwt
366,https://rowsandall.com/rowers/workout/2964/emailcsv,https://rowsandall.com/rowers/workout/2964/emailtcx,0,0,2018-07-04 15:06:42+00:00,7350,00:31:07,Test,,Europe/Prague,rower,80.0,hwt
367,https://rowsandall.com/rowers/workout/2965/emailcsv,https://rowsandall.com/rowers/workout/2965/emailtcx,0,103,2018-07-04 16:19:01+00:00,10471,01:00:27.200000,Test TRIMP,,Europe/Prague,water,80.0,hwt
368,https://rowsandall.com/rowers/workout/2966/emailcsv,https://rowsandall.com/rowers/workout/2966/emailtcx,0,98,2018-07-04 16:19:01+00:00,10471,01:00:27.200000,Test Rscore,,Europe/Prague,water,80.0,hwt
369,https://rowsandall.com/rowers/workout/3052/emailcsv,https://rowsandall.com/rowers/workout/3052/emailtcx,0,0,2018-07-04 16:19:01+00:00,10471,01:00:27.100000,C2 Import Workout from 2018-07-04 16:19:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
370,https://rowsandall.com/rowers/workout/2967/emailcsv,https://rowsandall.com/rowers/workout/2967/emailtcx,0,96,2018-07-04 16:19:02+00:00,10471,01:00:26,Startjes,"
from csv via rowsandall.com",Europe/Prague,water,80.0,hwt
371,https://rowsandall.com/rowers/workout/3002/emailcsv,https://rowsandall.com/rowers/workout/3002/emailtcx,0,98,2018-07-04 16:19:02+00:00,10471,01:00:26,Startjes,,Europe/Prague,water,80.0,hwt
372,https://rowsandall.com/rowers/workout/3022/emailcsv,https://rowsandall.com/rowers/workout/3022/emailtcx,0,98,2018-07-04 16:19:02+00:00,10471,01:00:26,Startjes,,Europe/Prague,water,80.0,hwt
373,https://rowsandall.com/rowers/workout/3051/emailcsv,https://rowsandall.com/rowers/workout/3051/emailtcx,0,0,2018-07-07 07:43:02+00:00,2874,00:16:39.700000,C2 Import Workout from 2018-07-07 07:43:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
374,https://rowsandall.com/rowers/workout/3000/emailcsv,https://rowsandall.com/rowers/workout/3000/emailtcx,17,0,2018-07-07 07:43:03+00:00,2874,00:16:38,2x race prep,,Europe/Prague,water,80.0,hwt
375,https://rowsandall.com/rowers/workout/3020/emailcsv,https://rowsandall.com/rowers/workout/3020/emailtcx,17,0,2018-07-07 07:43:03+00:00,2874,00:16:38,2x race prep,,Europe/Prague,water,80.0,hwt
376,https://rowsandall.com/rowers/workout/3050/emailcsv,https://rowsandall.com/rowers/workout/3050/emailtcx,0,0,2018-07-07 08:01:01+00:00,743,00:02:45.500000,C2 Import Workout from 2018-07-07 08:01:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
377,https://rowsandall.com/rowers/workout/2998/emailcsv,https://rowsandall.com/rowers/workout/2998/emailtcx,2,0,2018-07-07 08:01:02+00:00,743,00:02:44,2x race prep (2),,Europe/Prague,bike,80.0,hwt
378,https://rowsandall.com/rowers/workout/3018/emailcsv,https://rowsandall.com/rowers/workout/3018/emailtcx,2,0,2018-07-07 08:01:02+00:00,743,00:02:44,2x race prep (2),,Europe/Prague,water,80.0,hwt
379,https://rowsandall.com/rowers/workout/3049/emailcsv,https://rowsandall.com/rowers/workout/3049/emailtcx,0,0,2018-07-07 08:05:03+00:00,2827,00:15:21.800000,C2 Import Workout from 2018-07-07 08:05:03+00:00,imported from Concept2 log,UTC,water,80.0,lwt
380,https://rowsandall.com/rowers/workout/2996/emailcsv,https://rowsandall.com/rowers/workout/2996/emailtcx,21,0,2018-07-07 08:05:06+00:00,2827,00:15:18,2x race prep (3),,Europe/Prague,water,80.0,hwt
381,https://rowsandall.com/rowers/workout/3016/emailcsv,https://rowsandall.com/rowers/workout/3016/emailtcx,21,0,2018-07-07 08:05:06+00:00,2827,00:15:18,2x race prep (3),,Europe/Prague,water,80.0,hwt
382,https://rowsandall.com/rowers/workout/3048/emailcsv,https://rowsandall.com/rowers/workout/3048/emailtcx,0,0,2018-07-07 08:22:01+00:00,749,00:03:12.500000,C2 Import Workout from 2018-07-07 08:22:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
383,https://rowsandall.com/rowers/workout/2994/emailcsv,https://rowsandall.com/rowers/workout/2994/emailtcx,4,0,2018-07-07 08:22:02+00:00,749,00:03:11,2x race prep (4),,Europe/Prague,water,80.0,hwt
384,https://rowsandall.com/rowers/workout/3014/emailcsv,https://rowsandall.com/rowers/workout/3014/emailtcx,4,0,2018-07-07 08:22:02+00:00,749,00:03:11,2x race prep (4),,Europe/Prague,water,80.0,hwt
385,https://rowsandall.com/rowers/workout/3047/emailcsv,https://rowsandall.com/rowers/workout/3047/emailtcx,0,0,2018-07-07 08:27:03+00:00,2058,00:11:55.800000,C2 Import Workout from 2018-07-07 08:27:03+00:00,imported from Concept2 log,UTC,water,80.0,lwt
386,https://rowsandall.com/rowers/workout/2992/emailcsv,https://rowsandall.com/rowers/workout/2992/emailtcx,13,14,2018-07-07 08:27:06+00:00,2058,00:11:52,2x race prep (5),,Europe/Prague,water,75.0,hwt
387,https://rowsandall.com/rowers/workout/3012/emailcsv,https://rowsandall.com/rowers/workout/3012/emailtcx,13,15,2018-07-07 08:27:06+00:00,2058,00:11:52,2x race prep (5),,Europe/Prague,water,80.0,hwt
388,https://rowsandall.com/rowers/workout/2969/emailcsv,https://rowsandall.com/rowers/workout/2969/emailtcx,100,116,2018-07-08 13:17:02+00:00,10372,01:00:18.100000,HRTSS,,Europe/Prague,water,80.0,hwt
389,https://rowsandall.com/rowers/workout/3046/emailcsv,https://rowsandall.com/rowers/workout/3046/emailtcx,0,0,2018-07-08 13:17:02+00:00,10372,01:00:18,C2 Import Workout from 2018-07-08 13:17:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
390,https://rowsandall.com/rowers/workout/3034/emailcsv,https://rowsandall.com/rowers/workout/3034/emailtcx,0,0,2018-07-08 13:17:08+00:00,10372,01:00:12,Tempovky,,Europe/Prague,water,80.0,hwt
391,https://rowsandall.com/rowers/workout/3045/emailcsv,https://rowsandall.com/rowers/workout/3045/emailtcx,0,0,2018-07-13 13:08:00+00:00,2481,00:13:41,C2 Import Workout from 2018-07-13 13:08:00+00:00,imported from Concept2 log,UTC,water,80.0,lwt
392,https://rowsandall.com/rowers/workout/3044/emailcsv,https://rowsandall.com/rowers/workout/3044/emailtcx,0,0,2018-07-13 13:23:01+00:00,4085,00:22:09.200000,C2 Import Workout from 2018-07-13 13:23:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
393,https://rowsandall.com/rowers/workout/3043/emailcsv,https://rowsandall.com/rowers/workout/3043/emailtcx,0,0,2018-07-14 08:59:02+00:00,7051,00:50:00.500000,C2 Import Workout from 2018-07-14 08:59:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
394,https://rowsandall.com/rowers/workout/3042/emailcsv,https://rowsandall.com/rowers/workout/3042/emailtcx,0,0,2018-07-14 13:33:00+00:00,4471,00:51:42.100000,C2 Import Workout from 2018-07-14 13:33:00+00:00,imported from Concept2 log,UTC,water,80.0,lwt
395,https://rowsandall.com/rowers/workout/3041/emailcsv,https://rowsandall.com/rowers/workout/3041/emailtcx,0,0,2018-07-14 15:48:01+00:00,4486,00:56:58.100000,C2 Import Workout from 2018-07-14 15:48:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
396,https://rowsandall.com/rowers/workout/3040/emailcsv,https://rowsandall.com/rowers/workout/3040/emailtcx,0,0,2018-07-15 06:10:01+00:00,4233,00:29:17,C2 Import Workout from 2018-07-15 06:10:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
397,https://rowsandall.com/rowers/workout/3039/emailcsv,https://rowsandall.com/rowers/workout/3039/emailtcx,0,0,2018-07-15 09:01:01+00:00,4978,00:41:45,C2 Import Workout from 2018-07-15 09:01:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
398,https://rowsandall.com/rowers/workout/3038/emailcsv,https://rowsandall.com/rowers/workout/3038/emailtcx,0,0,2018-07-18 05:00:01+00:00,11159,00:59:58,C2 Import Workout from 2018-07-18 05:00:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
399,https://rowsandall.com/rowers/workout/3037/emailcsv,https://rowsandall.com/rowers/workout/3037/emailtcx,0,0,2018-07-20 09:29:01+00:00,8436,00:45:44.500000,C2 Import Workout from 2018-07-20 09:29:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
400,https://rowsandall.com/rowers/workout/3036/emailcsv,https://rowsandall.com/rowers/workout/3036/emailtcx,0,0,2018-07-21 05:13:03+00:00,9639,00:54:19.500000,C2 Import Workout from 2018-07-21 05:13:03+00:00,imported from Concept2 log,UTC,water,80.0,lwt
401,https://rowsandall.com/rowers/workout/3061/emailcsv,https://rowsandall.com/rowers/workout/3061/emailtcx,77,43,2018-08-17 05:16:03+00:00,8315,00:45:11.400000,Brnenske 2k,,Europe/Prague,water,80.0,hwt
402,https://rowsandall.com/rowers/workout/3075/emailcsv,https://rowsandall.com/rowers/workout/3075/emailtcx,83,28,2018-08-18 07:54:04+00:00,9590,00:55:08,Technique 2x, ,Europe/Prague,water,80.0,hwt
403,https://rowsandall.com/rowers/workout/3074/emailcsv,https://rowsandall.com/rowers/workout/3074/emailtcx,94,17,2018-08-26 22:00:01.500000+00:00,9903,00:54:36,Imported,,Europe/Prague,bike,80.0,hwt
404,https://rowsandall.com/rowers/workout/3076/emailcsv,https://rowsandall.com/rowers/workout/3076/emailtcx,94,1104,2018-08-26 22:00:01.500000+00:00,9903,00:54:36,Imported,,Europe/Prague,bike,80.0,hwt
405,https://rowsandall.com/rowers/workout/3072/emailcsv,https://rowsandall.com/rowers/workout/3072/emailtcx,0,0,2018-08-27 14:36:47+00:00,5855,00:14:58.700000,Bike Erg,,Europe/Prague,bikeerg,80.0,hwt
406,https://rowsandall.com/rowers/workout/3073/emailcsv,https://rowsandall.com/rowers/workout/3073/emailtcx,15,4,2018-08-27 14:36:47+00:00,5855,00:14:58.700000,Bike Erg,,Europe/Prague,bike,80.0,hwt
407,https://rowsandall.com/rowers/workout/3077/emailcsv,https://rowsandall.com/rowers/workout/3077/emailtcx,0,51,2018-09-11 05:31:02+00:00,7490,00:35:07.500000,7.5k,,Europe/Prague,water,80.0,hwt
408,https://rowsandall.com/rowers/workout/3080/emailcsv,https://rowsandall.com/rowers/workout/3080/emailtcx,0,0,2018-09-12 04:17:04+00:00,5921,00:34:50,Sofia part II, ,Europe/Sofia,other,80.0,hwt
409,https://rowsandall.com/rowers/workout/3079/emailcsv,https://rowsandall.com/rowers/workout/3079/emailtcx,87,60,2018-09-13 12:15:58+00:00,23476,00:59:59.700000,Mike 2,,Europe/Prague,rower,80.0,hwt
410,https://rowsandall.com/rowers/workout/3078/emailcsv,https://rowsandall.com/rowers/workout/3078/emailtcx,94,59,2018-09-14 13:02:04+00:00,24267,00:59:57.200000,Mike,,Europe/Prague,rower,80.0,hwt
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/2542/emailcsv https://rowsandall.com/rowers/workout/2542/emailtcx 0 0 1970-01-01 00:00:00+00:00 9578 00:47:55.400000 Test Auto Sync Pro User Europe/Prague rower 80.0 lwt
3 1 https://rowsandall.com/rowers/workout/2500/emailcsv https://rowsandall.com/rowers/workout/2500/emailtcx 0 0 2014-02-26 20:32:33+00:00 65 00:00:02 Sample Workout JSON UTC water 80.0 lwt
4 2 https://rowsandall.com/rowers/workout/3033/emailcsv https://rowsandall.com/rowers/workout/3033/emailtcx 95 264 2015-06-02 06:29:02+00:00 14002 00:59:37.700000 Test P Europe/Prague water 80.0 hwt
5 3 https://rowsandall.com/rowers/workout/2501/emailcsv https://rowsandall.com/rowers/workout/2501/emailtcx 0 0 2016-04-02 08:15:08+00:00 10269 01:05:24 Completed a workout (generic) 6.35 mi on 04/02/16 Europe/Prague water 80.0 lwt
6 4 https://rowsandall.com/rowers/workout/2408/emailcsv https://rowsandall.com/rowers/workout/2408/emailtcx 0 0 2016-07-30 08:40:36+00:00 1001 00:03:41 Comparison Europe/Berlin rower 80.0 lwt
7 5 https://rowsandall.com/rowers/workout/3032/emailcsv https://rowsandall.com/rowers/workout/3032/emailtcx 0 0 2016-07-31 12:35:01+00:00 1111 00:04:32.700000 Europe/Prague water 80.0 hwt
8 6 https://rowsandall.com/rowers/workout/2572/emailcsv https://rowsandall.com/rowers/workout/2572/emailtcx 0 0 2016-11-28 08:37:02+00:00 499 00:01:58 BC Europe/Prague rower 80.0 lwt
9 7 https://rowsandall.com/rowers/workout/2379/emailcsv https://rowsandall.com/rowers/workout/2379/emailtcx 0 0 2017-10-27 16:14:42+00:00 742 00:02:25 Test Weba Europe/Prague water 80.0 lwt
10 8 https://rowsandall.com/rowers/workout/2380/emailcsv https://rowsandall.com/rowers/workout/2380/emailtcx 0 0 2017-10-27 16:14:42+00:00 742 00:02:25 Test Weba Europe/Belgrade water 80.0 lwt
11 9 https://rowsandall.com/rowers/workout/2521/emailcsv https://rowsandall.com/rowers/workout/2521/emailtcx 0 0 2017-11-09 09:15:32+00:00 49842 02:19:37 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
12 10 https://rowsandall.com/rowers/workout/2524/emailcsv https://rowsandall.com/rowers/workout/2524/emailtcx 0 0 2017-11-09 09:15:32+00:00 49842 02:19:37 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
13 11 https://rowsandall.com/rowers/workout/2527/emailcsv https://rowsandall.com/rowers/workout/2527/emailtcx 0 0 2017-11-09 09:15:32+00:00 49842 02:19:37 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
14 12 https://rowsandall.com/rowers/workout/2531/emailcsv https://rowsandall.com/rowers/workout/2531/emailtcx 0 0 2017-11-09 09:15:32+00:00 49842 02:19:37 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
15 13 https://rowsandall.com/rowers/workout/2523/emailcsv https://rowsandall.com/rowers/workout/2523/emailtcx 0 0 2017-11-09 15:15:32+00:00 0 02:28:28 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
16 14 https://rowsandall.com/rowers/workout/2526/emailcsv https://rowsandall.com/rowers/workout/2526/emailtcx 0 0 2017-11-09 15:15:32+00:00 0 02:28:28 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
17 15 https://rowsandall.com/rowers/workout/2529/emailcsv https://rowsandall.com/rowers/workout/2529/emailtcx 0 0 2017-11-09 15:15:32+00:00 0 02:28:28 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
18 16 https://rowsandall.com/rowers/workout/2533/emailcsv https://rowsandall.com/rowers/workout/2533/emailtcx 0 0 2017-11-09 15:15:32+00:00 0 02:28:28 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
19 17 https://rowsandall.com/rowers/workout/2520/emailcsv https://rowsandall.com/rowers/workout/2520/emailtcx 0 0 2017-11-09 18:15:32+00:00 10016 01:06:03 Polar Import Europe/Helsinki rower 80.0 lwt
20 18 https://rowsandall.com/rowers/workout/2522/emailcsv https://rowsandall.com/rowers/workout/2522/emailtcx 0 0 2017-11-09 18:15:32+00:00 10016 01:06:03 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
21 19 https://rowsandall.com/rowers/workout/2525/emailcsv https://rowsandall.com/rowers/workout/2525/emailtcx 0 0 2017-11-09 18:15:32+00:00 10016 01:06:03 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
22 20 https://rowsandall.com/rowers/workout/2528/emailcsv https://rowsandall.com/rowers/workout/2528/emailtcx 0 0 2017-11-09 18:15:32+00:00 10016 01:06:03 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
23 21 https://rowsandall.com/rowers/workout/2532/emailcsv https://rowsandall.com/rowers/workout/2532/emailtcx 0 0 2017-11-09 18:15:32+00:00 10016 01:06:03 Import from Polar Flow imported through email Europe/Helsinki water 80.0 lwt
24 22 https://rowsandall.com/rowers/workout/2494/emailcsv https://rowsandall.com/rowers/workout/2494/emailtcx 0 0 2017-11-12 10:25:00+00:00 10526 00:44:01.700000 Race Europe/Rome water 80.0 lwt
25 23 https://rowsandall.com/rowers/workout/2496/emailcsv https://rowsandall.com/rowers/workout/2496/emailtcx 0 0 2017-11-12 10:25:00+00:00 10526 00:44:01.700000 Race Europe/Rome water 80.0 lwt
26 24 https://rowsandall.com/rowers/workout/2497/emailcsv https://rowsandall.com/rowers/workout/2497/emailtcx 0 0 2017-11-12 10:25:00+00:00 10526 00:44:01.700000 SpdCoach 2 Europe/Rome rower 80.0 lwt
27 25 https://rowsandall.com/rowers/workout/2498/emailcsv https://rowsandall.com/rowers/workout/2498/emailtcx 0 0 2017-11-12 10:25:00+00:00 10526 00:44:01.700000 boat speed test Europe/Rome water 80.0 lwt
28 26 https://rowsandall.com/rowers/workout/2499/emailcsv https://rowsandall.com/rowers/workout/2499/emailtcx 0 0 2017-11-12 10:25:00+00:00 10526 00:44:01.700000 Boat Speed test 2 Europe/Rome water 80.0 lwt
29 27 https://rowsandall.com/rowers/workout/2724/emailcsv https://rowsandall.com/rowers/workout/2724/emailtcx 0 0 2018-01-01 09:27:47+00:00 5000 00:18:37 C2 Import Workout from 2018-01-01 09:27:47+00:00 imported from Concept2 log UTC rower 80.0 lwt
30 28 https://rowsandall.com/rowers/workout/2723/emailcsv https://rowsandall.com/rowers/workout/2723/emailtcx 0 0 2018-01-01 09:48:09+00:00 2963 00:13:29 C2 Import Workout from 2018-01-01 09:48:09+00:00 imported from Concept2 log UTC rower 80.0 lwt
31 29 https://rowsandall.com/rowers/workout/2722/emailcsv https://rowsandall.com/rowers/workout/2722/emailtcx 0 0 2018-01-02 18:22:08+00:00 14183 00:59:49.900000 C2 Import Workout from 2018-01-02 18:22:08+00:00 imported from Concept2 log UTC rower 80.0 lwt
32 30 https://rowsandall.com/rowers/workout/2721/emailcsv https://rowsandall.com/rowers/workout/2721/emailtcx 0 0 2018-01-03 16:24:47+00:00 4821 00:20:04.500000 C2 Import Workout from 2018-01-03 16:24:47+00:00 imported from Concept2 log UTC rower 80.0 lwt
33 31 https://rowsandall.com/rowers/workout/2720/emailcsv https://rowsandall.com/rowers/workout/2720/emailtcx 0 0 2018-01-03 16:46:19+00:00 2000 00:07:07.500000 C2 Import Workout from 2018-01-03 16:46:19+00:00 imported from Concept2 log UTC rower 80.0 lwt
34 32 https://rowsandall.com/rowers/workout/2719/emailcsv https://rowsandall.com/rowers/workout/2719/emailtcx 0 0 2018-01-03 16:57:04+00:00 2997 00:13:35.100000 C2 Import Workout from 2018-01-03 16:57:04+00:00 imported from Concept2 log UTC rower 80.0 lwt
35 33 https://rowsandall.com/rowers/workout/2718/emailcsv https://rowsandall.com/rowers/workout/2718/emailtcx 0 0 2018-01-06 13:59:30+00:00 4722 00:20:06.200000 C2 Import Workout from 2018-01-06 13:59:30+00:00 imported from Concept2 log UTC rower 80.0 lwt
36 34 https://rowsandall.com/rowers/workout/2717/emailcsv https://rowsandall.com/rowers/workout/2717/emailtcx 0 0 2018-01-06 14:20:43+00:00 1171 00:04:00 C2 Import Workout from 2018-01-06 14:20:43+00:00 imported from Concept2 log UTC rower 80.0 lwt
37 35 https://rowsandall.com/rowers/workout/2716/emailcsv https://rowsandall.com/rowers/workout/2716/emailtcx 0 0 2018-01-06 14:25:53+00:00 8006 00:36:13.600000 C2 Import Workout from 2018-01-06 14:25:53+00:00 imported from Concept2 log UTC rower 80.0 lwt
38 36 https://rowsandall.com/rowers/workout/2715/emailcsv https://rowsandall.com/rowers/workout/2715/emailtcx 0 0 2018-01-07 14:03:51+00:00 2520 00:10:42.700000 C2 Import Workout from 2018-01-07 14:03:51+00:00 imported from Concept2 log UTC rower 80.0 lwt
39 37 https://rowsandall.com/rowers/workout/2714/emailcsv https://rowsandall.com/rowers/workout/2714/emailtcx 0 0 2018-01-07 14:18:45+00:00 9996 00:42:35.100000 C2 Import Workout from 2018-01-07 14:18:45+00:00 imported from Concept2 log UTC rower 80.0 lwt
40 38 https://rowsandall.com/rowers/workout/2713/emailcsv https://rowsandall.com/rowers/workout/2713/emailtcx 0 0 2018-01-09 18:22:19+00:00 5267 00:22:34.200000 C2 Import Workout from 2018-01-09 18:22:19+00:00 imported from Concept2 log UTC rower 80.0 lwt
41 39 https://rowsandall.com/rowers/workout/2712/emailcsv https://rowsandall.com/rowers/workout/2712/emailtcx 0 0 2018-01-09 18:46:20+00:00 1000 00:03:21.400000 C2 Import Workout from 2018-01-09 18:46:20+00:00 imported from Concept2 log UTC rower 80.0 lwt
42 40 https://rowsandall.com/rowers/workout/2711/emailcsv https://rowsandall.com/rowers/workout/2711/emailtcx 0 0 2018-01-09 18:51:03+00:00 2300 00:10:04.500000 C2 Import Workout from 2018-01-09 18:51:03+00:00 imported from Concept2 log UTC rower 80.0 lwt
43 41 https://rowsandall.com/rowers/workout/2710/emailcsv https://rowsandall.com/rowers/workout/2710/emailtcx 0 0 2018-01-12 16:09:10+00:00 2008 00:08:39.100000 C2 Import Workout from 2018-01-12 16:09:10+00:00 imported from Concept2 log UTC rower 80.0 lwt
44 42 https://rowsandall.com/rowers/workout/2709/emailcsv https://rowsandall.com/rowers/workout/2709/emailtcx 0 0 2018-01-12 16:19:00+00:00 500 00:01:33.400000 C2 Import Workout from 2018-01-12 16:19:00+00:00 imported from Concept2 log UTC rower 80.0 lwt
45 43 https://rowsandall.com/rowers/workout/2708/emailcsv https://rowsandall.com/rowers/workout/2708/emailtcx 0 0 2018-01-12 16:21:06+00:00 2002 00:09:25.600000 C2 Import Workout from 2018-01-12 16:21:06+00:00 imported from Concept2 log UTC rower 80.0 lwt
46 44 https://rowsandall.com/rowers/workout/2707/emailcsv https://rowsandall.com/rowers/workout/2707/emailtcx 0 0 2018-01-12 16:31:08+00:00 100 00:00:17.600000 C2 Import Workout from 2018-01-12 16:31:08+00:00 imported from Concept2 log UTC rower 80.0 lwt
47 45 https://rowsandall.com/rowers/workout/2706/emailcsv https://rowsandall.com/rowers/workout/2706/emailtcx 0 0 2018-01-12 16:31:58+00:00 2011 00:08:56.600000 C2 Import Workout from 2018-01-12 16:31:58+00:00 imported from Concept2 log UTC rower 80.0 lwt
48 46 https://rowsandall.com/rowers/workout/2705/emailcsv https://rowsandall.com/rowers/workout/2705/emailtcx 0 0 2018-01-13 12:40:00+00:00 2000 00:06:55.800000 C2 Import Workout from 2018-01-13 12:40:00+00:00 imported from Concept2 log UTC rower 80.0 lwt
49 47 https://rowsandall.com/rowers/workout/2704/emailcsv https://rowsandall.com/rowers/workout/2704/emailtcx 0 0 2018-01-16 18:40:49+00:00 2007 00:08:30.800000 C2 Import Workout from 2018-01-16 18:40:49+00:00 imported from Concept2 log UTC rower 80.0 lwt
50 48 https://rowsandall.com/rowers/workout/2703/emailcsv https://rowsandall.com/rowers/workout/2703/emailtcx 0 0 2018-01-16 18:50:09+00:00 333 00:01:00 C2 Import Workout from 2018-01-16 18:50:09+00:00 imported from Concept2 log UTC rower 80.0 lwt
51 49 https://rowsandall.com/rowers/workout/2702/emailcsv https://rowsandall.com/rowers/workout/2702/emailtcx 0 0 2018-01-16 18:51:41+00:00 6820 00:31:22.200000 C2 Import Workout from 2018-01-16 18:51:41+00:00 imported from Concept2 log UTC rower 80.0 lwt
52 50 https://rowsandall.com/rowers/workout/2701/emailcsv https://rowsandall.com/rowers/workout/2701/emailtcx 0 0 2018-01-16 19:24:23+00:00 2008 00:09:01.100000 C2 Import Workout from 2018-01-16 19:24:23+00:00 imported from Concept2 log UTC rower 80.0 lwt
53 51 https://rowsandall.com/rowers/workout/2700/emailcsv https://rowsandall.com/rowers/workout/2700/emailtcx 0 0 2018-01-18 19:01:45+00:00 2007 00:08:27.600000 C2 Import Workout from 2018-01-18 19:01:45+00:00 imported from Concept2 log UTC rower 80.0 lwt
54 52 https://rowsandall.com/rowers/workout/2699/emailcsv https://rowsandall.com/rowers/workout/2699/emailtcx 0 0 2018-01-18 19:10:50+00:00 6918 00:29:14.200000 C2 Import Workout from 2018-01-18 19:10:50+00:00 imported from Concept2 log UTC rower 80.0 lwt
55 53 https://rowsandall.com/rowers/workout/2698/emailcsv https://rowsandall.com/rowers/workout/2698/emailtcx 0 0 2018-01-18 19:40:40+00:00 1217 00:06:11.100000 C2 Import Workout from 2018-01-18 19:40:40+00:00 imported from Concept2 log UTC rower 80.0 lwt
56 54 https://rowsandall.com/rowers/workout/2697/emailcsv https://rowsandall.com/rowers/workout/2697/emailtcx 0 0 2018-01-18 19:47:32+00:00 6697 00:29:16.700000 C2 Import Workout from 2018-01-18 19:47:32+00:00 imported from Concept2 log UTC rower 80.0 lwt
57 55 https://rowsandall.com/rowers/workout/2696/emailcsv https://rowsandall.com/rowers/workout/2696/emailtcx 0 0 2018-01-18 20:17:58+00:00 1997 00:09:10.700000 C2 Import Workout from 2018-01-18 20:17:58+00:00 imported from Concept2 log UTC rower 80.0 lwt
58 56 https://rowsandall.com/rowers/workout/2692/emailcsv https://rowsandall.com/rowers/workout/2692/emailtcx 0 0 2018-01-19 00:00:00+00:00 200 00:02:00.200000 C2 Import Workout from 2018-01-19 00:00:00+00:00 imported from Concept2 log UTC rower 80.0 lwt
59 57 https://rowsandall.com/rowers/workout/2693/emailcsv https://rowsandall.com/rowers/workout/2693/emailtcx 0 0 2018-01-19 00:00:00+00:00 200 00:01:55 C2 Import Workout from 2018-01-19 00:00:00+00:00 imported from Concept2 log UTC rower 80.0 lwt
60 58 https://rowsandall.com/rowers/workout/2694/emailcsv https://rowsandall.com/rowers/workout/2694/emailtcx 0 0 2018-01-19 00:00:00+00:00 200 00:02:00 C2 Import Workout from 2018-01-19 00:00:00+00:00 imported from Concept2 log UTC rower 80.0 lwt
61 59 https://rowsandall.com/rowers/workout/2695/emailcsv https://rowsandall.com/rowers/workout/2695/emailtcx 0 0 2018-01-19 00:00:00+00:00 200 00:01:10 C2 Import Workout from 2018-01-19 00:00:00+00:00 imported from Concept2 log UTC rower 80.0 lwt
62 60 https://rowsandall.com/rowers/workout/2691/emailcsv https://rowsandall.com/rowers/workout/2691/emailtcx 0 0 2018-01-20 13:22:31+00:00 19381 01:20:39.100000 C2 Import Workout from 2018-01-20 13:22:31+00:00 imported from Concept2 log UTC rower 80.0 lwt
63 61 https://rowsandall.com/rowers/workout/2690/emailcsv https://rowsandall.com/rowers/workout/2690/emailtcx 0 0 2018-01-24 18:55:23+00:00 210 00:01:43.400000 C2 Import Workout from 2018-01-24 18:55:23+00:00 imported from Concept2 log UTC rower 80.0 lwt
64 62 https://rowsandall.com/rowers/workout/2689/emailcsv https://rowsandall.com/rowers/workout/2689/emailtcx 0 0 2018-01-24 18:59:06+00:00 2110 00:08:42.700000 C2 Import Workout from 2018-01-24 18:59:06+00:00 imported from Concept2 log UTC rower 80.0 lwt
65 63 https://rowsandall.com/rowers/workout/2688/emailcsv https://rowsandall.com/rowers/workout/2688/emailtcx 0 0 2018-01-24 19:08:04+00:00 6081 00:25:10 C2 Import Workout from 2018-01-24 19:08:04+00:00 imported from Concept2 log UTC rower 80.0 lwt
66 64 https://rowsandall.com/rowers/workout/2687/emailcsv https://rowsandall.com/rowers/workout/2687/emailtcx 0 0 2018-01-24 19:24:18+00:00 14426 01:00:12.600000 C2 Import Workout from 2018-01-24 19:24:18+00:00 imported from Concept2 log UTC rower 80.0 lwt
67 65 https://rowsandall.com/rowers/workout/2686/emailcsv https://rowsandall.com/rowers/workout/2686/emailtcx 0 0 2018-01-27 13:23:26+00:00 14981 01:01:39.600000 C2 Import Workout from 2018-01-27 13:23:26+00:00 imported from Concept2 log UTC rower 80.0 lwt
68 66 https://rowsandall.com/rowers/workout/2685/emailcsv https://rowsandall.com/rowers/workout/2685/emailtcx 0 0 2018-01-27 14:25:07+00:00 18338 01:15:22.800000 C2 Import Workout from 2018-01-27 14:25:07+00:00 imported from Concept2 log UTC rower 80.0 lwt
69 67 https://rowsandall.com/rowers/workout/2684/emailcsv https://rowsandall.com/rowers/workout/2684/emailtcx 0 0 2018-02-03 14:20:18+00:00 12181 00:51:46 C2 Import Workout from 2018-02-03 14:20:18+00:00 imported from Concept2 log UTC rower 80.0 lwt
70 68 https://rowsandall.com/rowers/workout/2683/emailcsv https://rowsandall.com/rowers/workout/2683/emailtcx 0 0 2018-02-06 17:54:01+00:00 7210 00:31:09 C2 Import Workout from 2018-02-06 17:54:01+00:00 imported from Concept2 log UTC rower 80.0 lwt
71 69 https://rowsandall.com/rowers/workout/2682/emailcsv https://rowsandall.com/rowers/workout/2682/emailtcx 0 0 2018-02-10 09:10:14+00:00 3040 00:12:47.200000 C2 Import Workout from 2018-02-10 09:10:14+00:00 imported from Concept2 log UTC rower 80.0 lwt
72 70 https://rowsandall.com/rowers/workout/2681/emailcsv https://rowsandall.com/rowers/workout/2681/emailtcx 0 0 2018-02-10 09:23:52+00:00 9305 00:40:50.900000 C2 Import Workout from 2018-02-10 09:23:52+00:00 imported from Concept2 log UTC rower 80.0 lwt
73 71 https://rowsandall.com/rowers/workout/2680/emailcsv https://rowsandall.com/rowers/workout/2680/emailtcx 0 0 2018-02-10 10:06:00+00:00 2009 00:09:04.200000 C2 Import Workout from 2018-02-10 10:06:00+00:00 imported from Concept2 log UTC rower 80.0 lwt
74 72 https://rowsandall.com/rowers/workout/2679/emailcsv https://rowsandall.com/rowers/workout/2679/emailtcx 0 0 2018-02-11 16:57:32+00:00 14430 01:01:23 C2 Import Workout from 2018-02-11 16:57:32+00:00 imported from Concept2 log UTC rower 80.0 lwt
75 73 https://rowsandall.com/rowers/workout/2335/emailcsv https://rowsandall.com/rowers/workout/2335/emailtcx 0 0 2018-02-12 05:02:06+00:00 3872 00:27:12.200000 SpdCoach 1 America/Los_Angeles water 80.0 lwt
76 74 https://rowsandall.com/rowers/workout/2338/emailcsv https://rowsandall.com/rowers/workout/2338/emailtcx 0 0 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
77 75 https://rowsandall.com/rowers/workout/2339/emailcsv https://rowsandall.com/rowers/workout/2339/emailtcx 0 0 2018-02-12 05:02:06+00:00 7522 09:41:48.200000 Joined Workout America/Los_Angeles water 80.0 lwt
78 76 https://rowsandall.com/rowers/workout/2341/emailcsv https://rowsandall.com/rowers/workout/2341/emailtcx 0 0 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
79 77 https://rowsandall.com/rowers/workout/2342/emailcsv https://rowsandall.com/rowers/workout/2342/emailtcx 0 0 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
80 78 https://rowsandall.com/rowers/workout/2343/emailcsv https://rowsandall.com/rowers/workout/2343/emailtcx 0 0 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
81 79 https://rowsandall.com/rowers/workout/2410/emailcsv https://rowsandall.com/rowers/workout/2410/emailtcx 0 0 2018-02-12 05:02:06+00:00 3872 00:27:12.200000 Test America/Los_Angeles water 80.0 lwt
82 80 https://rowsandall.com/rowers/workout/2414/emailcsv https://rowsandall.com/rowers/workout/2414/emailtcx 0 0 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
83 81 https://rowsandall.com/rowers/workout/2416/emailcsv https://rowsandall.com/rowers/workout/2416/emailtcx 0 0 2018-02-12 05:02:06+00:00 3872 00:27:12.200000 Test aaaa America/Los_Angeles water 80.0 lwt
84 82 https://rowsandall.com/rowers/workout/2417/emailcsv https://rowsandall.com/rowers/workout/2417/emailtcx 0 0 2018-02-12 05:02:06+00:00 9336 09:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
85 83 https://rowsandall.com/rowers/workout/2418/emailcsv https://rowsandall.com/rowers/workout/2418/emailtcx 0 0 2018-02-12 05:02:06+00:00 3872 00:27:12.200000 Test i America/Los_Angeles water 80.0 lwt
86 84 https://rowsandall.com/rowers/workout/2419/emailcsv https://rowsandall.com/rowers/workout/2419/emailtcx 0 0 2018-02-12 05:02:06+00:00 11394 09:42:05.500000 Joined Workout America/Los_Angeles water 80.0 lwt
87 85 https://rowsandall.com/rowers/workout/2420/emailcsv https://rowsandall.com/rowers/workout/2420/emailtcx 0 0 2018-02-12 13:55:06+00:00 3872 00:27:12.200000 Test ii America/Los_Angeles water 80.0 lwt
88 86 https://rowsandall.com/rowers/workout/2421/emailcsv https://rowsandall.com/rowers/workout/2421/emailtcx 0 0 2018-02-12 13:55:06+00:00 350236 00:49:05.500000 Joined Workout America/Los_Angeles water 80.0 lwt
89 87 https://rowsandall.com/rowers/workout/2344/emailcsv https://rowsandall.com/rowers/workout/2344/emailtcx 0 0 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
90 88 https://rowsandall.com/rowers/workout/2347/emailcsv https://rowsandall.com/rowers/workout/2347/emailtcx 0 0 2018-02-12 14:02:06+00:00 9336 00:58:35 Joined Workout imported through email America/Los_Angeles water 80.0 lwt
91 89 https://rowsandall.com/rowers/workout/2411/emailcsv https://rowsandall.com/rowers/workout/2411/emailtcx 0 0 2018-02-12 14:02:06+00:00 3872 00:27:12.200000 Test 2 America/Los_Angeles water 80.0 lwt
92 90 https://rowsandall.com/rowers/workout/2415/emailcsv https://rowsandall.com/rowers/workout/2415/emailtcx 0 0 2018-02-12 14:02:06+00:00 9336 00:58:35 Joined Workout America/Los_Angeles water 80.0 lwt
93 91 https://rowsandall.com/rowers/workout/2430/emailcsv https://rowsandall.com/rowers/workout/2430/emailtcx 0 0 2018-02-12 14:02:06+00:00 3872 00:27:12.200000 Water America/Los_Angeles water 80.0 lwt
94 92 https://rowsandall.com/rowers/workout/2445/emailcsv https://rowsandall.com/rowers/workout/2445/emailtcx 0 0 2018-02-12 14:02:06+00:00 3872 00:27:12.200000 Test P imported through email America/Los_Angeles water 80.0 lwt
95 93 https://rowsandall.com/rowers/workout/2449/emailcsv https://rowsandall.com/rowers/workout/2449/emailtcx 0 0 2018-02-12 14:02:06+00:00 3872 00:27:12.200000 Water 2x imported through email America/Los_Angeles water 80.0 lwt
96 94 https://rowsandall.com/rowers/workout/2412/emailcsv https://rowsandall.com/rowers/workout/2412/emailtcx 0 0 2018-02-12 14:22:01+00:00 3650 00:14:53.200000 Test 3 America/Los_Angeles water 80.0 lwt
97 95 https://rowsandall.com/rowers/workout/2336/emailcsv https://rowsandall.com/rowers/workout/2336/emailtcx 0 0 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
98 96 https://rowsandall.com/rowers/workout/2340/emailcsv https://rowsandall.com/rowers/workout/2340/emailtcx 0 0 2018-02-12 14:29:01+00:00 5464 00:31:40 Joined Workout America/Los_Angeles water 80.0 lwt
99 97 https://rowsandall.com/rowers/workout/2345/emailcsv https://rowsandall.com/rowers/workout/2345/emailtcx 0 0 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
100 98 https://rowsandall.com/rowers/workout/2433/emailcsv https://rowsandall.com/rowers/workout/2433/emailtcx 0 0 2018-02-12 14:29:01+00:00 3650 00:14:53.200000 Test America/Los_Angeles rower 80.0 lwt
101 99 https://rowsandall.com/rowers/workout/2442/emailcsv https://rowsandall.com/rowers/workout/2442/emailtcx 0 0 2018-02-12 14:29:01+00:00 3650 00:14:53.200000 Water imported through email America/Los_Angeles water 80.0 lwt
102 100 https://rowsandall.com/rowers/workout/2444/emailcsv https://rowsandall.com/rowers/workout/2444/emailtcx 0 0 2018-02-12 14:29:01+00:00 3650 00:14:53.200000 SpdCoach 2 imported through email America/Los_Angeles water 80.0 lwt
103 101 https://rowsandall.com/rowers/workout/2337/emailcsv https://rowsandall.com/rowers/workout/2337/emailtcx 0 0 2018-02-12 14:49:02+00:00 1814 00:11:39 SpdCoach 3 America/Los_Angeles water 80.0 lwt
104 102 https://rowsandall.com/rowers/workout/2346/emailcsv https://rowsandall.com/rowers/workout/2346/emailtcx 0 0 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
105 103 https://rowsandall.com/rowers/workout/2413/emailcsv https://rowsandall.com/rowers/workout/2413/emailtcx 0 0 2018-02-12 14:49:02+00:00 1814 00:11:39 Test 4 America/Los_Angeles water 80.0 lwt
106 104 https://rowsandall.com/rowers/workout/2443/emailcsv https://rowsandall.com/rowers/workout/2443/emailtcx 0 0 2018-02-12 14:49:02+00:00 1814 00:11:39 water weer imported through email America/Los_Angeles water 80.0 lwt
107 105 https://rowsandall.com/rowers/workout/2678/emailcsv https://rowsandall.com/rowers/workout/2678/emailtcx 0 0 2018-02-12 18:39:42+00:00 2014 00:08:37.700000 C2 Import Workout from 2018-02-12 18:39:42+00:00 imported from Concept2 log UTC rower 80.0 lwt
108 106 https://rowsandall.com/rowers/workout/2677/emailcsv https://rowsandall.com/rowers/workout/2677/emailtcx 0 0 2018-02-12 18:49:03+00:00 10562 00:46:12.400000 C2 Import Workout from 2018-02-12 18:49:03+00:00 imported from Concept2 log UTC rower 80.0 lwt
109 107 https://rowsandall.com/rowers/workout/2676/emailcsv https://rowsandall.com/rowers/workout/2676/emailtcx 0 0 2018-02-12 19:36:43+00:00 1998 00:09:39.800000 C2 Import Workout from 2018-02-12 19:36:43+00:00 imported from Concept2 log UTC rower 80.0 lwt
110 108 https://rowsandall.com/rowers/workout/2675/emailcsv https://rowsandall.com/rowers/workout/2675/emailtcx 0 0 2018-02-15 18:16:50+00:00 12440 00:51:41.500000 C2 Import Workout from 2018-02-15 18:16:50+00:00 imported from Concept2 log UTC rower 80.0 lwt
111 109 https://rowsandall.com/rowers/workout/2674/emailcsv https://rowsandall.com/rowers/workout/2674/emailtcx 0 0 2018-02-15 19:08:28+00:00 14477 01:00:21.800000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
112 110 https://rowsandall.com/rowers/workout/2673/emailcsv https://rowsandall.com/rowers/workout/2673/emailtcx 0 0 2018-02-16 14:24:03+00:00 3012 00:12:58.800000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
113 111 https://rowsandall.com/rowers/workout/2672/emailcsv https://rowsandall.com/rowers/workout/2672/emailtcx 0 0 2018-02-16 14:37:40+00:00 5277 00:23:00 Imported workout imported from Concept2 log UTC rower 80.0 lwt
114 112 https://rowsandall.com/rowers/workout/2671/emailcsv https://rowsandall.com/rowers/workout/2671/emailtcx 0 0 2018-02-16 15:01:29+00:00 1036 00:05:03.600000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
115 113 https://rowsandall.com/rowers/workout/2670/emailcsv https://rowsandall.com/rowers/workout/2670/emailtcx 0 0 2018-02-16 15:07:03+00:00 5113 00:23:22 Imported workout imported from Concept2 log UTC rower 80.0 lwt
116 114 https://rowsandall.com/rowers/workout/2669/emailcsv https://rowsandall.com/rowers/workout/2669/emailtcx 0 0 2018-02-16 15:34:40+00:00 1259 00:05:48.600000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
117 115 https://rowsandall.com/rowers/workout/2668/emailcsv https://rowsandall.com/rowers/workout/2668/emailtcx 0 0 2018-02-18 13:30:59+00:00 13541 00:56:07.300000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
118 116 https://rowsandall.com/rowers/workout/2667/emailcsv https://rowsandall.com/rowers/workout/2667/emailtcx 0 0 2018-02-20 18:08:13+00:00 2008 00:08:36.300000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
119 117 https://rowsandall.com/rowers/workout/2666/emailcsv https://rowsandall.com/rowers/workout/2666/emailtcx 0 0 2018-02-20 18:17:17+00:00 10914 00:48:06.100000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
120 118 https://rowsandall.com/rowers/workout/2665/emailcsv https://rowsandall.com/rowers/workout/2665/emailtcx 0 0 2018-02-20 19:06:36+00:00 1513 00:07:37.300000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
121 119 https://rowsandall.com/rowers/workout/2381/emailcsv https://rowsandall.com/rowers/workout/2381/emailtcx 0 0 2018-02-21 06:26:01+00:00 6119 00:27:20.200000 3x2km Racice Europe/Prague water 80.0 lwt
122 120 https://rowsandall.com/rowers/workout/2384/emailcsv https://rowsandall.com/rowers/workout/2384/emailtcx 0 0 2018-02-22 09:32:01+00:00 8000 00:35:08.500000 8k trial Europe/Prague water 80.0 lwt
123 121 https://rowsandall.com/rowers/workout/2664/emailcsv https://rowsandall.com/rowers/workout/2664/emailtcx 0 0 2018-02-22 18:40:03+00:00 11481 00:49:17.400000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
124 122 https://rowsandall.com/rowers/workout/2663/emailcsv https://rowsandall.com/rowers/workout/2663/emailtcx 0 0 2018-02-23 15:12:10+00:00 2008 00:08:44.800000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
125 123 https://rowsandall.com/rowers/workout/2383/emailcsv https://rowsandall.com/rowers/workout/2383/emailtcx 0 0 2018-02-23 15:17:03+00:00 5918 00:25:10.700000 Horin Europe/Prague water 80.0 lwt
126 124 https://rowsandall.com/rowers/workout/2662/emailcsv https://rowsandall.com/rowers/workout/2662/emailtcx 0 0 2018-02-23 15:21:44+00:00 8804 00:39:58 Imported workout imported from Concept2 log UTC rower 80.0 lwt
127 125 https://rowsandall.com/rowers/workout/2661/emailcsv https://rowsandall.com/rowers/workout/2661/emailtcx 0 0 2018-02-23 16:02:23+00:00 2008 00:09:05 Imported workout imported from Concept2 log UTC rower 80.0 lwt
128 126 https://rowsandall.com/rowers/workout/2385/emailcsv https://rowsandall.com/rowers/workout/2385/emailtcx 0 0 2018-02-24 11:58:09+00:00 17045 01:35:59 Washington America/New_York water 80.0 lwt
129 127 https://rowsandall.com/rowers/workout/2660/emailcsv https://rowsandall.com/rowers/workout/2660/emailtcx 0 0 2018-02-24 15:07:07+00:00 14544 01:01:04.500000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
130 128 https://rowsandall.com/rowers/workout/2386/emailcsv https://rowsandall.com/rowers/workout/2386/emailtcx 0 0 2018-02-25 12:24:59+00:00 6182 00:26:24.400000 9x500m/70sec Europe/Prague rower 80.0 lwt
131 129 https://rowsandall.com/rowers/workout/2659/emailcsv https://rowsandall.com/rowers/workout/2659/emailtcx 0 0 2018-02-25 14:15:13+00:00 16623 01:22:28 Imported workout imported from Concept2 log UTC rower 80.0 lwt
132 130 https://rowsandall.com/rowers/workout/2400/emailcsv https://rowsandall.com/rowers/workout/2400/emailtcx 0 0 2018-02-25 22:45:28+00:00 4175 00:25:07.700000 Test CP Europe/Prague rower 80.0 lwt
133 131 https://rowsandall.com/rowers/workout/2387/emailcsv https://rowsandall.com/rowers/workout/2387/emailtcx 0 0 2018-02-27 13:19:44+00:00 2206 00:10:00 StatsError Europe/Prague rower 80.0 lwt
134 132 https://rowsandall.com/rowers/workout/2658/emailcsv https://rowsandall.com/rowers/workout/2658/emailtcx 0 0 2018-02-27 16:32:56+00:00 13549 00:56:44.900000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
135 133 https://rowsandall.com/rowers/workout/2657/emailcsv https://rowsandall.com/rowers/workout/2657/emailtcx 0 0 2018-03-03 13:50:12+00:00 2012 00:08:42.700000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
136 134 https://rowsandall.com/rowers/workout/2656/emailcsv https://rowsandall.com/rowers/workout/2656/emailtcx 0 0 2018-03-03 14:00:26+00:00 6270 00:26:41.700000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
137 135 https://rowsandall.com/rowers/workout/2655/emailcsv https://rowsandall.com/rowers/workout/2655/emailtcx 0 0 2018-03-03 14:27:41+00:00 999 00:05:44.100000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
138 136 https://rowsandall.com/rowers/workout/2395/emailcsv https://rowsandall.com/rowers/workout/2395/emailtcx 0 0 2018-03-03 14:33:51+00:00 6098 00:26:35.400000 Flex chart not working Europe/Prague rower 80.0 lwt
139 137 https://rowsandall.com/rowers/workout/2654/emailcsv https://rowsandall.com/rowers/workout/2654/emailtcx 0 0 2018-03-03 14:33:51+00:00 6098 00:26:35.400000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
140 138 https://rowsandall.com/rowers/workout/2653/emailcsv https://rowsandall.com/rowers/workout/2653/emailtcx 0 0 2018-03-03 15:01:34+00:00 1559 00:07:16.600000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
141 139 https://rowsandall.com/rowers/workout/2392/emailcsv https://rowsandall.com/rowers/workout/2392/emailtcx 0 0 2018-03-05 13:51:23+00:00 13802 01:06:00 Mike's average workout Europe/Prague rower 80.0 lwt
142 140 https://rowsandall.com/rowers/workout/2396/emailcsv https://rowsandall.com/rowers/workout/2396/emailtcx 0 0 2018-03-05 13:51:23+00:00 4058 00:17:00 Mike's average workout (1) Europe/Prague rower 80.0 lwt
143 141 https://rowsandall.com/rowers/workout/2397/emailcsv https://rowsandall.com/rowers/workout/2397/emailtcx 0 0 2018-03-05 14:08:23+00:00 9738 00:49:00 Mike's average workout (2) Europe/Prague rower 80.0 lwt
144 142 https://rowsandall.com/rowers/workout/2389/emailcsv https://rowsandall.com/rowers/workout/2389/emailtcx 0 0 2018-03-05 17:48:31+00:00 7022 00:29:44.400000 test wat een kutsessie Europe/Prague rower 80.0 lwt
145 143 https://rowsandall.com/rowers/workout/2652/emailcsv https://rowsandall.com/rowers/workout/2652/emailtcx 0 0 2018-03-05 17:48:31+00:00 7022 00:29:45.900000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
146 144 https://rowsandall.com/rowers/workout/2390/emailcsv https://rowsandall.com/rowers/workout/2390/emailtcx 0 0 2018-03-05 17:50:46+00:00 5019 00:31:27.500000 Europe/Prague rower 80.0 lwt
147 145 https://rowsandall.com/rowers/workout/2651/emailcsv https://rowsandall.com/rowers/workout/2651/emailtcx 0 0 2018-03-08 18:34:05+00:00 2010 00:08:38.700000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
148 146 https://rowsandall.com/rowers/workout/2650/emailcsv https://rowsandall.com/rowers/workout/2650/emailtcx 0 0 2018-03-08 18:43:29+00:00 10444 00:46:52.300000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
149 147 https://rowsandall.com/rowers/workout/2649/emailcsv https://rowsandall.com/rowers/workout/2649/emailtcx 0 0 2018-03-08 19:31:31+00:00 269 00:01:42 Imported workout imported from Concept2 log UTC rower 80.0 lwt
150 148 https://rowsandall.com/rowers/workout/2398/emailcsv https://rowsandall.com/rowers/workout/2398/emailtcx 0 0 2018-03-09 11:52:48+00:00 4160 00:13:00 test template Dit zijn de notes Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang LAngwoordzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz Europe/Prague rower 80.0 lwt
151 149 https://rowsandall.com/rowers/workout/2399/emailcsv https://rowsandall.com/rowers/workout/2399/emailtcx 0 0 2018-03-09 11:59:13+00:00 4160 00:13:00 Test P Europe/Prague rower 80.0 lwt
152 150 https://rowsandall.com/rowers/workout/2401/emailcsv https://rowsandall.com/rowers/workout/2401/emailtcx 0 0 2018-03-13 07:32:40+00:00 6479 00:30:27.300000 high power values? Europe/Prague rower 80.0 lwt
153 151 https://rowsandall.com/rowers/workout/2648/emailcsv https://rowsandall.com/rowers/workout/2648/emailtcx 0 0 2018-03-13 18:18:31+00:00 2009 00:08:30 Imported workout imported from Concept2 log UTC rower 80.0 lwt
154 152 https://rowsandall.com/rowers/workout/2404/emailcsv https://rowsandall.com/rowers/workout/2404/emailtcx 0 0 2018-03-13 18:28:00.900000+00:00 9996 00:40:00 C2 Rower Timed. 10.0 C2 Rower Timed. 10.0km, 40.00 min. (PainSled) Europe/Prague rower 80.0 lwt
155 153 https://rowsandall.com/rowers/workout/2405/emailcsv https://rowsandall.com/rowers/workout/2405/emailtcx 0 0 2018-03-13 18:28:00.900000+00:00 10850 00:45:32.400000 C2 Rower Timed. 10.0 C2 Rower Timed. 10.0km, 40.00 min. (PainSled) Europe/Prague rower 80.0 lwt
156 154 https://rowsandall.com/rowers/workout/2647/emailcsv https://rowsandall.com/rowers/workout/2647/emailtcx 0 0 2018-03-13 18:28:01+00:00 10864 00:46:12.800000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
157 155 https://rowsandall.com/rowers/workout/2646/emailcsv https://rowsandall.com/rowers/workout/2646/emailtcx 0 0 2018-03-13 19:15:15+00:00 1015 00:05:05.600000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
158 156 https://rowsandall.com/rowers/workout/2645/emailcsv https://rowsandall.com/rowers/workout/2645/emailtcx 0 0 2018-03-13 19:18:21+00:00 2009 00:08:29.600000 Imported workout imported from Concept2 log UTC rower 80.0 hwt
159 157 https://rowsandall.com/rowers/workout/2644/emailcsv https://rowsandall.com/rowers/workout/2644/emailtcx 0 0 2018-03-13 19:28:00+00:00 9996 00:40:00 Imported workout imported from Concept2 log UTC rower 80.0 hwt
160 158 https://rowsandall.com/rowers/workout/2402/emailcsv https://rowsandall.com/rowers/workout/2402/emailtcx 0 0 2018-03-13 21:15:46+00:00 1311 00:13:04.100000 Stroke Count Europe/Prague rower 80.0 lwt
161 159 https://rowsandall.com/rowers/workout/2403/emailcsv https://rowsandall.com/rowers/workout/2403/emailtcx 0 0 2018-03-14 19:33:20+00:00 10850 00:45:32.400000 4x10min Europe/Prague rower 80.0 lwt
162 160 https://rowsandall.com/rowers/workout/2406/emailcsv https://rowsandall.com/rowers/workout/2406/emailtcx 0 0 2018-03-15 06:22:52+00:00 336 00:01:00 Test 1 minute Europe/Prague rower 80.0 lwt
163 161 https://rowsandall.com/rowers/workout/2422/emailcsv https://rowsandall.com/rowers/workout/2422/emailtcx 0 0 2018-03-15 06:22:52+00:00 8136 23:59:59.900000 Joined Workout Europe/Prague rower 80.0 lwt
164 162 https://rowsandall.com/rowers/workout/2407/emailcsv https://rowsandall.com/rowers/workout/2407/emailtcx 0 0 2018-03-15 06:23:09+00:00 7800 00:30:00 Thirty Dirty Europe/Prague rower 80.0 lwt
165 163 https://rowsandall.com/rowers/workout/2434/emailcsv https://rowsandall.com/rowers/workout/2434/emailtcx 0 0 2018-03-15 06:25:09+00:00 7800 23:59:59.900000 30 min Europe/Prague rower 80.0 lwt
166 164 https://rowsandall.com/rowers/workout/2643/emailcsv https://rowsandall.com/rowers/workout/2643/emailtcx 0 0 2018-03-15 18:48:48+00:00 2013 00:08:36.700000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
167 165 https://rowsandall.com/rowers/workout/2425/emailcsv https://rowsandall.com/rowers/workout/2425/emailtcx 0 0 2018-03-15 18:58:08+00:00 10169 00:44:31.200000 Joined Workout Europe/Prague rower 80.0 lwt
168 166 https://rowsandall.com/rowers/workout/2438/emailcsv https://rowsandall.com/rowers/workout/2438/emailtcx 0 0 2018-03-15 18:58:08+00:00 8157 00:34:21.600000 Test imported through email Europe/Prague rower 80.0 lwt
169 167 https://rowsandall.com/rowers/workout/2642/emailcsv https://rowsandall.com/rowers/workout/2642/emailtcx 0 0 2018-03-15 18:58:08+00:00 8157 00:34:21.500000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
170 168 https://rowsandall.com/rowers/workout/2423/emailcsv https://rowsandall.com/rowers/workout/2423/emailtcx 0 0 2018-03-15 18:58:08.620390+00:00 8157 00:34:21.600000 6x4min Europe/Prague rower 80.0 lwt
171 169 https://rowsandall.com/rowers/workout/2431/emailcsv https://rowsandall.com/rowers/workout/2431/emailtcx 0 0 2018-03-15 18:58:08.620390+00:00 8157 00:34:21.600000 Indoor Europe/Prague rower 80.0 lwt
172 170 https://rowsandall.com/rowers/workout/2432/emailcsv https://rowsandall.com/rowers/workout/2432/emailtcx 0 0 2018-03-15 18:58:08.620390+00:00 8157 00:34:21.600000 test Europe/Prague rower 80.0 lwt
173 171 https://rowsandall.com/rowers/workout/2435/emailcsv https://rowsandall.com/rowers/workout/2435/emailtcx 0 0 2018-03-15 18:58:08.620390+00:00 8157 00:34:21.600000 Test Europe/Prague rower 80.0 lwt
174 172 https://rowsandall.com/rowers/workout/2436/emailcsv https://rowsandall.com/rowers/workout/2436/emailtcx 0 0 2018-03-15 18:58:08.620390+00:00 8157 00:34:21.600000 r Europe/Prague rower 80.0 lwt
175 173 https://rowsandall.com/rowers/workout/2437/emailcsv https://rowsandall.com/rowers/workout/2437/emailtcx 0 0 2018-03-15 18:58:08.620390+00:00 8157 00:34:21.600000 a Europe/Prague rower 80.0 lwt
176 174 https://rowsandall.com/rowers/workout/2440/emailcsv https://rowsandall.com/rowers/workout/2440/emailtcx 0 0 2018-03-15 19:33:15+00:00 2012 00:09:24.300000 another one imported through email Europe/Prague rower 80.0 lwt
177 175 https://rowsandall.com/rowers/workout/2641/emailcsv https://rowsandall.com/rowers/workout/2641/emailtcx 0 0 2018-03-15 19:33:15+00:00 2012 00:09:24.300000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
178 176 https://rowsandall.com/rowers/workout/2424/emailcsv https://rowsandall.com/rowers/workout/2424/emailtcx 0 0 2018-03-15 19:33:15.009331+00:00 2012 00:09:24.400000 6x4min Europe/Prague rower 80.0 lwt
179 177 https://rowsandall.com/rowers/workout/2429/emailcsv https://rowsandall.com/rowers/workout/2429/emailtcx 0 0 2018-03-16 12:04:52+00:00 9595 00:54:45 Joined Workout America/New_York rower 80.0 lwt
180 178 https://rowsandall.com/rowers/workout/2426/emailcsv https://rowsandall.com/rowers/workout/2426/emailtcx 0 0 2018-03-16 12:09:23+00:00 9269 00:50:14 Test P America/New_York rower 80.0 lwt
181 179 https://rowsandall.com/rowers/workout/2428/emailcsv https://rowsandall.com/rowers/workout/2428/emailtcx 0 0 2018-03-16 12:09:23+00:00 9269 00:50:14 America/New_York rower 80.0 lwt
182 180 https://rowsandall.com/rowers/workout/2427/emailcsv https://rowsandall.com/rowers/workout/2427/emailtcx 0 0 2018-03-16 13:00:52+00:00 326 00:04:03 Water Workout America/New_York water 80.0 lwt
183 181 https://rowsandall.com/rowers/workout/2640/emailcsv https://rowsandall.com/rowers/workout/2640/emailtcx 0 0 2018-03-17 14:14:56+00:00 15231 01:03:19.100000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
184 182 https://rowsandall.com/rowers/workout/2639/emailcsv https://rowsandall.com/rowers/workout/2639/emailtcx 0 0 2018-03-18 14:03:27+00:00 3876 00:16:16.200000 Imported workout imported from Concept2 log UTC slides 80.0 lwt
185 183 https://rowsandall.com/rowers/workout/2638/emailcsv https://rowsandall.com/rowers/workout/2638/emailtcx 0 0 2018-03-18 14:20:52+00:00 6000 00:22:17.500000 Imported workout imported from Concept2 log UTC slides 80.0 lwt
186 184 https://rowsandall.com/rowers/workout/2637/emailcsv https://rowsandall.com/rowers/workout/2637/emailtcx 0 0 2018-03-18 14:44:46+00:00 4163 00:19:13.200000 Imported workout imported from Concept2 log UTC slides 80.0 lwt
187 185 https://rowsandall.com/rowers/workout/2636/emailcsv https://rowsandall.com/rowers/workout/2636/emailtcx 0 0 2018-03-22 18:38:59+00:00 2007 00:08:43.800000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
188 186 https://rowsandall.com/rowers/workout/2635/emailcsv https://rowsandall.com/rowers/workout/2635/emailtcx 0 0 2018-03-22 18:48:29+00:00 6770 00:29:38.200000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
189 187 https://rowsandall.com/rowers/workout/2634/emailcsv https://rowsandall.com/rowers/workout/2634/emailtcx 0 0 2018-03-22 19:18:50+00:00 2010 00:08:46.700000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
190 188 https://rowsandall.com/rowers/workout/2633/emailcsv https://rowsandall.com/rowers/workout/2633/emailtcx 0 0 2018-03-24 09:20:07+00:00 15446 01:22:56.300000 Imported workout imported from Concept2 log UTC water 80.0 lwt
191 189 https://rowsandall.com/rowers/workout/2451/emailcsv https://rowsandall.com/rowers/workout/2451/emailtcx 0 0 2018-03-25 09:59:12+00:00 29000 01:50:13 test Europe/Zurich rower 80.0 lwt
192 190 https://rowsandall.com/rowers/workout/2452/emailcsv https://rowsandall.com/rowers/workout/2452/emailtcx 0 0 2018-03-25 09:59:12+00:00 29000 01:50:13 Background processing test imported through email Europe/Zurich water 80.0 lwt
193 191 https://rowsandall.com/rowers/workout/2632/emailcsv https://rowsandall.com/rowers/workout/2632/emailtcx 0 0 2018-03-25 14:29:09+00:00 6664 00:46:07 Imported workout imported from Concept2 log UTC water 80.0 lwt
194 192 https://rowsandall.com/rowers/workout/2453/emailcsv https://rowsandall.com/rowers/workout/2453/emailtcx 0 0 2018-03-29 13:45:00+00:00 2000 07:25:00 test api string UTC water 80.0 lwt
195 193 https://rowsandall.com/rowers/workout/2454/emailcsv https://rowsandall.com/rowers/workout/2454/emailtcx 0 0 2018-04-02 11:02:55+00:00 3848 00:22:14.200000 RP3 curve Europe/Prague rower 80.0 lwt
196 194 https://rowsandall.com/rowers/workout/2455/emailcsv https://rowsandall.com/rowers/workout/2455/emailtcx 0 0 2018-04-02 11:04:18+00:00 3848 00:22:14.200000 Europe/Prague rower 80.0 lwt
197 195 https://rowsandall.com/rowers/workout/2631/emailcsv https://rowsandall.com/rowers/workout/2631/emailtcx 0 0 2018-04-03 14:34:01+00:00 2822 00:14:43.700000 Imported workout imported from Concept2 log UTC water 80.0 lwt
198 196 https://rowsandall.com/rowers/workout/2630/emailcsv https://rowsandall.com/rowers/workout/2630/emailtcx 0 0 2018-04-03 14:50:01+00:00 7505 00:39:46.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
199 197 https://rowsandall.com/rowers/workout/2456/emailcsv https://rowsandall.com/rowers/workout/2456/emailtcx 0 0 2018-04-03 15:50:52+00:00 7200 00:37:44 In Stroke Europe/Prague water 80.0 lwt
200 198 https://rowsandall.com/rowers/workout/2457/emailcsv https://rowsandall.com/rowers/workout/2457/emailtcx 0 0 2018-04-03 15:50:52+00:00 7200 00:37:44 In Stroke 2 Europe/Prague water 80.0 lwt
201 199 https://rowsandall.com/rowers/workout/2629/emailcsv https://rowsandall.com/rowers/workout/2629/emailtcx 0 0 2018-04-04 18:30:27+00:00 27 00:00:03.200000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
202 200 https://rowsandall.com/rowers/workout/2628/emailcsv https://rowsandall.com/rowers/workout/2628/emailtcx 0 0 2018-04-04 19:00:43+00:00 8309 00:48:07.400000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
203 201 https://rowsandall.com/rowers/workout/2458/emailcsv https://rowsandall.com/rowers/workout/2458/emailtcx 0 0 2018-04-07 07:41:02+00:00 10568 01:06:08.800000 2x3km fail Europe/Prague water 80.0 lwt
204 202 https://rowsandall.com/rowers/workout/2460/emailcsv https://rowsandall.com/rowers/workout/2460/emailtcx 0 0 2018-04-07 07:41:02+00:00 10568 01:06:08.800000 Update Europe/Prague water 80.0 lwt
205 203 https://rowsandall.com/rowers/workout/2627/emailcsv https://rowsandall.com/rowers/workout/2627/emailtcx 0 0 2018-04-07 07:41:02+00:00 2243 00:12:20.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
206 204 https://rowsandall.com/rowers/workout/2626/emailcsv https://rowsandall.com/rowers/workout/2626/emailtcx 0 0 2018-04-07 07:55:02+00:00 3167 00:16:59.800000 Imported workout imported from Concept2 log UTC water 80.0 lwt
207 205 https://rowsandall.com/rowers/workout/2625/emailcsv https://rowsandall.com/rowers/workout/2625/emailtcx 0 0 2018-04-07 08:14:02+00:00 2977 00:14:58 Imported workout imported from Concept2 log UTC water 80.0 lwt
208 206 https://rowsandall.com/rowers/workout/2623/emailcsv https://rowsandall.com/rowers/workout/2623/emailtcx 0 0 2018-04-07 08:33:03+00:00 2180 00:14:07.700000 Imported workout imported from Concept2 log UTC water 80.0 lwt
209 207 https://rowsandall.com/rowers/workout/2622/emailcsv https://rowsandall.com/rowers/workout/2622/emailtcx 0 0 2018-04-10 17:38:22+00:00 11703 00:48:59.500000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
210 208 https://rowsandall.com/rowers/workout/2621/emailcsv https://rowsandall.com/rowers/workout/2621/emailtcx 0 0 2018-04-10 18:27:53+00:00 17284 01:11:55.500000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
211 209 https://rowsandall.com/rowers/workout/2620/emailcsv https://rowsandall.com/rowers/workout/2620/emailtcx 0 0 2018-04-11 18:37:27+00:00 10122 01:15:44.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
212 210 https://rowsandall.com/rowers/workout/2619/emailcsv https://rowsandall.com/rowers/workout/2619/emailtcx 0 0 2018-04-12 16:17:02+00:00 10408 00:53:45.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
213 211 https://rowsandall.com/rowers/workout/2618/emailcsv https://rowsandall.com/rowers/workout/2618/emailtcx 0 0 2018-04-15 08:34:05+00:00 11129 01:03:38 Imported workout imported from Concept2 log UTC water 80.0 lwt
214 212 https://rowsandall.com/rowers/workout/2617/emailcsv https://rowsandall.com/rowers/workout/2617/emailtcx 0 0 2018-04-18 13:43:04+00:00 1942 00:10:55.300000 Imported workout imported from Concept2 log UTC water 80.0 lwt
215 213 https://rowsandall.com/rowers/workout/2616/emailcsv https://rowsandall.com/rowers/workout/2616/emailtcx 0 0 2018-04-18 13:57:01+00:00 7979 00:36:10.600000 Imported workout imported from Concept2 log UTC water 80.0 lwt
216 214 https://rowsandall.com/rowers/workout/2615/emailcsv https://rowsandall.com/rowers/workout/2615/emailtcx 0 0 2018-04-18 14:49:06+00:00 1512 00:08:27.600000 Imported workout imported from Concept2 log UTC water 80.0 lwt
217 215 https://rowsandall.com/rowers/workout/2614/emailcsv https://rowsandall.com/rowers/workout/2614/emailtcx 0 0 2018-04-20 15:51:41+00:00 9748 01:06:50.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
218 216 https://rowsandall.com/rowers/workout/2613/emailcsv https://rowsandall.com/rowers/workout/2613/emailtcx 0 0 2018-04-21 15:38:04+00:00 5254 00:27:02.700000 Imported workout imported from Concept2 log UTC water 80.0 lwt
219 217 https://rowsandall.com/rowers/workout/2612/emailcsv https://rowsandall.com/rowers/workout/2612/emailtcx 0 0 2018-04-22 07:15:01+00:00 12282 01:08:28.600000 Imported workout imported from Concept2 log UTC water 80.0 lwt
220 218 https://rowsandall.com/rowers/workout/2471/emailcsv https://rowsandall.com/rowers/workout/2471/emailtcx 0 0 2018-04-23 11:00:00+00:00 1017 00:03:55.200000 7x150min/1min America/New_York water 80.0 lwt
221 219 https://rowsandall.com/rowers/workout/2472/emailcsv https://rowsandall.com/rowers/workout/2472/emailtcx 0 0 2018-04-23 11:00:00+00:00 1017 00:03:55.200000 7x15min test 2 America/New_York water 80.0 lwt
222 220 https://rowsandall.com/rowers/workout/2473/emailcsv https://rowsandall.com/rowers/workout/2473/emailtcx 0 0 2018-04-23 11:00:00+00:00 1017 00:03:55.200000 7x150min/1min America/New_York water 80.0 lwt
223 221 https://rowsandall.com/rowers/workout/2474/emailcsv https://rowsandall.com/rowers/workout/2474/emailtcx 0 0 2018-04-23 11:00:00+00:00 1017 00:03:55 test firmware America/New_York water 80.0 lwt
224 222 https://rowsandall.com/rowers/workout/2478/emailcsv https://rowsandall.com/rowers/workout/2478/emailtcx 0 0 2018-04-23 11:00:00+00:00 1017 00:03:55.200000 Firmware 2 America/New_York water 80.0 lwt
225 223 https://rowsandall.com/rowers/workout/2611/emailcsv https://rowsandall.com/rowers/workout/2611/emailtcx 0 0 2018-04-23 17:46:25+00:00 13558 00:58:11.900000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
226 224 https://rowsandall.com/rowers/workout/2465/emailcsv https://rowsandall.com/rowers/workout/2465/emailtcx 0 0 2018-04-23 20:42:00+00:00 8000 00:36:01.500000 Racice Europe/Prague water 80.0 lwt
227 225 https://rowsandall.com/rowers/workout/2610/emailcsv https://rowsandall.com/rowers/workout/2610/emailtcx 0 0 2018-04-24 12:12:03+00:00 2959 00:16:42.700000 Imported workout imported from Concept2 log UTC water 80.0 lwt
228 226 https://rowsandall.com/rowers/workout/2609/emailcsv https://rowsandall.com/rowers/workout/2609/emailtcx 0 0 2018-04-24 12:32:00+00:00 7516 00:38:49.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
229 227 https://rowsandall.com/rowers/workout/2466/emailcsv https://rowsandall.com/rowers/workout/2466/emailtcx 0 0 2018-04-24 13:35:30+00:00 9420 00:48:00 Europe/Prague water 80.0 lwt
230 228 https://rowsandall.com/rowers/workout/2608/emailcsv https://rowsandall.com/rowers/workout/2608/emailtcx 0 0 2018-04-25 17:50:26+00:00 10171 01:12:33.600000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
231 229 https://rowsandall.com/rowers/workout/2470/emailcsv https://rowsandall.com/rowers/workout/2470/emailtcx 0 0 2018-04-25 22:59:01+00:00 4159 00:26:43.200000 SpeedCoach 7x150m America/New_York water 80.0 lwt
232 230 https://rowsandall.com/rowers/workout/2607/emailcsv https://rowsandall.com/rowers/workout/2607/emailtcx 0 0 2018-04-26 16:18:01+00:00 2016 00:12:30.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
233 231 https://rowsandall.com/rowers/workout/2606/emailcsv https://rowsandall.com/rowers/workout/2606/emailtcx 0 0 2018-04-26 16:33:00+00:00 4605 00:22:35.700000 Imported workout imported from Concept2 log UTC water 80.0 lwt
234 232 https://rowsandall.com/rowers/workout/2605/emailcsv https://rowsandall.com/rowers/workout/2605/emailtcx 0 0 2018-04-26 16:56:03+00:00 1301 00:07:07.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
235 233 https://rowsandall.com/rowers/workout/2604/emailcsv https://rowsandall.com/rowers/workout/2604/emailtcx 0 0 2018-04-28 08:02:01+00:00 11924 01:18:20.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
236 234 https://rowsandall.com/rowers/workout/2469/emailcsv https://rowsandall.com/rowers/workout/2469/emailtcx 0 0 2018-04-29 07:22:01+00:00 8040 00:50:06 Test P America/New_York water 80.0 lwt
237 235 https://rowsandall.com/rowers/workout/2603/emailcsv https://rowsandall.com/rowers/workout/2603/emailtcx 0 0 2018-04-29 07:22:01+00:00 8040 00:50:05.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
238 236 https://rowsandall.com/rowers/workout/2559/emailcsv https://rowsandall.com/rowers/workout/2559/emailtcx 0 0 2018-05-03 16:02:08+00:00 10909 01:00:35 Intervals Tests (6) imported through email Europe/Amsterdam water 80.0 lwt
239 237 https://rowsandall.com/rowers/workout/2602/emailcsv https://rowsandall.com/rowers/workout/2602/emailtcx 0 0 2018-05-04 05:47:04+00:00 3472 00:18:53.700000 Imported workout imported from Concept2 log UTC water 80.0 lwt
240 238 https://rowsandall.com/rowers/workout/2479/emailcsv https://rowsandall.com/rowers/workout/2479/emailtcx 0 0 2018-05-04 06:07:04+00:00 5997 00:25:53.900000 Zip test imported through email Europe/Prague water 80.0 lwt
241 239 https://rowsandall.com/rowers/workout/2481/emailcsv https://rowsandall.com/rowers/workout/2481/emailtcx 0 0 2018-05-04 06:07:04+00:00 5997 00:25:53.900000 Zip test 2 imported through email Europe/Prague water 80.0 lwt
242 240 https://rowsandall.com/rowers/workout/2483/emailcsv https://rowsandall.com/rowers/workout/2483/emailtcx 0 0 2018-05-04 06:07:04+00:00 5997 00:25:53.900000 Test Zip 3 imported through email Europe/Prague water 80.0 lwt
243 241 https://rowsandall.com/rowers/workout/2601/emailcsv https://rowsandall.com/rowers/workout/2601/emailtcx 0 0 2018-05-04 06:07:04+00:00 5997 00:25:53.900000 Imported workout imported from Concept2 log UTC water 80.0 lwt
244 242 https://rowsandall.com/rowers/workout/2860/emailcsv https://rowsandall.com/rowers/workout/2860/emailtcx 0 0 2018-05-04 06:07:04+00:00 5997 00:25:53.900000 Zip test imported through email from speedcoach2v2.15 via rowsandall.com Europe/Prague water 80.0 hwt
245 243 https://rowsandall.com/rowers/workout/2600/emailcsv https://rowsandall.com/rowers/workout/2600/emailtcx 0 0 2018-05-04 06:35:04+00:00 1009 00:06:44.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
246 244 https://rowsandall.com/rowers/workout/2599/emailcsv https://rowsandall.com/rowers/workout/2599/emailtcx 0 0 2018-05-05 07:06:02+00:00 11180 01:01:01.600000 Imported workout imported from Concept2 log UTC water 80.0 lwt
247 245 https://rowsandall.com/rowers/workout/2598/emailcsv https://rowsandall.com/rowers/workout/2598/emailtcx 0 0 2018-05-05 08:11:04+00:00 1152 00:06:56.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
248 246 https://rowsandall.com/rowers/workout/2597/emailcsv https://rowsandall.com/rowers/workout/2597/emailtcx 0 0 2018-05-07 15:41:06+00:00 11019 01:00:40.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
249 247 https://rowsandall.com/rowers/workout/2490/emailcsv https://rowsandall.com/rowers/workout/2490/emailtcx 0 0 2018-05-10 09:11:24+00:00 15263 01:39:34 Naarden goed Europe/Amsterdam water 80.0 lwt
250 248 https://rowsandall.com/rowers/workout/2491/emailcsv https://rowsandall.com/rowers/workout/2491/emailtcx 0 0 2018-05-10 09:11:24+00:00 7378 00:44:59 Naarden goed (1) Europe/Amsterdam water 80.0 lwt
251 249 https://rowsandall.com/rowers/workout/2492/emailcsv https://rowsandall.com/rowers/workout/2492/emailtcx 0 0 2018-05-10 09:56:24+00:00 7876 00:54:33 Naarden goed (2) Europe/Amsterdam water 80.0 lwt
252 250 https://rowsandall.com/rowers/workout/2596/emailcsv https://rowsandall.com/rowers/workout/2596/emailtcx 0 0 2018-05-10 16:15:02+00:00 11983 01:01:26 Imported workout imported from Concept2 log UTC water 80.0 lwt
253 251 https://rowsandall.com/rowers/workout/2485/emailcsv https://rowsandall.com/rowers/workout/2485/emailtcx 0 0 2018-05-10 16:55:01+00:00 8000 00:36:01.500000 6k Europe/Prague water 80.0 lwt
254 252 https://rowsandall.com/rowers/workout/2486/emailcsv https://rowsandall.com/rowers/workout/2486/emailtcx 0 0 2018-05-10 16:55:01+00:00 8000 00:36:01.500000 Racice 2 Europe/Prague water 80.0 lwt
255 253 https://rowsandall.com/rowers/workout/2488/emailcsv https://rowsandall.com/rowers/workout/2488/emailtcx 0 0 2018-05-11 07:02:52+00:00 15364 01:22:34 Naarden 1 Europe/Amsterdam water 80.0 lwt
256 254 https://rowsandall.com/rowers/workout/2504/emailcsv https://rowsandall.com/rowers/workout/2504/emailtcx 0 0 2018-05-12 10:01:00+00:00 16814 01:42:53 DC Summary for your location at 2018-05-12T12:52:00Z: Temperature 21.1C/69.9F. Wind: 3.0 m/s (6.0 kt). Wind Bearing: 30.0 degrees Summary for your location at 2018-05-12T10:52:00Z: Temperature 19.4C/66.9F. Wind: 3.0 m/s (6.0 kt). Wind Bearing: 40.0 degrees Summary for your location at 2018-05-12T11:52:00Z: Temperature 20.6C/69.0F. Wind: 3.6 m/s (7.0 kt). Wind Bearing: 20.0 degrees Summary for your location at 2018-05-12T10:52:26+00:00: Clear. Temperature 64.52F/18.0C. Wind: 0.96 m/s. Wind Bearing: 29 degrees America/New_York water 80.0 lwt
257 255 https://rowsandall.com/rowers/workout/2931/emailcsv https://rowsandall.com/rowers/workout/2931/emailtcx 0 0 2018-05-12 14:22:12+00:00 6510 00:46:56 Test P Europe/Bratislava water 80.0 hwt
258 256 https://rowsandall.com/rowers/workout/2513/emailcsv https://rowsandall.com/rowers/workout/2513/emailtcx 0 0 2018-05-13 07:57:02+00:00 4605 00:35:11.700000 Quad Europe/Bratislava water 80.0 lwt
259 257 https://rowsandall.com/rowers/workout/2595/emailcsv https://rowsandall.com/rowers/workout/2595/emailtcx 0 0 2018-05-13 07:57:02+00:00 4605 00:35:11.600000 Imported workout imported from Concept2 log UTC water 80.0 lwt
260 258 https://rowsandall.com/rowers/workout/2502/emailcsv https://rowsandall.com/rowers/workout/2502/emailtcx 0 0 2018-05-13 09:22:49+00:00 973 00:03:53.900000 Completed a workout (generic) 0.6 mi on 05/13/18 Europe/Bratislava water 80.0 lwt
261 259 https://rowsandall.com/rowers/workout/2503/emailcsv https://rowsandall.com/rowers/workout/2503/emailtcx 0 0 2018-05-13 09:22:49+00:00 973 00:03:53.900000 Completed a workout (generic) 0.6 mi on 05/13/18 Europe/Bratislava water 80.0 lwt
262 260 https://rowsandall.com/rowers/workout/2594/emailcsv https://rowsandall.com/rowers/workout/2594/emailtcx 0 0 2018-05-13 16:50:32+00:00 2723 00:27:17.200000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
263 261 https://rowsandall.com/rowers/workout/2593/emailcsv https://rowsandall.com/rowers/workout/2593/emailtcx 0 0 2018-05-13 16:51:01+00:00 5929 00:43:44.500000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
264 262 https://rowsandall.com/rowers/workout/2855/emailcsv https://rowsandall.com/rowers/workout/2855/emailtcx 0 0 2018-05-14 13:53:04+00:00 6091 00:25:00.200000 Hradiste from csv via rowsandall.com Europe/Prague water 80.0 lwt
265 263 https://rowsandall.com/rowers/workout/2963/emailcsv https://rowsandall.com/rowers/workout/2963/emailtcx 0 0 2018-05-14 13:53:04+00:00 6091 00:25:00.200000 Hradiste from csv via rowsandall.com Europe/Prague water 80.0 hwt
266 264 https://rowsandall.com/rowers/workout/2493/emailcsv https://rowsandall.com/rowers/workout/2493/emailtcx 0 0 2018-05-15 10:35:00+00:00 10526 00:44:01.700000 Turin Europe/Rome water 80.0 lwt
267 265 https://rowsandall.com/rowers/workout/2489/emailcsv https://rowsandall.com/rowers/workout/2489/emailtcx 0 0 2018-05-17 17:40:00+00:00 15364 01:22:34 Naarden 2 Europe/Amsterdam water 80.0 lwt
268 266 https://rowsandall.com/rowers/workout/2464/emailcsv https://rowsandall.com/rowers/workout/2464/emailtcx 0 0 2018-05-18 13:02:00+00:00 6091 00:25:00.200000 Hradiste Failed to download METAR data Failed to download METAR data Failed to download METAR data Failed to download METAR data Failed to download METAR data Europe/Prague water 80.0 lwt
269 267 https://rowsandall.com/rowers/workout/2505/emailcsv https://rowsandall.com/rowers/workout/2505/emailtcx 0 0 2018-05-19 11:55:34+00:00 14274 01:12:33.600000 Roos America/New_York water 80.0 lwt
270 268 https://rowsandall.com/rowers/workout/2506/emailcsv https://rowsandall.com/rowers/workout/2506/emailtcx 0 0 2018-05-19 11:55:34+00:00 7384 00:33:59.800000 Roos (1) America/New_York water 80.0 lwt
271 269 https://rowsandall.com/rowers/workout/2507/emailcsv https://rowsandall.com/rowers/workout/2507/emailtcx 0 0 2018-05-19 12:29:34+00:00 6885 00:38:32.200000 Roos (2) America/New_York water 80.0 lwt
272 270 https://rowsandall.com/rowers/workout/2511/emailcsv https://rowsandall.com/rowers/workout/2511/emailtcx 0 0 2018-05-27 10:17:01+00:00 10663 00:59:29.700000 Test P Europe/Prague water 80.0 lwt
273 271 https://rowsandall.com/rowers/workout/2518/emailcsv https://rowsandall.com/rowers/workout/2518/emailtcx 0 0 2018-05-27 10:17:01+00:00 10663 00:59:29.700000 dubbel Europe/Prague water 80.0 lwt
274 272 https://rowsandall.com/rowers/workout/2592/emailcsv https://rowsandall.com/rowers/workout/2592/emailtcx 0 0 2018-05-27 10:17:01+00:00 10663 00:59:29.600000 Imported workout imported from Concept2 log UTC water 80.0 lwt
275 273 https://rowsandall.com/rowers/workout/2591/emailcsv https://rowsandall.com/rowers/workout/2591/emailtcx 0 0 2018-05-28 15:11:01+00:00 9642 00:56:16.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
276 274 https://rowsandall.com/rowers/workout/2514/emailcsv https://rowsandall.com/rowers/workout/2514/emailtcx 0 0 2018-05-30 18:05:25+00:00 11237 01:04:45.500000 Eight imported through email Europe/Prague water 80.0 lwt
277 275 https://rowsandall.com/rowers/workout/2516/emailcsv https://rowsandall.com/rowers/workout/2516/emailtcx 0 0 2018-05-30 18:05:25+00:00 11237 01:04:45.500000 Twee Zonder imported through email Europe/Prague water 80.0 lwt
278 276 https://rowsandall.com/rowers/workout/2590/emailcsv https://rowsandall.com/rowers/workout/2590/emailtcx 0 0 2018-05-30 18:05:25+00:00 11237 01:04:45.500000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
279 277 https://rowsandall.com/rowers/workout/2512/emailcsv https://rowsandall.com/rowers/workout/2512/emailtcx 0 0 2018-05-31 16:30:07+00:00 8837 00:47:42.500000 Test Europe/Prague water 80.0 lwt
280 278 https://rowsandall.com/rowers/workout/2589/emailcsv https://rowsandall.com/rowers/workout/2589/emailtcx 0 0 2018-05-31 16:30:07+00:00 8837 00:47:42.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
281 279 https://rowsandall.com/rowers/workout/2508/emailcsv https://rowsandall.com/rowers/workout/2508/emailtcx 0 0 2018-06-01 07:57:02+00:00 4605 00:35:11.700000 Piestany Europe/Bratislava water 80.0 lwt
282 280 https://rowsandall.com/rowers/workout/2510/emailcsv https://rowsandall.com/rowers/workout/2510/emailtcx 0 0 2018-06-01 08:02:02+00:00 3975 00:30:08.700000 Piestany (2) Europe/Bratislava water 80.0 lwt
283 281 https://rowsandall.com/rowers/workout/2509/emailcsv https://rowsandall.com/rowers/workout/2509/emailtcx 0 0 2018-06-01 11:30:07+00:00 8837 00:47:42.500000 Test Europe/Prague water 80.0 lwt
284 282 https://rowsandall.com/rowers/workout/2569/emailcsv https://rowsandall.com/rowers/workout/2569/emailtcx 0 0 2018-06-01 15:00:00+00:00 11237 01:04:45.500000 Acht Intervals Europe/Prague water 80.0 lwt
285 283 https://rowsandall.com/rowers/workout/2588/emailcsv https://rowsandall.com/rowers/workout/2588/emailtcx 0 0 2018-06-02 17:00:07+00:00 12511 01:07:58 Imported workout imported from Concept2 log UTC water 80.0 lwt
286 284 https://rowsandall.com/rowers/workout/2587/emailcsv https://rowsandall.com/rowers/workout/2587/emailtcx 0 0 2018-06-03 07:57:02+00:00 10830 01:04:35.900000 Imported workout imported from Concept2 log UTC water 80.0 lwt
287 285 https://rowsandall.com/rowers/workout/2586/emailcsv https://rowsandall.com/rowers/workout/2586/emailtcx 0 0 2018-06-03 15:50:25+00:00 6125 00:48:38.600000 Imported workout imported from Concept2 log UTC rower 80.0 lwt
288 286 https://rowsandall.com/rowers/workout/2535/emailcsv https://rowsandall.com/rowers/workout/2535/emailtcx 0 0 2018-06-05 13:07:02+00:00 0 00:05:01 Test - Delete Europe/Prague rower 80.0 lwt
289 287 https://rowsandall.com/rowers/workout/2536/emailcsv https://rowsandall.com/rowers/workout/2536/emailtcx 0 0 2018-06-05 13:07:02+00:00 0 00:05:01 Test Sync - Delete from tcx via rowsandall.com Europe/Prague rower 80.0 lwt
290 288 https://rowsandall.com/rowers/workout/2537/emailcsv https://rowsandall.com/rowers/workout/2537/emailtcx 0 0 2018-06-05 13:07:02+00:00 0 00:05:01 Test P from tcx via rowsandall.com Europe/Prague rower 80.0 lwt
291 289 https://rowsandall.com/rowers/workout/2538/emailcsv https://rowsandall.com/rowers/workout/2538/emailtcx 0 0 2018-06-05 13:07:02+00:00 0 00:05:01 Test P imported through email Europe/Prague rower 80.0 lwt
292 290 https://rowsandall.com/rowers/workout/2539/emailcsv https://rowsandall.com/rowers/workout/2539/emailtcx 0 0 2018-06-05 13:07:02+00:00 0 00:05:01 Test P imported through email from tcx via rowsandall.com Europe/Prague rower 80.0 lwt
293 291 https://rowsandall.com/rowers/workout/2540/emailcsv https://rowsandall.com/rowers/workout/2540/emailtcx 0 0 2018-06-05 13:07:02+00:00 0 00:05:01 Workout from Background Queue imported through email Europe/Prague rower 80.0 lwt
294 292 https://rowsandall.com/rowers/workout/2624/emailcsv https://rowsandall.com/rowers/workout/2624/emailtcx 0 0 2018-06-05 13:51:01.900000+00:00 12744 01:08:22.100000 imported through ema imported through email Europe/Prague water 80.0 lwt
295 293 https://rowsandall.com/rowers/workout/2534/emailcsv https://rowsandall.com/rowers/workout/2534/emailtcx 0 0 2018-06-05 14:05:02+00:00 0 00:01:33 Import from Polar Flow imported through email Europe/Prague rower 80.0 lwt
296 294 https://rowsandall.com/rowers/workout/2519/emailcsv https://rowsandall.com/rowers/workout/2519/emailtcx 0 0 2018-06-05 14:09:57+00:00 0 00:03:38 TCX from Polar API Europe/Prague water 80.0 lwt
297 295 https://rowsandall.com/rowers/workout/2546/emailcsv https://rowsandall.com/rowers/workout/2546/emailtcx 0 0 2018-06-05 15:51:01+00:00 12744 01:08:22.200000 8x glad Europe/Prague water 80.0 lwt
298 296 https://rowsandall.com/rowers/workout/2547/emailcsv https://rowsandall.com/rowers/workout/2547/emailtcx 0 0 2018-06-05 15:51:01+00:00 12746 01:08:22.200000 1x glad Europe/Prague c-boat 80.0 lwt
299 297 https://rowsandall.com/rowers/workout/2548/emailcsv https://rowsandall.com/rowers/workout/2548/emailtcx 0 68 2018-06-05 15:51:01+00:00 12744 01:08:22.200000 1x glad Europe/Prague water 80.0 lwt
300 298 https://rowsandall.com/rowers/workout/2549/emailcsv https://rowsandall.com/rowers/workout/2549/emailtcx 0 0 2018-06-05 15:51:01+00:00 12746 01:08:22.200000 test Europe/Prague water 80.0 lwt
301 299 https://rowsandall.com/rowers/workout/2550/emailcsv https://rowsandall.com/rowers/workout/2550/emailtcx 0 0 2018-06-05 15:51:01+00:00 12746 01:08:22.200000 test tcx Europe/Prague water 80.0 lwt
302 300 https://rowsandall.com/rowers/workout/2552/emailcsv https://rowsandall.com/rowers/workout/2552/emailtcx 0 0 2018-06-05 15:51:01+00:00 6522 00:33:00 8x glad (1) Europe/Prague water 80.0 lwt
303 301 https://rowsandall.com/rowers/workout/2585/emailcsv https://rowsandall.com/rowers/workout/2585/emailtcx 0 0 2018-06-05 15:51:01+00:00 12744 01:08:22.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
304 302 https://rowsandall.com/rowers/workout/2553/emailcsv https://rowsandall.com/rowers/workout/2553/emailtcx 0 0 2018-06-05 16:24:01+00:00 6213 00:35:19.500000 8x glad (2) Europe/Prague water 80.0 lwt
305 303 https://rowsandall.com/rowers/workout/2584/emailcsv https://rowsandall.com/rowers/workout/2584/emailtcx 0 0 2018-06-06 17:40:24+00:00 5273 00:42:59 Imported workout imported from Concept2 log UTC rower 80.0 lwt
306 304 https://rowsandall.com/rowers/workout/2545/emailcsv https://rowsandall.com/rowers/workout/2545/emailtcx 0 0 2018-06-08 07:25:33+00:00 1994 00:01:59.400000 Test Europe/Prague rower 80.0 hwt
307 305 https://rowsandall.com/rowers/workout/2560/emailcsv https://rowsandall.com/rowers/workout/2560/emailtcx 0 0 2018-06-11 15:21:01+00:00 10369 00:56:21.400000 Intervals Tests (7) imported through email Europe/Prague water 80.0 lwt
308 306 https://rowsandall.com/rowers/workout/2568/emailcsv https://rowsandall.com/rowers/workout/2568/emailtcx 0 11 2018-06-11 15:21:01+00:00 10369 00:56:21.400000 3/2/1 5x5min/5min 5x5min/5min Europe/Prague water 80.0 lwt
309 307 https://rowsandall.com/rowers/workout/2583/emailcsv https://rowsandall.com/rowers/workout/2583/emailtcx 0 0 2018-06-11 15:21:01+00:00 10369 00:56:21.400000 Imported workout imported from Concept2 log UTC water 80.0 lwt
310 308 https://rowsandall.com/rowers/workout/2554/emailcsv https://rowsandall.com/rowers/workout/2554/emailtcx 0 0 2018-06-13 14:18:19+00:00 16543 01:30:01.300000 Intervals Tests America/New_York rower 80.0 lwt
311 309 https://rowsandall.com/rowers/workout/2555/emailcsv https://rowsandall.com/rowers/workout/2555/emailtcx 0 0 2018-06-13 14:18:35+00:00 12205 01:03:29.500000 Intervals Tests (2) America/New_York rower 80.0 lwt
312 310 https://rowsandall.com/rowers/workout/2556/emailcsv https://rowsandall.com/rowers/workout/2556/emailtcx 0 0 2018-06-13 14:18:48+00:00 9016 00:48:28.100000 Intervals Tests (3) 9x1km America/New_York rower 80.0 lwt
313 311 https://rowsandall.com/rowers/workout/2557/emailcsv https://rowsandall.com/rowers/workout/2557/emailtcx 0 0 2018-06-13 14:19:01+00:00 4789 00:22:05 Intervals Tests (4) America/New_York rower 80.0 lwt
314 312 https://rowsandall.com/rowers/workout/2558/emailcsv https://rowsandall.com/rowers/workout/2558/emailtcx 0 0 2018-06-13 14:19:19+00:00 0 00:22:54 Intervals Tests (5) Europe/Prague rower 80.0 lwt
315 313 https://rowsandall.com/rowers/workout/2582/emailcsv https://rowsandall.com/rowers/workout/2582/emailtcx 0 0 2018-06-13 16:11:02+00:00 4191 00:23:36.400000 Imported workout imported from Concept2 log UTC water 80.0 lwt
316 314 https://rowsandall.com/rowers/workout/2581/emailcsv https://rowsandall.com/rowers/workout/2581/emailtcx 0 0 2018-06-15 08:05:04+00:00 7301 00:39:44.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
317 315 https://rowsandall.com/rowers/workout/2580/emailcsv https://rowsandall.com/rowers/workout/2580/emailtcx 0 0 2018-06-16 08:04:00+00:00 5182 00:40:48.100000 Imported workout imported from Concept2 log UTC water 80.0 lwt
318 316 https://rowsandall.com/rowers/workout/2579/emailcsv https://rowsandall.com/rowers/workout/2579/emailtcx 0 0 2018-06-16 13:17:06+00:00 8196 00:52:10.500000 Imported workout imported from Concept2 log UTC water 80.0 lwt
319 317 https://rowsandall.com/rowers/workout/2950/emailcsv https://rowsandall.com/rowers/workout/2950/emailtcx 0 0 2018-06-17 10:23:24+00:00 6004 01:00:54 Lunch Run Europe/Vienna water 80.0 hwt
320 318 https://rowsandall.com/rowers/workout/2954/emailcsv https://rowsandall.com/rowers/workout/2954/emailtcx 0 0 2018-06-17 10:23:24+00:00 6004 01:00:54 Lunch Run Europe/Vienna water 80.0 hwt
321 319 https://rowsandall.com/rowers/workout/3035/emailcsv https://rowsandall.com/rowers/workout/3035/emailtcx 0 17 2018-06-17 10:23:24+00:00 6004 01:00:54 Lunch Run Europe/Vienna other 80.0 hwt
322 320 https://rowsandall.com/rowers/workout/2578/emailcsv https://rowsandall.com/rowers/workout/2578/emailtcx 0 0 2018-06-18 16:05:05+00:00 10313 00:55:54.900000 Imported workout imported from Concept2 log UTC water 80.0 lwt
323 321 https://rowsandall.com/rowers/workout/2948/emailcsv https://rowsandall.com/rowers/workout/2948/emailtcx 0 0 2018-06-18 16:05:05+00:00 10313 00:55:54 Steady Europe/Prague water 80.0 hwt
324 322 https://rowsandall.com/rowers/workout/2952/emailcsv https://rowsandall.com/rowers/workout/2952/emailtcx 0 0 2018-06-18 16:05:05+00:00 10313 00:55:54 Steady Europe/Prague water 80.0 hwt
325 323 https://rowsandall.com/rowers/workout/2573/emailcsv https://rowsandall.com/rowers/workout/2573/emailtcx 0 0 2018-06-19 05:57:02+00:00 10437 00:56:06.900000 Pink Europe/Prague water 80.0 lwt
326 324 https://rowsandall.com/rowers/workout/2577/emailcsv https://rowsandall.com/rowers/workout/2577/emailtcx 0 0 2018-06-19 05:57:02+00:00 10437 00:56:06.900000 Imported workout imported from Concept2 log UTC water 80.0 lwt
327 325 https://rowsandall.com/rowers/workout/2946/emailcsv https://rowsandall.com/rowers/workout/2946/emailtcx 0 0 2018-06-19 05:57:04+00:00 10437 00:56:04 3x6min Europe/Prague water 80.0 hwt
328 326 https://rowsandall.com/rowers/workout/2570/emailcsv https://rowsandall.com/rowers/workout/2570/emailtcx 0 0 2018-06-19 15:11:14.220000+00:00 7538 00:56:14.600000 Test Europe/Vienna water 80.0 lwt
329 327 https://rowsandall.com/rowers/workout/2571/emailcsv https://rowsandall.com/rowers/workout/2571/emailtcx 0 0 2018-06-20 18:24:08+00:00 7538 00:56:14.500000 Ritmo Europe/Vienna water 80.0 lwt
330 328 https://rowsandall.com/rowers/workout/2858/emailcsv https://rowsandall.com/rowers/workout/2858/emailtcx 0 0 2018-06-22 04:33:02.500000+00:00 3344 00:16:55.700000 imported through ema imported through email Europe/Prague water 80.0 hwt
331 329 https://rowsandall.com/rowers/workout/2576/emailcsv https://rowsandall.com/rowers/workout/2576/emailtcx 0 0 2018-06-22 05:41:04+00:00 9298 00:50:44 Imported workout imported from Concept2 log UTC water 80.0 lwt
332 330 https://rowsandall.com/rowers/workout/2944/emailcsv https://rowsandall.com/rowers/workout/2944/emailtcx 0 0 2018-06-22 05:41:04+00:00 9298 00:50:44 Steady Europe/Prague water 80.0 hwt
333 331 https://rowsandall.com/rowers/workout/2575/emailcsv https://rowsandall.com/rowers/workout/2575/emailtcx 0 0 2018-06-22 06:33:01+00:00 3344 00:16:55.700000 Imported workout imported from Concept2 log UTC water 80.0 lwt
334 332 https://rowsandall.com/rowers/workout/2942/emailcsv https://rowsandall.com/rowers/workout/2942/emailtcx 27 11 2018-06-22 06:33:02+00:00 3344 00:16:54 Steady (2) Europe/Prague water 80.0 hwt
335 333 https://rowsandall.com/rowers/workout/2940/emailcsv https://rowsandall.com/rowers/workout/2940/emailtcx 0 0 2018-06-22 10:45:04+00:00 7540 00:56:14 test delete Europe/Vienna water 80.0 hwt
336 334 https://rowsandall.com/rowers/workout/2725/emailcsv https://rowsandall.com/rowers/workout/2725/emailtcx 0 0 2018-06-22 12:17:56+00:00 15642 01:15:00 Mike 3x20min/5min Europe/Prague water 80.0 lwt
337 335 https://rowsandall.com/rowers/workout/2726/emailcsv https://rowsandall.com/rowers/workout/2726/emailtcx 0 0 2018-06-22 12:17:56+00:00 15642 01:15:00 Mike test Europe/Prague water 80.0 lwt
338 336 https://rowsandall.com/rowers/workout/2848/emailcsv https://rowsandall.com/rowers/workout/2848/emailtcx 0 0 2018-06-24 05:34:07+00:00 10194 00:57:48.900000 Imported Europe/Prague water 80.0 lwt
339 337 https://rowsandall.com/rowers/workout/2849/emailcsv https://rowsandall.com/rowers/workout/2849/emailtcx 0 0 2018-06-24 05:34:07.200000+00:00 10194 00:57:48.900000 Imported Europe/Prague water 80.0 lwt
340 338 https://rowsandall.com/rowers/workout/2957/emailcsv https://rowsandall.com/rowers/workout/2957/emailtcx 0 0 2018-06-24 05:34:07.200000+00:00 10194 00:57:48.900000 Imported Europe/Prague water 80.0 hwt
341 339 https://rowsandall.com/rowers/workout/2938/emailcsv https://rowsandall.com/rowers/workout/2938/emailtcx 0 0 2018-06-24 07:34:07+00:00 10194 00:57:43 Double Europe/Prague water 80.0 hwt
342 340 https://rowsandall.com/rowers/workout/3059/emailcsv https://rowsandall.com/rowers/workout/3059/emailtcx 0 0 2018-06-26 15:06:01+00:00 10393 01:00:55.900000 C2 Import Workout from 2018-06-26 15:06:01+00:00 imported from Concept2 log UTC water 80.0 lwt
343 341 https://rowsandall.com/rowers/workout/2936/emailcsv https://rowsandall.com/rowers/workout/2936/emailtcx 42 30 2018-06-26 15:06:04+00:00 5651 00:31:24 Sprintervals Europe/Prague water 80.0 hwt
344 342 https://rowsandall.com/rowers/workout/2934/emailcsv https://rowsandall.com/rowers/workout/2934/emailtcx 0 0 2018-06-26 15:38:08+00:00 1056 00:05:12 Sprintervals (2) Europe/Brussels water 80.0 hwt
345 343 https://rowsandall.com/rowers/workout/2932/emailcsv https://rowsandall.com/rowers/workout/2932/emailtcx 0 0 2018-06-26 15:44:06+00:00 3684 00:22:50 Sprintervals (3) Europe/Prague water 80.0 hwt
346 344 https://rowsandall.com/rowers/workout/2959/emailcsv https://rowsandall.com/rowers/workout/2959/emailtcx 160 38 2018-06-30 05:31:02.200000+00:00 13878 01:21:16.600000 from speedcoach2v2.15 via rowsandall.com Europe/Prague water 80.0 hwt
347 345 https://rowsandall.com/rowers/workout/2958/emailcsv https://rowsandall.com/rowers/workout/2958/emailtcx 0 0 2018-06-30 07:31:01+00:00 13878 01:21:16.600000 C2 Import Workout from 2018-06-30 07:31:01+00:00 imported from Concept2 log UTC water 80.0 lwt
348 346 https://rowsandall.com/rowers/workout/3030/emailcsv https://rowsandall.com/rowers/workout/3030/emailtcx 80 6031 2018-07-01 11:57:30+00:00 12879 00:57:00 Ride to pub Europe/Prague other 80.0 hwt
349 347 https://rowsandall.com/rowers/workout/3031/emailcsv https://rowsandall.com/rowers/workout/3031/emailtcx 0 0 2018-07-02 16:21:01+00:00 12532 01:09:16.500000 Test P Europe/Prague water 80.0 hwt
350 348 https://rowsandall.com/rowers/workout/3058/emailcsv https://rowsandall.com/rowers/workout/3058/emailtcx 0 0 2018-07-02 16:21:01+00:00 2858 00:15:40.600000 C2 Import Workout from 2018-07-02 16:21:01+00:00 imported from Concept2 log UTC water 80.0 lwt
351 349 https://rowsandall.com/rowers/workout/3063/emailcsv https://rowsandall.com/rowers/workout/3063/emailtcx 120 79 2018-07-02 16:21:01+00:00 12532 01:09:16.500000 Test Strava Export Europe/Prague water 80.0 hwt
352 350 https://rowsandall.com/rowers/workout/3064/emailcsv https://rowsandall.com/rowers/workout/3064/emailtcx 120 79 2018-07-02 16:21:01+00:00 12532 01:09:16.500000 Test Strava Export Europe/Prague water 80.0 hwt
353 351 https://rowsandall.com/rowers/workout/3065/emailcsv https://rowsandall.com/rowers/workout/3065/emailtcx 0 0 2018-07-02 16:21:01+00:00 12532 01:09:16.500000 Test Strava Export Europe/Prague water 80.0 hwt
354 352 https://rowsandall.com/rowers/workout/3066/emailcsv https://rowsandall.com/rowers/workout/3066/emailtcx 120 79 2018-07-02 16:21:01+00:00 12532 01:09:16.500000 Test Strava Export Europe/Prague water 80.0 hwt
355 353 https://rowsandall.com/rowers/workout/3068/emailcsv https://rowsandall.com/rowers/workout/3068/emailtcx 0 0 2018-07-02 16:21:01+00:00 12532 01:09:16.500000 Should be exported To Strava Europe/Prague water 80.0 hwt
356 354 https://rowsandall.com/rowers/workout/3070/emailcsv https://rowsandall.com/rowers/workout/3070/emailtcx 120 79 2018-07-02 16:21:01+00:00 12532 01:09:16.500000 Should Not Be Exported To Strava Europe/Prague water 80.0 hwt
357 355 https://rowsandall.com/rowers/workout/3057/emailcsv https://rowsandall.com/rowers/workout/3057/emailtcx 0 0 2018-07-02 16:40:02+00:00 2001 00:08:29 C2 Import Workout from 2018-07-02 16:40:02+00:00 imported from Concept2 log UTC water 80.0 lwt
358 356 https://rowsandall.com/rowers/workout/3056/emailcsv https://rowsandall.com/rowers/workout/3056/emailtcx 0 0 2018-07-02 16:50:02+00:00 2136 00:09:16.200000 C2 Import Workout from 2018-07-02 16:50:02+00:00 imported from Concept2 log UTC water 80.0 lwt
359 357 https://rowsandall.com/rowers/workout/3055/emailcsv https://rowsandall.com/rowers/workout/3055/emailtcx 0 0 2018-07-02 17:01:02+00:00 2058 00:08:38.800000 C2 Import Workout from 2018-07-02 17:01:02+00:00 imported from Concept2 log UTC water 80.0 lwt
360 358 https://rowsandall.com/rowers/workout/3008/emailcsv https://rowsandall.com/rowers/workout/3008/emailtcx 22 0 2018-07-02 17:01:05+00:00 2058 00:08:35 2ks with focus (4) Europe/Prague water 80.0 hwt
361 359 https://rowsandall.com/rowers/workout/3028/emailcsv https://rowsandall.com/rowers/workout/3028/emailtcx 22 0 2018-07-02 17:01:05+00:00 2058 00:08:35 2ks with focus (4) Europe/Prague water 80.0 hwt
362 360 https://rowsandall.com/rowers/workout/3054/emailcsv https://rowsandall.com/rowers/workout/3054/emailtcx 0 0 2018-07-02 17:11:02+00:00 2149 00:09:47.300000 C2 Import Workout from 2018-07-02 17:11:02+00:00 imported from Concept2 log UTC water 80.0 lwt
363 361 https://rowsandall.com/rowers/workout/3006/emailcsv https://rowsandall.com/rowers/workout/3006/emailtcx 27 0 2018-07-02 17:11:05+00:00 2149 00:09:44 2ks with focus (5) Europe/Prague water 80.0 hwt
364 362 https://rowsandall.com/rowers/workout/3026/emailcsv https://rowsandall.com/rowers/workout/3026/emailtcx 27 0 2018-07-02 17:11:05+00:00 2149 00:09:44 2ks with focus (5) Europe/Prague water 80.0 hwt
365 363 https://rowsandall.com/rowers/workout/3053/emailcsv https://rowsandall.com/rowers/workout/3053/emailtcx 0 0 2018-07-02 17:24:02+00:00 1328 00:06:15.500000 C2 Import Workout from 2018-07-02 17:24:02+00:00 imported from Concept2 log UTC water 80.0 lwt
366 364 https://rowsandall.com/rowers/workout/3004/emailcsv https://rowsandall.com/rowers/workout/3004/emailtcx 10 0 2018-07-02 17:24:05+00:00 1328 00:06:12 2ks with focus (6) Europe/Prague water 80.0 hwt
367 365 https://rowsandall.com/rowers/workout/3024/emailcsv https://rowsandall.com/rowers/workout/3024/emailtcx 10 0 2018-07-02 17:24:05+00:00 1328 00:06:12 2ks with focus (6) Europe/Prague water 80.0 hwt
368 366 https://rowsandall.com/rowers/workout/2964/emailcsv https://rowsandall.com/rowers/workout/2964/emailtcx 0 0 2018-07-04 15:06:42+00:00 7350 00:31:07 Test Europe/Prague rower 80.0 hwt
369 367 https://rowsandall.com/rowers/workout/2965/emailcsv https://rowsandall.com/rowers/workout/2965/emailtcx 0 103 2018-07-04 16:19:01+00:00 10471 01:00:27.200000 Test TRIMP Europe/Prague water 80.0 hwt
370 368 https://rowsandall.com/rowers/workout/2966/emailcsv https://rowsandall.com/rowers/workout/2966/emailtcx 0 98 2018-07-04 16:19:01+00:00 10471 01:00:27.200000 Test Rscore Europe/Prague water 80.0 hwt
371 369 https://rowsandall.com/rowers/workout/3052/emailcsv https://rowsandall.com/rowers/workout/3052/emailtcx 0 0 2018-07-04 16:19:01+00:00 10471 01:00:27.100000 C2 Import Workout from 2018-07-04 16:19:01+00:00 imported from Concept2 log UTC water 80.0 lwt
372 370 https://rowsandall.com/rowers/workout/2967/emailcsv https://rowsandall.com/rowers/workout/2967/emailtcx 0 96 2018-07-04 16:19:02+00:00 10471 01:00:26 Startjes from csv via rowsandall.com Europe/Prague water 80.0 hwt
373 371 https://rowsandall.com/rowers/workout/3002/emailcsv https://rowsandall.com/rowers/workout/3002/emailtcx 0 98 2018-07-04 16:19:02+00:00 10471 01:00:26 Startjes Europe/Prague water 80.0 hwt
374 372 https://rowsandall.com/rowers/workout/3022/emailcsv https://rowsandall.com/rowers/workout/3022/emailtcx 0 98 2018-07-04 16:19:02+00:00 10471 01:00:26 Startjes Europe/Prague water 80.0 hwt
375 373 https://rowsandall.com/rowers/workout/3051/emailcsv https://rowsandall.com/rowers/workout/3051/emailtcx 0 0 2018-07-07 07:43:02+00:00 2874 00:16:39.700000 C2 Import Workout from 2018-07-07 07:43:02+00:00 imported from Concept2 log UTC water 80.0 lwt
376 374 https://rowsandall.com/rowers/workout/3000/emailcsv https://rowsandall.com/rowers/workout/3000/emailtcx 17 0 2018-07-07 07:43:03+00:00 2874 00:16:38 2x race prep Europe/Prague water 80.0 hwt
377 375 https://rowsandall.com/rowers/workout/3020/emailcsv https://rowsandall.com/rowers/workout/3020/emailtcx 17 0 2018-07-07 07:43:03+00:00 2874 00:16:38 2x race prep Europe/Prague water 80.0 hwt
378 376 https://rowsandall.com/rowers/workout/3050/emailcsv https://rowsandall.com/rowers/workout/3050/emailtcx 0 0 2018-07-07 08:01:01+00:00 743 00:02:45.500000 C2 Import Workout from 2018-07-07 08:01:01+00:00 imported from Concept2 log UTC water 80.0 lwt
379 377 https://rowsandall.com/rowers/workout/2998/emailcsv https://rowsandall.com/rowers/workout/2998/emailtcx 2 0 2018-07-07 08:01:02+00:00 743 00:02:44 2x race prep (2) Europe/Prague bike 80.0 hwt
380 378 https://rowsandall.com/rowers/workout/3018/emailcsv https://rowsandall.com/rowers/workout/3018/emailtcx 2 0 2018-07-07 08:01:02+00:00 743 00:02:44 2x race prep (2) Europe/Prague water 80.0 hwt
381 379 https://rowsandall.com/rowers/workout/3049/emailcsv https://rowsandall.com/rowers/workout/3049/emailtcx 0 0 2018-07-07 08:05:03+00:00 2827 00:15:21.800000 C2 Import Workout from 2018-07-07 08:05:03+00:00 imported from Concept2 log UTC water 80.0 lwt
382 380 https://rowsandall.com/rowers/workout/2996/emailcsv https://rowsandall.com/rowers/workout/2996/emailtcx 21 0 2018-07-07 08:05:06+00:00 2827 00:15:18 2x race prep (3) Europe/Prague water 80.0 hwt
383 381 https://rowsandall.com/rowers/workout/3016/emailcsv https://rowsandall.com/rowers/workout/3016/emailtcx 21 0 2018-07-07 08:05:06+00:00 2827 00:15:18 2x race prep (3) Europe/Prague water 80.0 hwt
384 382 https://rowsandall.com/rowers/workout/3048/emailcsv https://rowsandall.com/rowers/workout/3048/emailtcx 0 0 2018-07-07 08:22:01+00:00 749 00:03:12.500000 C2 Import Workout from 2018-07-07 08:22:01+00:00 imported from Concept2 log UTC water 80.0 lwt
385 383 https://rowsandall.com/rowers/workout/2994/emailcsv https://rowsandall.com/rowers/workout/2994/emailtcx 4 0 2018-07-07 08:22:02+00:00 749 00:03:11 2x race prep (4) Europe/Prague water 80.0 hwt
386 384 https://rowsandall.com/rowers/workout/3014/emailcsv https://rowsandall.com/rowers/workout/3014/emailtcx 4 0 2018-07-07 08:22:02+00:00 749 00:03:11 2x race prep (4) Europe/Prague water 80.0 hwt
387 385 https://rowsandall.com/rowers/workout/3047/emailcsv https://rowsandall.com/rowers/workout/3047/emailtcx 0 0 2018-07-07 08:27:03+00:00 2058 00:11:55.800000 C2 Import Workout from 2018-07-07 08:27:03+00:00 imported from Concept2 log UTC water 80.0 lwt
388 386 https://rowsandall.com/rowers/workout/2992/emailcsv https://rowsandall.com/rowers/workout/2992/emailtcx 13 14 2018-07-07 08:27:06+00:00 2058 00:11:52 2x race prep (5) Europe/Prague water 75.0 hwt
389 387 https://rowsandall.com/rowers/workout/3012/emailcsv https://rowsandall.com/rowers/workout/3012/emailtcx 13 15 2018-07-07 08:27:06+00:00 2058 00:11:52 2x race prep (5) Europe/Prague water 80.0 hwt
390 388 https://rowsandall.com/rowers/workout/2969/emailcsv https://rowsandall.com/rowers/workout/2969/emailtcx 100 116 2018-07-08 13:17:02+00:00 10372 01:00:18.100000 HRTSS Europe/Prague water 80.0 hwt
391 389 https://rowsandall.com/rowers/workout/3046/emailcsv https://rowsandall.com/rowers/workout/3046/emailtcx 0 0 2018-07-08 13:17:02+00:00 10372 01:00:18 C2 Import Workout from 2018-07-08 13:17:02+00:00 imported from Concept2 log UTC water 80.0 lwt
392 390 https://rowsandall.com/rowers/workout/3034/emailcsv https://rowsandall.com/rowers/workout/3034/emailtcx 0 0 2018-07-08 13:17:08+00:00 10372 01:00:12 Tempovky Europe/Prague water 80.0 hwt
393 391 https://rowsandall.com/rowers/workout/3045/emailcsv https://rowsandall.com/rowers/workout/3045/emailtcx 0 0 2018-07-13 13:08:00+00:00 2481 00:13:41 C2 Import Workout from 2018-07-13 13:08:00+00:00 imported from Concept2 log UTC water 80.0 lwt
394 392 https://rowsandall.com/rowers/workout/3044/emailcsv https://rowsandall.com/rowers/workout/3044/emailtcx 0 0 2018-07-13 13:23:01+00:00 4085 00:22:09.200000 C2 Import Workout from 2018-07-13 13:23:01+00:00 imported from Concept2 log UTC water 80.0 lwt
395 393 https://rowsandall.com/rowers/workout/3043/emailcsv https://rowsandall.com/rowers/workout/3043/emailtcx 0 0 2018-07-14 08:59:02+00:00 7051 00:50:00.500000 C2 Import Workout from 2018-07-14 08:59:02+00:00 imported from Concept2 log UTC water 80.0 lwt
396 394 https://rowsandall.com/rowers/workout/3042/emailcsv https://rowsandall.com/rowers/workout/3042/emailtcx 0 0 2018-07-14 13:33:00+00:00 4471 00:51:42.100000 C2 Import Workout from 2018-07-14 13:33:00+00:00 imported from Concept2 log UTC water 80.0 lwt
397 395 https://rowsandall.com/rowers/workout/3041/emailcsv https://rowsandall.com/rowers/workout/3041/emailtcx 0 0 2018-07-14 15:48:01+00:00 4486 00:56:58.100000 C2 Import Workout from 2018-07-14 15:48:01+00:00 imported from Concept2 log UTC water 80.0 lwt
398 396 https://rowsandall.com/rowers/workout/3040/emailcsv https://rowsandall.com/rowers/workout/3040/emailtcx 0 0 2018-07-15 06:10:01+00:00 4233 00:29:17 C2 Import Workout from 2018-07-15 06:10:01+00:00 imported from Concept2 log UTC water 80.0 lwt
399 397 https://rowsandall.com/rowers/workout/3039/emailcsv https://rowsandall.com/rowers/workout/3039/emailtcx 0 0 2018-07-15 09:01:01+00:00 4978 00:41:45 C2 Import Workout from 2018-07-15 09:01:01+00:00 imported from Concept2 log UTC water 80.0 lwt
400 398 https://rowsandall.com/rowers/workout/3038/emailcsv https://rowsandall.com/rowers/workout/3038/emailtcx 0 0 2018-07-18 05:00:01+00:00 11159 00:59:58 C2 Import Workout from 2018-07-18 05:00:01+00:00 imported from Concept2 log UTC water 80.0 lwt
401 399 https://rowsandall.com/rowers/workout/3037/emailcsv https://rowsandall.com/rowers/workout/3037/emailtcx 0 0 2018-07-20 09:29:01+00:00 8436 00:45:44.500000 C2 Import Workout from 2018-07-20 09:29:01+00:00 imported from Concept2 log UTC water 80.0 lwt
402 400 https://rowsandall.com/rowers/workout/3036/emailcsv https://rowsandall.com/rowers/workout/3036/emailtcx 0 0 2018-07-21 05:13:03+00:00 9639 00:54:19.500000 C2 Import Workout from 2018-07-21 05:13:03+00:00 imported from Concept2 log UTC water 80.0 lwt
403 401 https://rowsandall.com/rowers/workout/3061/emailcsv https://rowsandall.com/rowers/workout/3061/emailtcx 77 43 2018-08-17 05:16:03+00:00 8315 00:45:11.400000 Brnenske 2k Europe/Prague water 80.0 hwt
404 402 https://rowsandall.com/rowers/workout/3075/emailcsv https://rowsandall.com/rowers/workout/3075/emailtcx 83 28 2018-08-18 07:54:04+00:00 9590 00:55:08 Technique 2x Europe/Prague water 80.0 hwt
405 403 https://rowsandall.com/rowers/workout/3074/emailcsv https://rowsandall.com/rowers/workout/3074/emailtcx 94 17 2018-08-26 22:00:01.500000+00:00 9903 00:54:36 Imported Europe/Prague bike 80.0 hwt
406 404 https://rowsandall.com/rowers/workout/3076/emailcsv https://rowsandall.com/rowers/workout/3076/emailtcx 94 1104 2018-08-26 22:00:01.500000+00:00 9903 00:54:36 Imported Europe/Prague bike 80.0 hwt
407 405 https://rowsandall.com/rowers/workout/3072/emailcsv https://rowsandall.com/rowers/workout/3072/emailtcx 0 0 2018-08-27 14:36:47+00:00 5855 00:14:58.700000 Bike Erg Europe/Prague bikeerg 80.0 hwt
408 406 https://rowsandall.com/rowers/workout/3073/emailcsv https://rowsandall.com/rowers/workout/3073/emailtcx 15 4 2018-08-27 14:36:47+00:00 5855 00:14:58.700000 Bike Erg Europe/Prague bike 80.0 hwt
409 407 https://rowsandall.com/rowers/workout/3077/emailcsv https://rowsandall.com/rowers/workout/3077/emailtcx 0 51 2018-09-11 05:31:02+00:00 7490 00:35:07.500000 7.5k Europe/Prague water 80.0 hwt
410 408 https://rowsandall.com/rowers/workout/3080/emailcsv https://rowsandall.com/rowers/workout/3080/emailtcx 0 0 2018-09-12 04:17:04+00:00 5921 00:34:50 Sofia part II Europe/Sofia other 80.0 hwt
411 409 https://rowsandall.com/rowers/workout/3079/emailcsv https://rowsandall.com/rowers/workout/3079/emailtcx 87 60 2018-09-13 12:15:58+00:00 23476 00:59:59.700000 Mike 2 Europe/Prague rower 80.0 hwt
412 410 https://rowsandall.com/rowers/workout/3078/emailcsv https://rowsandall.com/rowers/workout/3078/emailtcx 94 59 2018-09-14 13:02:04+00:00 24267 00:59:57.200000 Mike Europe/Prague rower 80.0 hwt
+203 -54
View File
@@ -1,60 +1,209 @@
// var opts = { google.charts.load('current', {'packages':['gauge','corechart']});
// lines: 12, google.charts.setOnLoadCallback(drawSPMChart);
// angle: 0.15, google.charts.setOnLoadCallback(drawSpeedChart);
// lineWidth: 0.44, google.charts.setOnLoadCallback(drawPowerChart);
// pointer: { google.charts.setOnLoadCallback(drawHRChart);
// length: 0.9, google.charts.setOnLoadCallback(drawStrokeAngleChart);
// strokeWidth: 0.035,
// color: '#000000'
// },
// limitMax: 'false',
// // percentColors: [[0.0, "#a9d70b" ], [0.50, "#a9d70b"], [1.0, "#a9d70b"]], // !!!!
// strokeColor: '#E0E0E0',
// generateGradient: true
// };
// var target = document.getElementById('angles');
// var gauge = new Gauge(target).setOptions(opts);
// gauge.maxValue = 90;
// gauge.minValue = -90;
// gauge.animationSpeed = 5;
// gauge.set(-75);
// https://github.com/bernii/gauge.js/issues/193 var spmdata = [
['Label', 'Value'],
['SPM', 21],
];
var speeddata = [
['Label', 'Value'],
['V m/s', 0],
];
var opts = { var powerdata = [
angle: 0, // The span of the gauge arc ['Label','Value'],
lineWidth: 0.2, // The line thickness ['PWR',150],
radiusScale: 0.89, // Relative radius ]
pointer: {
length: 0.54, // // Relative to gauge radius
strokeWidth: 0.053, // The thickness
color: '#000000' // Fill color
},
limitMax: false, // If false, max value increases automatically if value > maxValue
limitMin: false, // If true, the min value of the gauge will be fixed
colorStart: '#6FADCF', // Colors
colorStop: '#8FC0DA', // just experiment with them
strokeColor: '#E0E0E0', // to see which ones work best for you
generateGradient: true,
highDpiSupport: true, // High resolution support
staticZones: [
{strokeStyle: "#00FF00", min: 0, max: 2}, // Greem
{strokeStyle: "#0000FF", min: 2, max: 3}, // Blue`
{strokeStyle: "#00FFFF", min: 3, max: 4}, // Cyan
{strokeStyle: "#FFDD00", min: 4, max: 5}, // Orange
{strokeStyle: "#FF0000", min: 5, max: 6} // Red
],
}; var hrdata = [
var target = document.getElementById('basic'); // your canvas element ['Label','Value'],
var gaugeboatspeed = new Gauge(target).setOptions(opts); // create sexy gauge! ['HR',110],
gaugeboatspeed.maxValue = 6; // set max gauge value ]
gaugeboatspeed.setMinValue(0); // Prefer setter over gauge.minValue = 0
gaugeboatspeed.animationSpeed = 10; // set animation speed (32 is default value)
gaugeboatspeed.set(0); // set actual value
// Define set_basic(values) so that gauges can be set by metricsgroups var angledata = [
function set_basic() { ['Angle', 'deg'],
gaugeboatspeed.set(boatspeed_now); ['slip', 10 ],
['load', 50],
['unload', 50],
['wash', 10],
['recovery',240 ]
]
var anglesoptions = {
title: 'Stroke Angles',
legend: 'none',
pieHole: 0.5,
chartArea: { width: "100%" },
pieStartAngle: 35,
pieSliceText: 'value',
pieSliceTextStyle: {color:'black',fontSize:12},
slices: {
0: { color: 'lightblue' },
1: { color: 'lightgreen' },
2: { color: 'yellow'},
3: { color: 'orange'},
4: { color: 'transparent', textStyle: {color:'transparent'}}
} }
};
var hroptions = {
min: 100, max: 200,
width: 400, height: 120,
greenFrom: 100, greenTo: 135,
yellowFrom: 135,yellowTo: 157,
redFrom: 157, redTo: 200,
minorTicks: 5
};
var spmoptions = {
min:0, max: 50,
width: 400, height: 120,
greenFrom: 20, greenTo: 30,
yellowFrom: 30,yellowTo: 40,
redFrom: 40, redTo: 50,
majorTicks: ['0','10','20','30','40','50'],
minorTicks: 10
};
var speedoptions = {
min:0, max: 6,
width: 400, height: 120,
greenFrom: 2, greenTo: 4,
yellowFrom: 4,yellowTo: 5,
redFrom: 5, redTo: 6,
majorTicks: ['0','1','2','3','4','5','6'],
minorTicks: 10
};
var poweroptions = {
min: 0, max: 1000,
width: 400, height: 120,
greenFrom: 100, greenTo: 200,
yellowFrom: 200,yellowTo: 400,
redFrom: 400, redTo: 1000,
majorTicks: ['0','200','400','600','800','1000'],
minorTicks: 5
};
var dataspm = null;
var dataspeed = null;
var spmchart = null;
var speedchart = null;
var powerchart = null;
var datapower = null;
var dataangles = null;
// SPM chart
function drawSPMChart() {
console.log('first draw SPM chart');
dataspm = new google.visualization.arrayToDataTable(spmdata);
try {
spmchart = new google.visualization.Gauge(document.getElementById('basic_spm'));
spmchart.draw(dataspm,spmoptions);
} catch(err) {
}
// spmchart.draw(data, spmoptions);
// Define set_basic(values) so that gauges can be set by metricsgroups
};
// Speed Chart
function drawSpeedChart() {
dataspeed = new google.visualization.arrayToDataTable(speeddata);
try {
speedchart = new google.visualization.Gauge(document.getElementById('basic_boatspeed'));
speedchart.draw(dataspeed,speedoptions);
} catch(err) {
}
}
// Power chart
function drawPowerChart() {
datapower = new google.visualization.arrayToDataTable(powerdata);
try {
powerchart = new google.visualization.Gauge(document.getElementById('forcepower_power'));
powerchart.draw(datapower,poweroptions)
} catch(err) {
}
}
// HR chart
function drawHRChart() {
datahr = new google.visualization.arrayToDataTable(hrdata);
try {
hrchart = new google.visualization.Gauge(document.getElementById('athlete_hr'));
hrchart.draw(datahr,hroptions);
} catch(err) {
console.log('no hr div');
}
}
// Stroke angle chart
function drawStrokeAngleChart() {
dataangles = new google.visualization.arrayToDataTable(angledata);
try {
angleschart = new google.visualization.PieChart(document.getElementById('stroke_angles'));
angleschart.draw(dataangles,anglesoptions);
} catch(err) {
console.log('no angles div');
}
}
function set_basic() {
dataspm.setCell(0,1,spm_now);
spmchart.draw(dataspm, spmoptions);
dataspeed.setCell(0,1,boatspeed_now);
speedchart.draw(dataspeed,speedoptions);
}
function set_athlete() {
datahr.setCell(0,1,hr_now);
try {
hrchart.draw(datahr,hroptions);
} catch(err) {}
}
function set_stroke() {
var piestartangle = 90+catch_now;
var load = Math.max(-catch_now-slip_now+peakforceangle_now);
var unload = Math.max(finish_now-wash_now-peakforceangle_now) ;
var recovery = Math.max(360+catch_now-finish_now);
// console.log('load ',load,'; unload ',unload,'; recovery ',recovery,'; pie start angle ',piestartangle);
dataangles.setCell(0,1,slip_now);
dataangles.setCell(1,1,load);
dataangles.setCell(2,1,unload);
dataangles.setCell(3,1,wash_now);
dataangles.setCell(4,1,recovery);
anglesoptions.pieStartAngle = piestartangle;
try {
angleschart.draw(dataangles,anglesoptions);
} catch(err) {
console.log('failed: ',err);
}
}
function set_forcepower() {
datapower.setCell(0,1,power_now);
try {
powerchart.draw(datapower,poweroptions);
} catch(err) {}
}
View File
+21
View File
@@ -0,0 +1,21 @@
from .models import Response
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
class ResponseInline(admin.StackedInline):
model = Response
fieldsets = (
('User Details',{'fields':('plan','username','email')}),
('Used Features',
{'fields:':
('logging','technical',
'trend','planning','racing','coaching','export','video','interval')}),
('Paid Plan Questions',
{'fields':('capabilities','fallshort','considered','features')})
)
class ResponseAdmin(admin.ModelAdmin):
#inlines = (ResponseInline,)
list_display = ('plan','id','date','capabilities')
admin.site.register(Response,ResponseAdmin)
+4
View File
@@ -0,0 +1,4 @@
from django.apps import AppConfig
class SurveyConfig(AppConfig):
name = 'app'
+125
View File
@@ -0,0 +1,125 @@
from django.contrib.auth.models import User
from django import forms
from django.forms import ModelForm
from django.conf import settings
from django.db import models
from django.utils import timezone
from rowers.database import *
import datetime
def current_day():
return (datetime.datetime.now(tz=timezone.utc)).date()
class Response(models.Model):
planchoices = (
('basic','Free Athlete'),
('freecoach','Free Coach'),
('pro','Pro'),
('plan','Self-Coach'),
('coach','coach'),
)
plan = models.CharField(max_length=150,choices=planchoices,default='basic')
username = models.CharField(max_length=150,unique=True,verbose_name='User Name',blank=True,null=True)
email = models.EmailField(max_length=150,verbose_name='User Email',blank=True,null=True)
date = models.DateField(default=current_day,verbose_name='survey date')
nrworkouts = models.IntegerField(default=0,verbose_name='nr of workouts per week')
nrworkoutsR = models.IntegerField(default=0,verbose_name='nr of workouts per week on Rowsandall')
hearchoices = (
('wordofmouth','Word of mouth'),
('socialmedia','Social Media (Facebook, Twitter)'),
('otherinternet','Other internet'),
('coach','From my Coach/Coachee'),
('other','Other')
)
heard = models.CharField(max_length=150,blank=True,null=True,
default=None,
choices=hearchoices,verbose_name="How did you hear about Rowsandall")
logging = models.BooleanField(default=False,verbose_name='Logging Workouts')
technial = models.BooleanField(default=False,verbose_name='Technical Analysis of workouts')
trend = models.BooleanField(default=False,verbose_name='Trend Analysis of workouts')
planning = models.BooleanField(default=False,verbose_name='Training planning')
racing = models.BooleanField(default=False,verbose_name='Online racing')
coaching = models.BooleanField(default=False,verbose_name='Coaching')
export = models.BooleanField(default=False,verbose_name='Exporting data to other sites')
video = models.BooleanField(default=False,verbose_name='Video Analysis')
interval = models.BooleanField(default=False,verbose_name='Interval editor')
capabilities = models.NullBooleanField(default=None,null=True,blank=True,
verbose_name='Did you get the capabilities and features that you expected out of Rowsandall')
fallshort = models.TextField(max_length=300,blank=True,verbose_name='Where did Rowsandall fall short of your expectations?')
considerchoices = (
('no','No'),
('pro','Yes: Pro'),
('plan','Yes: Self-Coach'),
('coach','Yes: Coach')
)
considered = models.CharField(max_length=150,choices=considerchoices,default=None,null=True,blank=True,
verbose_name='If you are on a Free plan, did you consider one of the paid plans?')
features = models.TextField(max_length=300,blank=True,
verbose_name="What combination of features would entice you to upgrade to a paid plan")
agreechoices = (
('completely_disagree','Completely Disagree'),
('disagree','Disagree'),
('neutral','Neither agree nor disagree'),
('agree','Agree'),
('completely_agree','Completely Agree'),
)
pricing = models.CharField(
max_length=150,choices=agreechoices,default=None,null=True,blank=True,
verbose_name="The pricing for plans is clear and understandable"
)
subscription = models.CharField(
max_length=150,choices=agreechoices,default=None,null=True,blank=True,
verbose_name="I feel like I get a good value for the price of the subscription"
)
advanced = models.CharField(
max_length=150,choices=agreechoices,default=None,null=True,blank=True,
verbose_name="I feel like the advanced features of Rowsandall are easy to use"
)
mobile = models.CharField(
max_length=150,choices=agreechoices,default=None,null=True,blank=True,
verbose_name="It is easy to use Rowsandall from a mobile device"
)
developer1 = models.CharField(
max_length=150,choices=agreechoices,default=None,null=True,blank=True,
verbose_name="I feel like the developer of Rowsandall is responsive to problems and resolves them quickly"
)
developer2 = models.CharField(
max_length=150,choices=agreechoices,default=None,null=True,blank=True,
verbose_name="I feel like the developer of Rowsandall is responsive to ideas for new features and capabilities"
)
sugchoices = (
('bug','Resolve a bug'),
('newfeature','Add a new feature'),
('improve','Improve the ease of use of the site'),
('easy','Make the site easier to use on mobile devices'),
('other','Other')
)
bug = models.BooleanField(default=False,verbose_name='Resolve a bug')
newfeature = models.BooleanField(default=False,verbose_name='Add a new feature')
improve = models.BooleanField(default=False,verbose_name='Improve the ease of use of the site')
easu = models.BooleanField(default=False,verbose_name='Make the site easier to use on mobile devices')
other = models.BooleanField(default=False,verbose_name='Other')
suggestiontext = models.TextField(
max_length=300,default=None,null=True,blank=True,
verbose_name='My suggestion is (please write a short description of your suggestion)'
)
+10
View File
@@ -0,0 +1,10 @@
from django.conf import settings
from django.conf.urls import url, include
from django.urls import path, re_path
import survey.views as views
urlpatterns = [
#re_path(r'^responses/$',views.ResponseList.as_view(),name='responses_view'),
#re_path(r'^response/(?P<pk>\d+)/$',views.ResponseDetail.as_view(),name='response_view')
]
+34
View File
@@ -0,0 +1,34 @@
from django.shortcuts import render
from django.template.loader import render_to_string
from django.views.generic.edit import UpdateView,DeleteView,CreateView
from django.views.generic import ListView,DetailView
from django.http import (
HttpResponse, HttpResponseRedirect,
JsonResponse,
HttpResponseForbidden, HttpResponseNotAllowed,
HttpResponseNotFound,Http404
)
from django.contrib.auth import authenticate, login, logout
from survey.models import Response
class ResponseList(ListView):
model = Response
template_name = 'response_list.view'
class ResponseCreate(CreateView):
login_required = True
model = Response
template_name = 'response_create.html'
class ResponseUpdate(UpdateView):
login_required = True
model = Response
template_name = 'response_update.html'
class ResponseDetail(DetailView):
login_required = True
model = Response
template_name = 'response.html'
+7
View File
@@ -43,11 +43,13 @@
<link rel="stylesheet" href="/static/css/resetnew.css" /> <link rel="stylesheet" href="/static/css/resetnew.css" />
<link rel="stylesheet" href="/static/fontawesome/css/fontawesome.min.css"> <link rel="stylesheet" href="/static/fontawesome/css/fontawesome.min.css">
<link rel="stylesheet" href="/static/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/static/fontawesome/css/all.min.css">
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.12.0/css/all.css" integrity="sha384-ekOryaXPbeCpWQNxMwSWVvQ0+1VrStoPJq54shlYhR8HzQgig1v5fas6YgOqLoKz" crossorigin="anonymous">
<link rel="stylesheet" href="/static/css/styles2.min.css"> <link rel="stylesheet" href="/static/css/styles2.min.css">
<link rel="stylesheet" href="/static/css/text2.css" /> <link rel="stylesheet" href="/static/css/text2.css" />
<link rel="stylesheet" href="/static/css/rowsandall2.min.css" /> <link rel="stylesheet" href="/static/css/rowsandall2.min.css" />
{% block meta %} {% endblock %} {% block meta %} {% endblock %}
<div id="fb-root"></div> <div id="fb-root"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>(function(d, s, id) { <script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0]; var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return; if (d.getElementById(id)) return;
@@ -325,6 +327,11 @@
</p> </p>
{% endif %} {% endif %}
{% block ad %} {% block ad %}
<div class="site-announcement-box">
<div class="site-announcement-white">
<a href="https://wp.me/P8g86e-Bs">Please take 2 minutes to fill out the survey!</a>
</div>
</div>
<div id="id_blogs"> <div id="id_blogs">
</div> </div>
<a href="https://pryglrowing.com"> <a href="https://pryglrowing.com">