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 @@