Private
Public Access
1
0

Merge branch 'feature/racetimes' into develop

This commit is contained in:
Sander Roosendaal
2020-05-24 13:21:30 +02:00
7 changed files with 50 additions and 14 deletions
-1
View File
@@ -3312,7 +3312,6 @@ def interactive_chart(id=0,promember=0,intervaldata = {}):
plot.legend.location = "bottom_right" plot.legend.location = "bottom_right"
# add shaded bar chart areas # add shaded bar chart areas
if intervaldata != {}: if intervaldata != {}:
intervaldf = pd.DataFrame(intervaldata) intervaldf = pd.DataFrame(intervaldata)
+3
View File
@@ -2926,6 +2926,9 @@ class VirtualRaceResult(models.Model):
emailnotifications = models.BooleanField(default=True, emailnotifications = models.BooleanField(default=True,
verbose_name = 'Receive challenge notifications by email') verbose_name = 'Receive challenge notifications by email')
startsecond = models.FloatField(default=0)
endsecond = models.FloatField(default=0)
def __str__(self): def __str__(self):
rr = Rower.objects.get(id=self.userid) rr = Rower.objects.get(id=self.userid)
name = '{u1} {u2}'.format( name = '{u1} {u2}'.format(
+17 -5
View File
@@ -425,6 +425,8 @@ def handle_check_race_course(self,
cseconds = [] cseconds = []
cmeters = [] cmeters = []
ccomplete = [] ccomplete = []
startseconds = []
endseconds = []
for startt in entrytimes: for startt in entrytimes:
@@ -445,19 +447,23 @@ def handle_check_race_course(self,
coursetimeseconds = coursetimeseconds-coursetimefirst coursetimesecondsnet = coursetimeseconds-coursetimefirst
coursemeters = coursemeters-coursemetersfirst coursemeters = coursemeters-coursemetersfirst
cseconds.append(coursetimeseconds) cseconds.append(coursetimesecondsnet)
cmeters.append(coursemeters) cmeters.append(coursemeters)
ccomplete.append(coursecompleted) ccomplete.append(coursecompleted)
endseconds.append(coursetimeseconds)
startseconds.append(coursetimefirst)
records = pd.DataFrame({ records = pd.DataFrame({
'coursetimeseconds':cseconds, 'coursetimeseconds':cseconds,
'coursecompleted': ccomplete, 'coursecompleted': ccomplete,
'coursemeters': cmeters 'coursemeters': cmeters,
'startsecond':startseconds,
'endsecond':endseconds,
}) })
records = records[records['coursecompleted'] == True] records = records[records['coursecompleted'] == True]
@@ -468,24 +474,30 @@ def handle_check_race_course(self,
mintime = records['coursetimeseconds'].min() mintime = records['coursetimeseconds'].min()
coursetimeseconds = records[records['coursetimeseconds'] == mintime]['coursetimeseconds'].min() coursetimeseconds = records[records['coursetimeseconds'] == mintime]['coursetimeseconds'].min()
coursemeters = records[records['coursetimeseconds'] == mintime]['coursemeters'].min() coursemeters = records[records['coursetimeseconds'] == mintime]['coursemeters'].min()
startsecond = records[records['coursetimeseconds'] == mintime]['startsecond'].min()
endsecond = records[records['coursetimeseconds'] == mintime]['endsecond'].min()
else: else:
coursecompleted = False coursecompleted = False
if coursecompleted: if coursecompleted:
query = 'UPDATE rowers_virtualraceresult SET coursecompleted = 1, duration = "{duration}", distance = {distance}, workoutid = {workoutid} WHERE id={recordid}'.format( query = 'UPDATE rowers_virtualraceresult SET coursecompleted = 1, duration = "{duration}", distance = {distance}, workoutid = {workoutid}, startsecond = {startsecond}, endsecond = {endsecond} WHERE id={recordid}'.format(
recordid=recordid, recordid=recordid,
duration=totaltime_sec_to_string(coursetimeseconds), duration=totaltime_sec_to_string(coursetimeseconds),
distance=int(coursemeters), distance=int(coursemeters),
workoutid=workoutid, workoutid=workoutid,
startsecond=startsecond,
endsecond=endsecond,
) )
if mode == 'coursetest': if mode == 'coursetest':
query = 'UPDATE rowers_coursetestresult SET coursecompleted = 1, duration = "{duration}", distance = {distance}, workoutid = {workoutid} WHERE id={recordid}'.format( query = 'UPDATE rowers_coursetestresult SET coursecompleted = 1, duration = "{duration}", distance = {distance}, workoutid = {workoutid}, startsecond = {startsecond}, endsecond = {endsecond} WHERE id={recordid}'.format(
recordid=recordid, recordid=recordid,
duration=totaltime_sec_to_string(coursetimeseconds), duration=totaltime_sec_to_string(coursetimeseconds),
distance=int(coursemeters), distance=int(coursemeters),
workoutid=workoutid, workoutid=workoutid,
startsecond=startsecond,
endsecond=endsecond,
) )
+2 -2
View File
@@ -282,7 +282,7 @@
<tr> <tr>
<td>{{ forloop.counter }}</td> <td>{{ forloop.counter }}</td>
<td> <td>
<a href="/rowers/workout/{{ result.workoutid|encode }}"> <a href="/rowers/workout/{{ result.workoutid|encode }}/view/entry/{{ result.id }}/">
{{ result.username }}</a></td> {{ result.username }}</a></td>
<td>{{ result.teamname }}</td> <td>{{ result.teamname }}</td>
<td>{{ result.age }}</td> <td>{{ result.age }}</td>
@@ -302,7 +302,7 @@
<td>{{ result.duration |durationprint:"%H:%M:%S.%f" }}</td> <td>{{ result.duration |durationprint:"%H:%M:%S.%f" }}</td>
<td>{{ result.distance }} m</td> <td>{{ result.distance }} m</td>
<td> <td>
<a href="/rowers/workout/{{ result.workoutid|encode }}"> <a href="/rowers/workout/{{ result.workoutid|encode }}/view/entry/{{ result.id }}/">
Details</a></td> Details</a></td>
<td> <td>
{% if race.manager == request.user and not race|is_final %} {% if race.manager == request.user and not race|is_final %}
+1 -1
View File
@@ -111,7 +111,7 @@
<p> <p>
<pre> <pre>
{{ workout.summary }} {{ summary }}
</pre> </pre>
</p> </p>
</li> </li>
+1
View File
@@ -352,6 +352,7 @@ urlpatterns = [
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/restore/$',views.workout_summary_restore_view,name='workout_summary_restore_view'), re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/restore/$',views.workout_summary_restore_view,name='workout_summary_restore_view'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/split/$',views.workout_split_view,name='workout_split_view'), re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/split/$',views.workout_split_view,name='workout_split_view'),
# re_path(r'^workout/(?P<id>\d+)/interactiveplot/$',views.workout_biginteractive_view), # re_path(r'^workout/(?P<id>\d+)/interactiveplot/$',views.workout_biginteractive_view),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/view/entry/(?P<raceresult>\d+)/$',views.workout_view,name='workout_view'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/view/$',views.workout_view,name='workout_view'), re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/view/$',views.workout_view,name='workout_view'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/video/$',views.workout_video_create_view, re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/video/$',views.workout_video_create_view,
name='workout_video_create_view'), name='workout_video_create_view'),
+26 -5
View File
@@ -2156,7 +2156,7 @@ def workout_fusion_list(request,id=0,
# Basic view of workout # Basic view of workout
@permission_required('workout.view_workout',fn=get_workout_by_opaqueid,raise_exception=True) @permission_required('workout.view_workout',fn=get_workout_by_opaqueid,raise_exception=True)
def workout_view(request,id=0): def workout_view(request,id=0,raceresult=0):
request.session['referer'] = absolute(request)['PATH'] request.session['referer'] = absolute(request)['PATH']
if not request.user.is_anonymous: if not request.user.is_anonymous:
@@ -2164,7 +2164,11 @@ def workout_view(request,id=0):
else: else:
rower = None rower = None
# get row
row = get_workout_by_opaqueid(request,id) row = get_workout_by_opaqueid(request,id)
f1 = row.csvfilename
rowdata = rdata(f1)
summary = row.summary
comments = WorkoutComment.objects.filter(workout=row) comments = WorkoutComment.objects.filter(workout=row)
@@ -2181,16 +2185,32 @@ def workout_view(request,id=0):
except: except:
pass pass
# get raceresult
intervaldata = {}
if raceresult != 0:
try:
result = VirtualRaceResult.objects.get(id=raceresult)
startsecond = result.startsecond
endsecond = result.endsecond
duration = row.duration
durationsecs = duration.hour*3600+duration.minute*60+duration.second
itime = [startsecond,endsecond-startsecond]
itype = [3,4]
intervaldata['itime'] = itime
intervaldata['itype'] = itype
rowdata.updateinterval_metric(' AverageBoatSpeed (m/s)',0.1,mode='larger',
debug=False,smoothwindow=15.,
activewindow = [startsecond,endsecond])
summary = rowdata.allstats()
except VirtualRaceResult.DoesNotExist:
pass
# create interactive plot # create interactive plot
res = interactive_chart(encoder.decode_hex(id)) res = interactive_chart(encoder.decode_hex(id),intervaldata=intervaldata)
script = res[0] script = res[0]
div = res[1] div = res[1]
# create map # create map
f1 = row.csvfilename
rowdata = rdata(f1)
hascoordinates = 1 hascoordinates = 1
if rowdata != 0: if rowdata != 0:
try: try:
@@ -2239,6 +2259,7 @@ def workout_view(request,id=0):
'graphs':g, 'graphs':g,
'last_name':u.last_name, 'last_name':u.last_name,
'records':records, 'records':records,
'summary':summary,
'recordsindoor':recordsindoor, 'recordsindoor':recordsindoor,
'first_name':u.first_name, 'first_name':u.first_name,
'interactiveplot':script, 'interactiveplot':script,