diff --git a/rowers/models.py b/rowers/models.py
index 28fce46e..6ba7658d 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -4158,6 +4158,7 @@ class IndoorVirtualRaceResult(models.Model):
class CourseTestResult(models.Model):
userid = models.IntegerField(default=0)
+ courseid = models.IntegerField(default=0)
workoutid = models.IntegerField(null=True)
plannedsession = models.ForeignKey(
PlannedSession, on_delete=models.CASCADE)
@@ -4167,6 +4168,13 @@ class CourseTestResult(models.Model):
startsecond = models.FloatField(default=0)
endsecond = models.FloatField(default=0)
+ def save(self, *args, **kwargs):
+ if self.userid == 0:
+ w = Workout.objects.get(id=self.workoutid)
+ self.userid = w.user.id
+
+ super(CourseTestResult, self).save(*args, **kwargs)
+
class IndoorVirtualRaceResultForm(ModelForm):
class Meta:
diff --git a/rowers/tasks.py b/rowers/tasks.py
index 6572a1dd..f42891c9 100644
--- a/rowers/tasks.py
+++ b/rowers/tasks.py
@@ -1149,9 +1149,11 @@ def handle_check_race_course(self,
record.duration = totaltime_sec_to_string(coursetimeseconds)
record.distance = int(coursemeters)
record.workoutid = workoutid
+ record.courseid = courseid
record.startsecond = startsecond
record.endsecond = endsecond
record.points = points
+ record.coursecompleted = 1
record.save()
if summary: # pragma: no cover
@@ -1178,7 +1180,6 @@ def handle_check_race_course(self,
workout.summary = summary
workout.save()
-
if successemail: # pragma: no cover
handle_sendemail_coursesucceed(
useremail, userfirstname, logfile, workoutid
diff --git a/rowers/templates/course_view.html b/rowers/templates/course_view.html
index f1741712..e50e35fa 100644
--- a/rowers/templates/course_view.html
+++ b/rowers/templates/course_view.html
@@ -137,7 +137,36 @@
{% endif %}
- {% endif %}
+ {% endif %}
+ {% if ownrecords %}
+
+ Own (Private) Results
+
+
+
+
+ | Time |
+ Distance |
+ Date |
+
+
+
+ {% for record in ownrecords %}
+
+ | {{ record.duration |durationprint:"%H:%M:%S.%f" }} |
+ {{ record.distance }} m |
+ {{ record.workoutid|workoutdate }} |
+
+
+
+ |
+
+ {% endfor %}
+
+
+
+
+{% endif %}
{% endblock %}
diff --git a/rowers/templates/plannedsessionview.html b/rowers/templates/plannedsessionview.html
index 2389ffcc..3313c733 100644
--- a/rowers/templates/plannedsessionview.html
+++ b/rowers/templates/plannedsessionview.html
@@ -172,7 +172,7 @@
{% if coursescript %}
- Course
+
{{ coursediv|safe }}
{{ coursescript|safe }}
diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz
index a2f1b1b6..1c7631ef 100644
Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ
diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py
index af0f2272..46fc3383 100644
--- a/rowers/views/analysisviews.py
+++ b/rowers/views/analysisviews.py
@@ -410,12 +410,15 @@ def trendflexdata(workouts, options, userid=0):
except (ValueError, AttributeError): # pragma: no cover
return ('', 'Error: not enough data')
else: # pragma: no cover
- bins = np.arange(datadf['days ago'].min()-binsize,
- datadf['days ago'].max()+binsize,
- binsize,
- )
- groups = datadf.groupby(pd.cut(datadf['days ago'], bins,
- labels=False))
+ try:
+ bins = np.arange(datadf['days ago'].min()-binsize,
+ datadf['days ago'].max()+binsize,
+ binsize,
+ )
+ groups = datadf.groupby(pd.cut(datadf['days ago'], bins,
+ labels=False))
+ except (ValueError, AttributeError): # pragma: no cover
+ return ('', 'Error: not enough data')
xvalues = []
yvalues = []
diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py
index a3a424ad..e44609ac 100644
--- a/rowers/views/planviews.py
+++ b/rowers/views/planviews.py
@@ -2332,7 +2332,6 @@ def plannedsession_view(request, id=0, userid=0):
if ps.sessiontype == 'coursetest': # pragma: no cover
vs = CourseTestResult.objects.filter(plannedsession=ps,
workoutid=w.id)
-
if vs:
for record in vs:
if record.workoutid == w.id:
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index 965bd58a..a545d016 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -280,6 +280,13 @@ def course_view(request, id=0):
workoutid__isnull=False,
coursecompleted=True).order_by("duration", "-distance")
+ # get own training results
+ ownrecords = CourseTestResult.objects.filter(
+ courseid = course.id,
+ userid = r.id,
+ coursecompleted=True
+ ).order_by("duration", "-distance")
+
if request.user.is_authenticated:
notsharing = Rower.objects.filter(
share_course_results=False).exclude(id=r.id)
@@ -371,6 +378,7 @@ def course_view(request, id=0):
'mapdiv': div,
'nosessions': False,
'records': records,
+ 'ownrecords': ownrecords,
'rower': r,
'form': form,
'onlyme': onlyme,