From 3fd121d3209d54e784ab5f81c5adc6734b1465c6 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Wed, 1 Jul 2020 14:54:05 +0200
Subject: [PATCH 1/2] better sorting
---
rowers/views/racesviews.py | 88 ++++++++++++++++++++++++++++++--------
1 file changed, 69 insertions(+), 19 deletions(-)
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index 04642d57..bd9c1964 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -9,6 +9,71 @@ from rowers.scoring import *
from django.contrib.gis.geoip2 import GeoIP2
+# distance of course from lat_lon in km
+def howfaris(lat_lon,course):
+ coords = course.coord
+ distance = geo_distance(lat_lon[0],lat_lon[1],coords[0],coords[1])[0]
+
+ return distance
+
+# get nearest races
+def getnearestraces(lat_lon,races):
+ newlist = []
+ counter = 0
+ for race in races:
+ if race.course is None:
+ newlist.append(race)
+ else:
+ c = race.course
+ coords = c.coord
+ distance = howfaris(lat_lon,c)
+ if distance < 100:
+ newlist.append(race)
+ counter += 1
+
+ if counter>0:
+ races = newlist
+ else:
+ courseraces = races.exclude(course__isnull=True)
+ orders = [(c.id,howfaris(lat_lon,c.course)) for c in courseraces]
+ orders = sorted(orders,key = lambda tup:tup[1])
+ ids = [id for id,distance in orders[0:4]]
+ for id, distance in orders[5:]:
+ if distance<100:
+ ids.append(id)
+
+ for id in ids:
+ newlist.append(VirtualRace.objects.get(id=id))
+ races = newlist
+
+ return races
+
+def getnearestcourses(lat_lon,courses):
+ newlist = []
+ counter = 0
+ for c in courses:
+ coords = c.coord
+ distance = howfaris(lat_lon,c)
+ if distance < 100:
+ newlist.append(race)
+ counter += 1
+
+ if counter>0:
+ courses = newlist
+ else:
+ orders = [(c.id,howfaris(lat_lon,c)) for c in courses]
+ orders = sorted(orders,key = lambda tup:tup[1])
+ ids = [id for id,distance in orders[0:4]]
+ for id, distance in orders[5:]:
+ if distance<100:
+ ids.append(id)
+
+ for id in ids:
+ newlist.append(GeoCourse.objects.get(id=id))
+ courses = newlist
+
+ return courses
+
# List Courses
def courses_view(request):
r = getrower(request.user)
@@ -31,13 +96,7 @@ def courses_view(request):
nearby = request.GET.get('nearby')
if nearby and lat_lon is not None:
- newlist = []
- for c in courses:
- coords = c.coord
- distance = geo_distance(lat_lon[0],lat_lon[1],coords[0],coords[1])[0]
- if distance < 100:
- newlist.append(c)
- courses = newlist
+ courses = getnearestcourses(lat_lon,courses)
@@ -766,19 +825,10 @@ def virtualevents_view(request):
form = VirtualRaceSelectForm()
nearby = request.GET.get('nearby')
- if nearby and lat_lon is not None:
- newlist = []
- for race in races:
- if race.course is None:
- newlist.append(race)
- else:
- c = race.course
- coords = c.coord
- distance = geo_distance(lat_lon[0],lat_lon[1],coords[0],coords[1])[0]
- if distance < 100:
- newlist.append(race)
- races = newlist
+ if nearby and lat_lon is not None:
+ races = getnearestraces(lat_lon,races)
+
if is_ajax:
return render(request,'racelist.html',
From ebd38b1dd272e7653cfef9743ba78cdccbce5648 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Wed, 1 Jul 2020 14:55:47 +0200
Subject: [PATCH 2/2] none to nothing
---
rowers/templates/list_courses.html | 2 +-
rowers/views/racesviews.py | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/rowers/templates/list_courses.html b/rowers/templates/list_courses.html
index d247a90a..bd99a4f7 100644
--- a/rowers/templates/list_courses.html
+++ b/rowers/templates/list_courses.html
@@ -66,7 +66,7 @@
{% if location %}
- Filter nearby courses
+ Filter courses closest to you
{{ city }} {{ country_name }} {{ time_zone }}
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index bd9c1964..e4826a76 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -86,9 +86,9 @@ def courses_view(request):
except:
lat_lon = None
city = {
- 'city': None,
- 'country_name': None,
- 'time_zone': None,
+ 'city': '',
+ 'country_name': '',
+ 'time_zone': '',
}
@@ -745,9 +745,9 @@ def virtualevents_view(request):
except:
lat_lon = None
city = {
- 'city': None,
- 'country_name': None,
- 'time_zone': None,
+ 'city': '',
+ 'country_name': '',
+ 'time_zone': '',
}
# default races