Merge branch 'release/v12.55'
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|||||||
@@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
<pre>
|
<pre>
|
||||||
{{ workout.summary }}
|
{{ summary }}
|
||||||
</pre>
|
</pre>
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user