diff --git a/rowers/courses.py b/rowers/courses.py index 3e9fa947..43a3b8ea 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -36,6 +36,21 @@ from rowers.models import VirtualRace # distance of course from lat_lon in km +def pass_start(df, course): + if df.empty: + return False + + def f(x): + return coordinate_in_path(x[' latitude'], x[' longitude'], p) + + + polygons = course.polygons.all() + p = polygon_to_path(polygons[0]) + + inpolygon = df.apply(lambda row:f(row), axis=1).copy() + + return inpolygon.any() + def howfaris(lat_lon, course): coords = course.coord diff --git a/rowers/courseutils.py b/rowers/courseutils.py index c60f0034..c4422cc6 100644 --- a/rowers/courseutils.py +++ b/rowers/courseutils.py @@ -14,7 +14,6 @@ class InvalidTrajectoryError(Exception): def __str__(self): # pragma: no cover return repr(self.value) - def time_in_path(df, p, maxmin='max', getall=False, name='unknown', logfile=None): if df.empty: # pragma: no cover diff --git a/rowers/models.py b/rowers/models.py index 4b40e835..5ddc51dc 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3727,6 +3727,18 @@ class Workout(models.Model): elif self.workouttype in mytypes.otetypes and self.boattype in mytypes.boattypes: self.boattype = 'static' + records = VirtualRaceResult.objects.filter(workoutid=self.pk) + for record in records: + record.boattype = self.boattype + record.boatclass = self.workouttype + record.save() + + records = IndoorVirtualRaceResult.objects.filter(workoutid=self.pk) + for record in records: + record.boattype = self.boattype + record.boatclass = self.workouttype + record.save() + super(Workout, self).save(*args, **kwargs) def __str__(self): diff --git a/rowers/templates/mapcompare.html b/rowers/templates/mapcompare.html index 49fad21f..76e3b1d0 100644 --- a/rowers/templates/mapcompare.html +++ b/rowers/templates/mapcompare.html @@ -21,6 +21,7 @@

+ {{ dateform.as_table }} {% for competitor in competitors %} {% if competitor in selected_users %} {{ competitor }}
diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 332f949c..10ac57e0 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index a254c816..d42782c8 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -13,6 +13,7 @@ from json.decoder import JSONDecodeError import ruptures as rpt from rowers.courses import getnearestcourses +from rowers.courses import pass_start from pandas.errors import IntCastingNaNError def default(o): # pragma: no cover @@ -1337,6 +1338,18 @@ def course_mapcompare_view(request, id=0): except GeoCourse.DoesNotExist: # pragma: no cover raise Http404("Course does not exist") + startdate = request.GET.get('startdate', None) + enddate = request.GET.get('enddate', None) + if startdate: + startdate = iso8601.parse_date(startdate) + else: + startdate = timezone.now()-datetime.timedelta(days=30) + + if enddate: + enddate = iso8601.parse_date(enddate) + else: + enddate = timezone.now()+datetime.timedelta(days=1) + focususer = encoder.decode_hex(request.GET.get('user',None)) if focususer: try: @@ -1380,7 +1393,12 @@ def course_mapcompare_view(request, id=0): selected_users = Rower.objects.filter(id__in=selected_ids) - workoutids = [result.workoutid for result in results] + #workoutids = [result.workoutid for result in results] + workoutids = [] + for result in results: + w = Workout.objects.get(id=result.workoutid) + if w.startdatetime >= startdate and w.startdatetime <= enddate: + workoutids.append(result.workoutid) startenddict = {} @@ -1388,14 +1406,8 @@ def course_mapcompare_view(request, id=0): startenddict[result.workoutid] = (result.startsecond, result.endsecond) if len(workoutids) == 0: # pragma: no cover - url = reverse('course_view', - kwargs={ - 'id': course.id, - }) - messages.info(request, 'There are no results to display') - return HttpResponseRedirect(url) workouts = [] for id in workoutids: @@ -1412,6 +1424,11 @@ def course_mapcompare_view(request, id=0): labeldict=labeldict, startenddict=startenddict) + dateform = DateRangeForm(initial={ + 'startdate':startdate, + 'enddate':enddate, + }) + breadcrumbs = [ { 'url': reverse('courses_view'), @@ -1447,6 +1464,7 @@ def course_mapcompare_view(request, id=0): 'teams': [], 'competitors': competitors, 'selected_users': selected_users, + 'dateform': dateform, }) @@ -4602,7 +4620,12 @@ def workout_edit_view(request, id=0, message="", successmessage=""): strict=True) suggested_courses = list(set(courses) ^ set(suggested_courses)) - + s2 = [] + for c in suggested_courses: + if pass_start(rowdata.df, c): + s2.append(c) + + suggested_courses = s2 breadcrumbs = [ @@ -4712,6 +4735,12 @@ def workout_map_view(request, id=0): strict=True) suggested_courses = list(set(courses) ^ set(suggested_courses)) + s2 = [] + for c in suggested_courses: + if pass_start(rowdata.df, c): + s2.append(c) + + suggested_courses = s2 return render(request, 'map_view.html',