Merge branch 'release/v22.2.6'
This commit is contained in:
@@ -36,6 +36,21 @@ from rowers.models import VirtualRace
|
|||||||
|
|
||||||
# distance of course from lat_lon in km
|
# 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):
|
def howfaris(lat_lon, course):
|
||||||
coords = course.coord
|
coords = course.coord
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ class InvalidTrajectoryError(Exception):
|
|||||||
def __str__(self): # pragma: no cover
|
def __str__(self): # pragma: no cover
|
||||||
return repr(self.value)
|
return repr(self.value)
|
||||||
|
|
||||||
|
|
||||||
def time_in_path(df, p, maxmin='max', getall=False, name='unknown', logfile=None):
|
def time_in_path(df, p, maxmin='max', getall=False, name='unknown', logfile=None):
|
||||||
|
|
||||||
if df.empty: # pragma: no cover
|
if df.empty: # pragma: no cover
|
||||||
|
|||||||
@@ -3727,6 +3727,18 @@ class Workout(models.Model):
|
|||||||
elif self.workouttype in mytypes.otetypes and self.boattype in mytypes.boattypes:
|
elif self.workouttype in mytypes.otetypes and self.boattype in mytypes.boattypes:
|
||||||
self.boattype = 'static'
|
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)
|
super(Workout, self).save(*args, **kwargs)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
<form method="GET" id="competitorform">
|
<form method="GET" id="competitorform">
|
||||||
|
{{ dateform.as_table }}
|
||||||
{% for competitor in competitors %}
|
{% for competitor in competitors %}
|
||||||
{% if competitor in selected_users %}
|
{% if competitor in selected_users %}
|
||||||
<input type="checkbox" name="users" value="{{ competitor.id|encode }}" checked>{{ competitor }}<br>
|
<input type="checkbox" name="users" value="{{ competitor.id|encode }}" checked>{{ competitor }}<br>
|
||||||
|
|||||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
@@ -13,6 +13,7 @@ from json.decoder import JSONDecodeError
|
|||||||
|
|
||||||
import ruptures as rpt
|
import ruptures as rpt
|
||||||
from rowers.courses import getnearestcourses
|
from rowers.courses import getnearestcourses
|
||||||
|
from rowers.courses import pass_start
|
||||||
from pandas.errors import IntCastingNaNError
|
from pandas.errors import IntCastingNaNError
|
||||||
|
|
||||||
def default(o): # pragma: no cover
|
def default(o): # pragma: no cover
|
||||||
@@ -1337,6 +1338,18 @@ def course_mapcompare_view(request, id=0):
|
|||||||
except GeoCourse.DoesNotExist: # pragma: no cover
|
except GeoCourse.DoesNotExist: # pragma: no cover
|
||||||
raise Http404("Course does not exist")
|
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))
|
focususer = encoder.decode_hex(request.GET.get('user',None))
|
||||||
if focususer:
|
if focususer:
|
||||||
try:
|
try:
|
||||||
@@ -1380,7 +1393,12 @@ def course_mapcompare_view(request, id=0):
|
|||||||
|
|
||||||
selected_users = Rower.objects.filter(id__in=selected_ids)
|
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 = {}
|
startenddict = {}
|
||||||
|
|
||||||
@@ -1388,14 +1406,8 @@ def course_mapcompare_view(request, id=0):
|
|||||||
startenddict[result.workoutid] = (result.startsecond, result.endsecond)
|
startenddict[result.workoutid] = (result.startsecond, result.endsecond)
|
||||||
|
|
||||||
if len(workoutids) == 0: # pragma: no cover
|
if len(workoutids) == 0: # pragma: no cover
|
||||||
url = reverse('course_view',
|
|
||||||
kwargs={
|
|
||||||
'id': course.id,
|
|
||||||
})
|
|
||||||
|
|
||||||
messages.info(request, 'There are no results to display')
|
messages.info(request, 'There are no results to display')
|
||||||
|
|
||||||
return HttpResponseRedirect(url)
|
|
||||||
|
|
||||||
workouts = []
|
workouts = []
|
||||||
for id in workoutids:
|
for id in workoutids:
|
||||||
@@ -1412,6 +1424,11 @@ def course_mapcompare_view(request, id=0):
|
|||||||
labeldict=labeldict,
|
labeldict=labeldict,
|
||||||
startenddict=startenddict)
|
startenddict=startenddict)
|
||||||
|
|
||||||
|
dateform = DateRangeForm(initial={
|
||||||
|
'startdate':startdate,
|
||||||
|
'enddate':enddate,
|
||||||
|
})
|
||||||
|
|
||||||
breadcrumbs = [
|
breadcrumbs = [
|
||||||
{
|
{
|
||||||
'url': reverse('courses_view'),
|
'url': reverse('courses_view'),
|
||||||
@@ -1447,6 +1464,7 @@ def course_mapcompare_view(request, id=0):
|
|||||||
'teams': [],
|
'teams': [],
|
||||||
'competitors': competitors,
|
'competitors': competitors,
|
||||||
'selected_users': selected_users,
|
'selected_users': selected_users,
|
||||||
|
'dateform': dateform,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -4602,7 +4620,12 @@ def workout_edit_view(request, id=0, message="", successmessage=""):
|
|||||||
strict=True)
|
strict=True)
|
||||||
|
|
||||||
suggested_courses = list(set(courses) ^ set(suggested_courses))
|
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 = [
|
breadcrumbs = [
|
||||||
@@ -4712,6 +4735,12 @@ def workout_map_view(request, id=0):
|
|||||||
strict=True)
|
strict=True)
|
||||||
|
|
||||||
suggested_courses = list(set(courses) ^ set(suggested_courses))
|
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',
|
return render(request, 'map_view.html',
|
||||||
|
|||||||
Reference in New Issue
Block a user