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

    +

    + + + + + + + + + + {% for record in ownrecords %} + + + + + + + {% endfor %} + +
    TimeDistanceDate
    {{ record.duration |durationprint:"%H:%M:%S.%f" }}{{ record.distance }} m{{ record.workoutid|workoutdate }} + + +
    +

    +
  • +{% 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

    +

    {{ plannedsession.course.name }}

    {{ 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,