diff --git a/rowers/metrics.py b/rowers/metrics.py
index 72d2d1bb..b2f3eaa6 100644
--- a/rowers/metrics.py
+++ b/rowers/metrics.py
@@ -354,14 +354,21 @@ def getagegrouprecord(age,sex='male',weightcategory='hwt',
p0 = [700,120,700,10,100,100]
- p1, success = optimize.leastsq(errfunc,p0[:],
+ try:
+ p1, success = optimize.leastsq(errfunc,p0[:],
args = (ages,powers))
+ except:
+ p1 = p0
+ success = 0
- power = fitfunc(p1, float(age))
+ if success:
+ power = fitfunc(p1, float(age))
- #power = np.polyval(poly_coefficients,age)
+ #power = np.polyval(poly_coefficients,age)
- power = 0.5*(np.abs(power)+power)
+ power = 0.5*(np.abs(power)+power)
+ else:
+ power = 0
else:
power = 0
diff --git a/rowers/tasks.py b/rowers/tasks.py
index f17fb216..a89377de 100644
--- a/rowers/tasks.py
+++ b/rowers/tasks.py
@@ -66,7 +66,10 @@ def long_test_task2(self,aantal,**kwargs):
kwargs['jobid'] = job_id
return longtask.longtask2(aantal,**kwargs)
+
+
+
# create workout
@app.task
def handle_new_workout_from_file(r, f2,
diff --git a/rowers/templates/.#multiflex.html b/rowers/templates/.#multiflex.html
new file mode 100644
index 00000000..9fe5f5d9
--- /dev/null
+++ b/rowers/templates/.#multiflex.html
@@ -0,0 +1 @@
+E408191@CZ27LT9RCGN72.81156:1514927368
\ No newline at end of file
diff --git a/rowers/templates/rankings.html b/rowers/templates/rankings.html
index ee6fc209..6c0b0b6a 100644
--- a/rowers/templates/rankings.html
+++ b/rowers/templates/rankings.html
@@ -5,6 +5,25 @@
{% block title %}Workouts{% endblock %}
{% block scripts %}
{% include "monitorjobs.html" %}
+
+
+
{% endblock %}
{% block content %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 7c5b3679..7d345028 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -123,6 +123,8 @@ urlpatterns = [
url(r'^imports/$', TemplateView.as_view(template_name='imports.html'), name='imports'),
url(r'^agegroupcp/(?P\d+)$',views.agegroupcpview),
url(r'^agegroupcp/(?P\d+)/(?P\d+)$',views.agegroupcpview),
+ url(r'^ajax_agegroup/(?P\d+)/(?P\w+.*)/(?P\w+.*)/(?P\d+)$',
+ views.ajax_agegrouprecords),
url(r'^agegrouprecords/(?P\w+.*)/(?P\w+.*)/(?P\d+)m$',
views.agegrouprecordview),
url(r'^agegrouprecords/(?P\w+.*)/(?P\w+.*)/(?P\d+)min$',
diff --git a/rowers/views.py b/rowers/views.py
index 0ba882d2..759b49a9 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -3509,6 +3509,66 @@ def rankings_view(request,theuser=0,
'teams':get_my_teams(request.user),
})
+@login_required()
+def ajax_agegrouprecords(request,
+ age=25,
+ sex='female',
+ weightcategory='hwt',
+ userid=0):
+
+ wcdurations = []
+ wcpower = []
+ durations = [1,4,30,60]
+ distances = [100,500,1000,2000,5000,6000,10000,21097,42195]
+ for distance in distances:
+ worldclasspower = metrics.getagegrouprecord(
+ age,
+ sex=sex,
+ distance=distance,
+ weightcategory=weightcategory
+ )
+ velo = (worldclasspower/2.8)**(1./3.)
+ try:
+ duration = distance/velo
+ wcdurations.append(duration)
+ wcpower.append(worldclasspower)
+ except ZeroDivisionError:
+ pass
+ for duration in durations:
+ worldclasspower = metrics.getagegrouprecord(
+ age,
+ sex=sex,
+ duration=duration,
+ weightcategory=weightcategory
+ )
+ try:
+ velo = (worldclasspower/2.8)**(1./3.)
+ distance = int(60*duration*velo)
+ wcdurations.append(60.*duration)
+ wcpower.append(worldclasspower)
+ except ValueError:
+ pass
+
+ options = {}
+ options['wcpower'] = wcpower
+ options['wcdurations'] = wcdurations
+
+ thenowtime = timezone.now().isoformat()
+ options['lastupdated'] = thenowtime
+ options['userid'] = userid
+
+ request.session['options'] = options
+
+
+ return JSONResponse(
+ {
+ 'wcdurations': wcdurations,
+ 'wcpower': wcpower,
+ 'lastupdated': thenowtime,
+ }
+ )
+
+
# Show ranking distances including predicted paces
@login_required()
def rankings_view2(request,theuser=0,
@@ -3534,64 +3594,60 @@ def rankings_view2(request,theuser=0,
if theuser == 0:
theuser = request.user.id
+ else:
+ lastupdated = "01-01-1900"
+
promember=0
if not request.user.is_anonymous():
- r = getrower(request.user)
+ r = getrower(theuser)
wcdurations = []
wcpower = []
-
+
+ lastupdated = "01-01-1900"
+ userid = 0
if 'options' in request.session:
options = request.session['options']
try:
wcdurations = options['wcdurations']
wcpower = options['wcpower']
+ lastupdated = options['lastupdated']
except KeyError:
pass
+ try:
+ userid = options['userid']
+ except KeyError:
+ userid = 0
+ else:
+ options = {}
- if r.birthdate:
- age = calculate_age(r.birthdate)
-
-# job = myqueue
- durations = [1,4,30,60]
- distances = [100,500,1000,2000,5000,6000,10000,21097,42195]
- for distance in distances:
- worldclasspower = metrics.getagegrouprecord(
- age,
- sex=r.sex,
- distance=distance,
- weightcategory=r.weightcategory
- )
- velo = (worldclasspower/2.8)**(1./3.)
- try:
- duration = distance/velo
- wcdurations.append(duration)
- wcpower.append(worldclasspower)
- except ZeroDivisionError:
- pass
- for duration in durations:
- worldclasspower = metrics.getagegrouprecord(
- age,
- sex=r.sex,
- duration=duration,
- weightcategory=r.weightcategory
- )
- try:
- velo = (worldclasspower/2.8)**(1./3.)
- distance = int(60*duration*velo)
- wcdurations.append(60.*duration)
- wcpower.append(worldclasspower)
- except ValueError:
- pass
+
+ lastupdatedtime = arrow.get(lastupdated).timestamp
+ current_time = arrow.utcnow().timestamp
+
+ deltatime_seconds = current_time - lastupdatedtime
+ recalc = False
+ if str(userid) != str(theuser) or deltatime_seconds > 3600:
+ recalc = True
+ else:
+ recalc = False
+
+ options['userid'] = theuser
+
+ if r.birthdate:
+ age = calculate_age(r.birthdate)
else:
worldclasspower = None
age = 0
options['wcpower'] = wcpower
options['wcdurations'] = wcdurations
+ if theuser:
+ options['userid'] = theuser
request.session['options'] = options
+
result = request.user.is_authenticated() and ispromember(request.user)
if result:
@@ -3868,6 +3924,7 @@ def rankings_view2(request,theuser=0,
'theuser':uu,
'age':age,
'sex':r.sex,
+ 'recalc':recalc,
'weightcategory':r.weightcategory,
'startdate':startdate,
'enddate':enddate,