Private
Public Access
1
0

Merge branch 'develop' into feature/garmin

This commit is contained in:
Sander Roosendaal
2020-07-04 06:56:27 +02:00
11 changed files with 207 additions and 23 deletions

View File

@@ -7,11 +7,100 @@ from rowers.views.statements import *
from rowsandall_app.settings import SITE_URL
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
whatisnear = 150
# 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 < whatisnear:
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<whatisnear:
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 < whatisnear:
newlist.append(c)
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<whatisnear:
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)
g = GeoIP2()
ip = request.META.get('HTTP_X_REAL_IP','1.1.1.1')
try:
lat_lon = g.lat_lon(ip)
city = g.city(ip)
except:
lat_lon = None
city = {
'city': '',
'country_name': '',
'time_zone': '',
}
courses = GeoCourse.objects.all().order_by("country","name","distance")
nearby = request.GET.get('nearby')
if nearby and lat_lon is not None:
courses = getnearestcourses(lat_lon,courses)
courses = GeoCourse.objects.all().order_by("country","name")
# add search processing
query = request.GET.get('q')
@@ -34,6 +123,10 @@ def courses_view(request):
'active':'nav-racing',
'searchform':searchform,
'rower':r,
'location':lat_lon,
'city':city['city'],
'country_name': city['country_name'],
'time_zone':city['time_zone'],
})
# List Courses
@@ -116,7 +209,7 @@ def course_replace_view(request,id=0):
r = getrower(request.user)
thecourses = GeoCourse.objects.filter(manager=r).exclude(id=id)
#thecourses = GeoCourse.objects.filter(manager=r).exclude(id=id)
if request.method == 'POST':
form = CourseSelectForm(request.POST)
@@ -132,8 +225,8 @@ def course_replace_view(request,id=0):
return HttpResponseRedirect(url)
else:
form = CourseSelectForm()
form.fields["course"].queryset = thecourses
form = CourseSelectForm(course=course,manager=r)
#form.fields["course"].queryset = thecourses
script,div = course_map(course)
@@ -287,7 +380,12 @@ def standard_view(request,id=0):
r = getrower(request.user)
allower = ["-referencespeed","agemax","agemin","sex","name",
"referencespeed","-agemax","-agemin","-sex","-name"]
orderby = request.GET.get('order_by')
if orderby not in allowed:
orderby = None
if orderby is not None:
standards = CourseStandard.objects.filter(
@@ -646,6 +744,19 @@ def virtualevents_view(request):
if request.is_ajax():
is_ajax = True
g = GeoIP2()
ip = request.META.get('HTTP_X_REAL_IP','1.1.1.1')
try:
lat_lon = g.lat_lon(ip)
city = g.city(ip)
except:
lat_lon = None
city = {
'city': '',
'country_name': '',
'time_zone': '',
}
# default races
races1 = VirtualRace.objects.filter(
startdate__gte=datetime.date.today(),
@@ -656,6 +767,8 @@ def virtualevents_view(request):
)
races = (races1 | races2).order_by("startdate","start_time")
if len(races) == 0:
@@ -718,10 +831,20 @@ def virtualevents_view(request):
else:
form = VirtualRaceSelectForm()
nearby = request.GET.get('nearby')
if nearby and lat_lon is not None:
races = getnearestraces(lat_lon,races)
if is_ajax:
return render(request,'racelist.html',
{ 'races':races,
'rower':r,
'location': lat_lon,
'city':city['city'],
'country_name': city['country_name'],
'time_zone':city['time_zone'],
})
breadcrumbs = [
@@ -737,6 +860,10 @@ def virtualevents_view(request):
'breadcrumbs':breadcrumbs,
'active':'nav-racing',
'rower':r,
'location': lat_lon,
'city':city['city'],
'country_name': city['country_name'],
'time_zone':city['time_zone'],
}
)
@@ -1208,7 +1335,11 @@ def virtualevent_view(request,id=0):
}
]
allowed = ["duration","distance","-distance","points","-points","-duration","-distance"]
orderby = request.GET.get('order_by')
if orderby not in allowed:
orderby = None
if orderby is not None:
try:
results = results.order_by(orderby)