From f08ec40a8ae60b7a329ce74bf1aca4fa4eb99a39 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 23 Feb 2018 11:06:58 +0100 Subject: [PATCH] some UI improvements on planned sessions --- rowers/courses.py | 53 +----------- rowers/models.py | 83 ++++++++++++++++++- rowers/plannedsessions.py | 2 +- rowers/templates/plannedsessioncreate.html | 18 ++++ rowers/templates/plannedsessionedit.html | 29 +++++++ .../templates/plannedsessionteamcreate.html | 23 ++++- rowers/templates/plannedsessionteamedit.html | 29 +++++++ rowers/utils.py | 9 +- rowers/views.py | 6 ++ 9 files changed, 192 insertions(+), 60 deletions(-) diff --git a/rowers/courses.py b/rowers/courses.py index 397cc23a..138cdffa 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -18,6 +18,7 @@ import pandas as pd import numpy as np import dataprep +from rowers.utils import geo_distance ns = {'opengis': 'http://www.opengis.net/kml/2.2'} @@ -25,6 +26,8 @@ ns = {'opengis': 'http://www.opengis.net/kml/2.2'} from rowers.models import ( Rower, Workout, GeoPoint,GeoPolygon, GeoCourse, + course_length,course_coord_center,course_coord_maxmin, + polygon_coord_center ) # low level methods @@ -35,56 +38,6 @@ class InvalidTrajectoryError(Exception): def __str__(self): return repr(self.value) -def polygon_coord_center(polygon): - - points = GeoPoint.objects.filter(polygon=polygon).order_by("order_in_poly") - - latitudes = pd.Series([p.latitude for p in points]) - longitudes = pd.Series([p.longitude for p in points]) - - return latitudes.mean(), longitudes.mean() - -def course_coord_center(course): - - polygons = GeoPolygon.objects.filter(course=course).order_by("order_in_course") - - latitudes = [] - longitudes = [] - - for p in polygons: - latitude,longitude = polygon_coord_center(p) - latitudes.append(latitude) - longitudes.append(longitude) - - latitude = pd.Series(latitudes).median() - longitude = pd.Series(longitudes).median() - - coordinates = pd.DataFrame({ - 'latitude':latitudes, - 'longitude':longitudes, - }) - - return latitude,longitude,coordinates - -def course_coord_maxmin(course): - - polygons = GeoPolygon.objects.filter(course=course).order_by("order_in_course") - - latitudes = [] - longitudes = [] - - for p in polygons: - latitude,longitude = polygon_coord_center(p) - latitudes.append(latitude) - longitudes.append(longitude) - - lat_min = pd.Series(latitudes).min() - lat_max = pd.Series(latitudes).max() - long_min = pd.Series(longitudes).min() - long_max = pd.Series(longitudes).max() - - - return lat_min,lat_max,long_min,long_max def polygon_to_path(polygon): points = GeoPoint.objects.filter(polygon=polygon).order_by("order_in_poly") diff --git a/rowers/models.py b/rowers/models.py index ab4f613f..be015b0c 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -350,6 +350,79 @@ from utils import ( defaultleft,defaultmiddle,landingpages ) +from utils import geo_distance + +def polygon_coord_center(polygon): + + points = GeoPoint.objects.filter(polygon=polygon).order_by("order_in_poly") + + latitudes = pd.Series([p.latitude for p in points]) + longitudes = pd.Series([p.longitude for p in points]) + + return latitudes.mean(), longitudes.mean() + + + + + +def course_coord_center(course): + + polygons = GeoPolygon.objects.filter(course=course).order_by("order_in_course") + + latitudes = [] + longitudes = [] + + for p in polygons: + latitude,longitude = polygon_coord_center(p) + latitudes.append(latitude) + longitudes.append(longitude) + + latitude = pd.Series(latitudes).median() + longitude = pd.Series(longitudes).median() + + coordinates = pd.DataFrame({ + 'latitude':latitudes, + 'longitude':longitudes, + }) + + return latitude,longitude,coordinates + +def course_coord_maxmin(course): + + polygons = GeoPolygon.objects.filter(course=course).order_by("order_in_course") + + latitudes = [] + longitudes = [] + + for p in polygons: + latitude,longitude = polygon_coord_center(p) + latitudes.append(latitude) + longitudes.append(longitude) + + lat_min = pd.Series(latitudes).min() + lat_max = pd.Series(latitudes).max() + long_min = pd.Series(longitudes).min() + long_max = pd.Series(longitudes).max() + + + return lat_min,lat_max,long_min,long_max + + +def course_length(course): + polygons = GeoPolygon.objects.filter(course=course).order_by("order_in_course") + + totaldist = 0 + for i in range(len(polygons)-1): + latitude1,longitude1 = polygon_coord_center(polygons[i]) + latitude2,longitude2 = polygon_coord_center(polygons[i+1]) + + dist = geo_distance(latitude1,longitude1, + latitude2,longitude2,) + + totaldist += 1000.*dist[0] + + return int(totaldist) + # Extension of User with rowing specific data class Rower(models.Model): weightcategories = ( @@ -677,7 +750,7 @@ class GeoCourse(models.Model): class GeoCourseEditForm(ModelForm): class Meta: model = GeoCourse - fields = ['name','notes'] + fields = ['name','country','notes'] widgets = { 'notes': forms.Textarea, @@ -941,6 +1014,11 @@ class PlannedSession(models.Model): self.sessionmode = 'distance' self.sessionunit = 'm' self.criterium = 'none' + if self.course == None: + self.course = GeoCourse.objects.all()[0] + self.sessionvalue = course_length(self.course) + elif self.sessiontype != 'coursetest': + self.course = None super(PlannedSession,self).save(*args, **kwargs) @@ -977,8 +1055,7 @@ class PlannedSessionForm(ModelForm): def __init__(self,*args,**kwargs): super(PlannedSessionForm, self).__init__(*args, **kwargs) - if self.instance.sessiontype != 'coursetest': - del self.fields['course'] + self.fields['course'].queryset = GeoCourse.objects.all().order_by("country","name") class PlannedSessionFormSmall(ModelForm): diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 02dc773b..1a5e42d1 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -336,7 +336,7 @@ def get_dates_timeperiod(timeperiod): elif timeperiod=='nextweek': today = date.today() enddate = today-timezone.timedelta(days=today.weekday())-timezone.timedelta(days=1)+timezone.timedelta(days=7) - startdate = enddate-timezone.timedelta(days=13) + startdate = enddate-timezone.timedelta(days=6) elif timeperiod=='lastmonth': today = date.today() startdate = today.replace(day=1) diff --git a/rowers/templates/plannedsessioncreate.html b/rowers/templates/plannedsessioncreate.html index 4b3830e8..f29b74df 100644 --- a/rowers/templates/plannedsessioncreate.html +++ b/rowers/templates/plannedsessioncreate.html @@ -145,6 +145,10 @@