From 581250a7b09b1ed808f931da5a2e3e6be688d09d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 22 Feb 2018 21:39:15 +0100 Subject: [PATCH] v0.1 of testcourse working (plannedsession) --- rowers/courses.py | 49 +++++++++++++++++------- rowers/plannedsessions.py | 6 ++- rowers/templates/plannedsessionview.html | 2 +- rowers/views.py | 16 +++++++- rowsandall_app/urls.py | 1 + 5 files changed, 57 insertions(+), 17 deletions(-) diff --git a/rowers/courses.py b/rowers/courses.py index 580d3cd4..397cc23a 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -120,7 +120,7 @@ def time_in_path(df,p,maxmin='max'): b = (~df['inpolygon']).shift(1)+df['inpolygon'] if len(df[b==2]): - return df[b==2]['time'].min() + return df[b==2]['time'].min(),df[b==2]['cum_dist'].min() raise InvalidTrajectoryError("Trajectory doesn't go through path") @@ -230,19 +230,22 @@ def createcourse( def coursetime_first(data,paths): entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() coursecompleted = False try: - entrytime = time_in_path(data,paths[0],maxmin='max') + entrytime,entrydistance = time_in_path(data,paths[0],maxmin='max') coursecompleted = True except InvalidTrajectoryError: entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() coursecompleted = False - return entrytime, coursecompleted + return entrytime, entrydistance, coursecompleted def coursetime_paths(data,paths,finalmaxmin='min'): entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() coursecompleted = False # corner case - empty list of paths @@ -252,32 +255,42 @@ def coursetime_paths(data,paths,finalmaxmin='min'): # end - just the Finish polygon if len(paths) == 1: try: - entrytime = time_in_path(data,paths[0],maxmin=finalmaxmin) + ( + entrytime, + entrydistance + ) = time_in_path(data,paths[0],maxmin=finalmaxmin) coursecompleted = True except InvalidTrajectoryError: entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() coursecompleted = False - return entrytime,coursecompleted + return entrytime,entrydistance,coursecompleted if len(paths) > 1: try: - time = time_in_path(data, paths[0]) + time,dist = time_in_path(data, paths[0]) data = data[data['time']>time] data['time'] = data['time']-time - timenext, coursecompleted = coursetime_paths(data,paths[1:]) - return time+timenext, coursecompleted + data['cum_dist'] = data['cum_dist']-dist + ( + timenext, + distnext, + coursecompleted + ) = coursetime_paths(data,paths[1:]) + return time+timenext, dist+distnext,coursecompleted except InvalidTrajectoryError: entrytime = data['time'].max() + entrydistance = data['cum_dist'].max() coursecompleted = False - return entrytime, coursecompleted + return entrytime, entrydistance, coursecompleted def get_time_course(ws,course): coursetimeseconds = 0.0 coursecompleted = 0 w = ws[0] - columns = ['time',' latitude',' longitude'] + columns = ['time',' latitude',' longitude','cum_dist'] rowdata = dataprep.getsmallrowdata_db( columns, ids = [w.id], @@ -303,10 +316,20 @@ def get_time_course(ws,course): path = polygon_to_path(polygon) paths.append(path) - coursetimeseconds,coursecompleted = coursetime_paths(rowdata,paths) - coursetimefirst,firstcompleted = coursetime_first( + ( + coursetimeseconds, + coursemeters, + coursecompleted, + + ) = coursetime_paths(rowdata,paths) + ( + coursetimefirst, + coursemetersfirst, + firstcompleted + ) = coursetime_first( rowdata,paths) coursetimeseconds = coursetimeseconds-coursetimefirst + coursemeters = coursemeters-coursemetersfirst - return coursetimeseconds,coursecompleted + return coursetimeseconds,coursemeters,coursecompleted diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 859bfbc3..02dc773b 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -238,7 +238,11 @@ def is_session_complete_ws(ws,ps): return ratio,'partial',completiondate elif ps.sessiontype == 'coursetest': if ps.course: - coursetime,coursecompleted = courses.get_time_course(ws,ps.course) + ( + coursetime, + coursemeters, + coursecompleted + ) = courses.get_time_course(ws,ps.course) if coursecompleted: return 1.0,'completed',completiondate else: diff --git a/rowers/templates/plannedsessionview.html b/rowers/templates/plannedsessionview.html index 9c4b62e3..5a77ad03 100644 --- a/rowers/templates/plannedsessionview.html +++ b/rowers/templates/plannedsessionview.html @@ -65,7 +65,7 @@ {{ forloop.counter }} {{ result|lookup:'name' }} {{ result|lookup:'distance' }} - {{ result|lookup:'time'|durationprint:"%H:%M:%S.%f" }} + {{ result|lookup:'time'|deltatimeprint }} {{ result|lookup:'date'|date:"Y-m-d" }} {{ result|lookup:'type' }} diff --git a/rowers/views.py b/rowers/views.py index 2523b218..93b9bab1 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -12657,15 +12657,24 @@ def plannedsession_view(request,id=0,rowerid=0, rankws = Workout.objects.filter( plannedsession=ps).order_by("-distance") for w in rankws: + dd = w.duration + dddelta = datetime.timedelta(hours=dd.hour, + minutes=dd.minute, + seconds=dd.second, + microseconds=dd.microsecond) wdict = { 'name': w.user.user.first_name+' '+w.user.user.last_name, 'date': w.date, 'distance': w.distance, - 'time': w.duration, + 'time': dddelta, 'type': w.workouttype, } if ps.sessiontype == 'coursetest': - coursetimeseconds,coursecompleted = courses.get_time_course(ws,ps.course) + ( + coursetimeseconds, + coursemeters, + coursecompleted + ) = courses.get_time_course(ws,ps.course) intsecs = int(coursetimeseconds) microsecs = int(1.e6*(coursetimeseconds-intsecs)) @@ -12673,9 +12682,12 @@ def plannedsession_view(request,id=0,rowerid=0, seconds=intsecs, microseconds=microsecs ) + wdict['distance'] = int(round(coursemeters)) ranking.append(wdict) + if ps.sessiontype == 'coursetest': + ranking = sorted(ranking, key=lambda k: k['time']) # if coursetest, need to reorder the ranking diff --git a/rowsandall_app/urls.py b/rowsandall_app/urls.py index b7c2cb11..85b85107 100644 --- a/rowsandall_app/urls.py +++ b/rowsandall_app/urls.py @@ -32,6 +32,7 @@ handler500 = 'rowers.views.error500_view' urlpatterns = [ + url(r'^admin/jsi18n', 'django.views.i18n.javascript_catalog'), url(r'^django-rq/',include('django_rq.urls')), url(r'^password_change_done/$',auth_views.password_change_done,name='password_change_done'), url(r'^password_change/$',auth_views.password_change),