adding course compare and course mapcompare, still need to add onlyme option
This commit is contained in:
@@ -46,6 +46,13 @@
|
|||||||
{% if records %}
|
{% if records %}
|
||||||
<li class="grid_4">
|
<li class="grid_4">
|
||||||
<h2>Course Results</h2>
|
<h2>Course Results</h2>
|
||||||
|
<p>
|
||||||
|
<a href="/rowers/courses/{{ course.id }}/compare/"
|
||||||
|
title="Compare the workouts on this course"><i class="fas fa-chart-line fa-fw"></i></a>
|
||||||
|
<a href="/rowers/courses/{{ course.id }}/mapcompare/"
|
||||||
|
title="Compare the courses"><i class="fas fa-route fa-fw"></i></a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
<table class="listtable shortpadded">
|
<table class="listtable shortpadded">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -88,6 +95,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</p>
|
||||||
</li>
|
</li>
|
||||||
{% if form %}
|
{% if form %}
|
||||||
<li class="grid_4">
|
<li class="grid_4">
|
||||||
|
|||||||
@@ -407,8 +407,11 @@ urlpatterns = [
|
|||||||
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/wind/$',views.workout_wind_view,name='workout_wind_view'),
|
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/wind/$',views.workout_wind_view,name='workout_wind_view'),
|
||||||
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/image/$',views.workout_uploadimage_view,name='workout_uploadimage_view'),
|
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/image/$',views.workout_uploadimage_view,name='workout_uploadimage_view'),
|
||||||
re_path(r'^virtualevent/(?P<id>\d+)/compare/$',views.virtualevent_compare_view,name='virtualevent_compare_view'),
|
re_path(r'^virtualevent/(?P<id>\d+)/compare/$',views.virtualevent_compare_view,name='virtualevent_compare_view'),
|
||||||
|
re_path(r'^courses/(?P<id>\d+)/compare/$',views.course_compare_view,name='course_compare_view'),
|
||||||
re_path(r'^virtualevent/(?P<id>\d+)/mapcompare/$',views.virtualevent_mapcompare_view,
|
re_path(r'^virtualevent/(?P<id>\d+)/mapcompare/$',views.virtualevent_mapcompare_view,
|
||||||
name='virtualevent_mapcompare_view'),
|
name='virtualevent_mapcompare_view'),
|
||||||
|
re_path(r'^courses/(?P<id>\d+)/mapcompare/$',views.course_mapcompare_view,
|
||||||
|
name='course_mapcompare_view'),
|
||||||
re_path(r'^virtualevent/(?P<id>\d+)/image/$',
|
re_path(r'^virtualevent/(?P<id>\d+)/image/$',
|
||||||
views.virtualevent_uploadimage_view,name='virtualevent_uploadimage_view'),
|
views.virtualevent_uploadimage_view,name='virtualevent_uploadimage_view'),
|
||||||
re_path(r'^virtualevent/(?P<id>\d+)/setimage/(?P<logoid>\d+)/$',
|
re_path(r'^virtualevent/(?P<id>\d+)/setimage/(?P<logoid>\d+)/$',
|
||||||
|
|||||||
@@ -1477,6 +1477,93 @@ def team_comparison_select(request,
|
|||||||
'teams':get_my_teams(request.user),
|
'teams':get_my_teams(request.user),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def course_mapcompare_view(request,id=0):
|
||||||
|
results = []
|
||||||
|
|
||||||
|
r = None
|
||||||
|
if not request.user.is_anonymous:
|
||||||
|
r = getrower(request.user)
|
||||||
|
|
||||||
|
try:
|
||||||
|
course = GeoCourse.objects.get(id=id)
|
||||||
|
except GeoCourse.DoesNotExist: # pragma: no cover
|
||||||
|
raise Http404("Course does not exist")
|
||||||
|
|
||||||
|
|
||||||
|
results = VirtualRaceResult.objects.filter(
|
||||||
|
course=course,
|
||||||
|
workoutid__isnull=False,
|
||||||
|
).order_by("distance","duration")
|
||||||
|
|
||||||
|
workoutids = [result.workoutid for result in results]
|
||||||
|
|
||||||
|
startenddict = {}
|
||||||
|
|
||||||
|
for result in results:
|
||||||
|
startenddict[result.workoutid] = (result.startsecond,result.endsecond)
|
||||||
|
|
||||||
|
if len(workoutids) == 0: # pragma: no cover
|
||||||
|
url = reverse('course_view',
|
||||||
|
kwargs={
|
||||||
|
'id':course.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
messages.info(request,'There are no results to display')
|
||||||
|
|
||||||
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
|
workouts = []
|
||||||
|
for id in workoutids:
|
||||||
|
try:
|
||||||
|
workouts.append(Workout.objects.get(id=id))
|
||||||
|
except Workout.DoesNotExist: # pragma: no cover
|
||||||
|
pass
|
||||||
|
|
||||||
|
labeldict = {
|
||||||
|
int(w.id): w.__str__() for w in workouts
|
||||||
|
}
|
||||||
|
|
||||||
|
script,div = leaflet_chart_compare(course,workoutids,
|
||||||
|
labeldict=labeldict,
|
||||||
|
startenddict=startenddict)
|
||||||
|
|
||||||
|
breadcrumbs = [
|
||||||
|
{
|
||||||
|
'url': reverse('courses_view'),
|
||||||
|
'name': 'Courses'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url':reverse('course_view',
|
||||||
|
kwargs={
|
||||||
|
'id':course.id,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
'name': course.name
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url':reverse('course_mapcompare_view',
|
||||||
|
kwargs={
|
||||||
|
'id':course.id,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
'name': 'Course Compare'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
return render(request,'mapcompare.html',
|
||||||
|
{'mapscript':script,
|
||||||
|
'mapdiv':div,
|
||||||
|
'breadcrumbs':breadcrumbs,
|
||||||
|
'rower':r,
|
||||||
|
'course':course,
|
||||||
|
'results':results,
|
||||||
|
'active':'nav-racing',
|
||||||
|
'teamid':0,
|
||||||
|
'teams':[]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
def virtualevent_mapcompare_view(request,id=0):
|
def virtualevent_mapcompare_view(request,id=0):
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
@@ -1567,6 +1654,184 @@ def virtualevent_mapcompare_view(request,id=0):
|
|||||||
'teams':[]
|
'teams':[]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def course_compare_view(request,id=0):
|
||||||
|
results = []
|
||||||
|
|
||||||
|
promember = 0
|
||||||
|
if not request.user.is_anonymous:
|
||||||
|
r = getrower(request.user)
|
||||||
|
result = request.user.is_authenticated and ispromember(request.user)
|
||||||
|
if result:
|
||||||
|
promember=1
|
||||||
|
else: # pragma: no cover
|
||||||
|
r = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
course = GeoCourse.objects.get(id=id)
|
||||||
|
except GeoCourse.DoesNotExist: # pragma: no cover
|
||||||
|
raise Http404("Course does not exist")
|
||||||
|
|
||||||
|
|
||||||
|
script,div = course_map(course)
|
||||||
|
resultobj = VirtualRaceResult
|
||||||
|
|
||||||
|
results = resultobj.objects.filter(
|
||||||
|
course=course,
|
||||||
|
workoutid__isnull=False,
|
||||||
|
coursecompleted=True,
|
||||||
|
).order_by("duration","-distance")
|
||||||
|
|
||||||
|
workoutids = [result.workoutid for result in results]
|
||||||
|
|
||||||
|
startenddict = {}
|
||||||
|
|
||||||
|
for result in results:
|
||||||
|
startenddict[result.workoutid] = (result.startsecond,result.endsecond)
|
||||||
|
|
||||||
|
if len(workoutids) == 0: # pragma: no cover
|
||||||
|
url = reverse('course_view',
|
||||||
|
kwargs={
|
||||||
|
'id':course.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
messages.info(request,'There are no results to display')
|
||||||
|
|
||||||
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
|
if request.method == 'GET':
|
||||||
|
xparam = 'distance'
|
||||||
|
|
||||||
|
yparam = 'pace'
|
||||||
|
plottype = 'line'
|
||||||
|
|
||||||
|
request.session['ids'] = workoutids
|
||||||
|
request.session['plottype'] = plottype
|
||||||
|
request.session['xparam'] = xparam
|
||||||
|
request.session['yparam'] = yparam
|
||||||
|
|
||||||
|
|
||||||
|
workouts = []
|
||||||
|
for id in workoutids:
|
||||||
|
try:
|
||||||
|
workouts.append(Workout.objects.get(id=id))
|
||||||
|
except Workout.DoesNotExist: # pragma: no cover
|
||||||
|
pass
|
||||||
|
|
||||||
|
form = WorkoutMultipleCompareForm()
|
||||||
|
form.fields["workouts"].queryset = Workout.objects.filter(id__in=workoutids)
|
||||||
|
form.fields["workouts"].initial = Workout.objects.filter(id__in=workoutids)
|
||||||
|
|
||||||
|
|
||||||
|
labeldict = {
|
||||||
|
int(w.id): w.__str__() for w in workouts
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
chartform = ChartParamChoiceForm(
|
||||||
|
initial = {
|
||||||
|
'xparam':xparam,
|
||||||
|
'yparam':yparam,
|
||||||
|
'plottype':plottype,
|
||||||
|
'teamid':0
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if request.method == 'POST' and 'workouts' in request.POST:
|
||||||
|
form = WorkoutMultipleCompareForm(request.POST)
|
||||||
|
form.fields["workouts"].queryset = Workout.objects.filter(id__in=workoutids)
|
||||||
|
chartform = ChartParamChoiceForm(request.POST)
|
||||||
|
if form.is_valid() and chartform.is_valid():
|
||||||
|
cd = form.cleaned_data
|
||||||
|
workouts = cd['workouts']
|
||||||
|
workoutids = [w.id for w in workouts]
|
||||||
|
xparam = chartform.cleaned_data['xparam']
|
||||||
|
yparam = chartform.cleaned_data['yparam']
|
||||||
|
plottype = chartform.cleaned_data['plottype']
|
||||||
|
teamid = chartform.cleaned_data['teamid']
|
||||||
|
ids = [int(w.id) for w in workouts]
|
||||||
|
request.session['ids'] = ids
|
||||||
|
elif request.method == 'POST':
|
||||||
|
form = WorkoutMultipleCompareForm()
|
||||||
|
form.fields["workouts"].queryset = Workout.objects.filter(id__in=workoutids)
|
||||||
|
request.session['ids'] = workoutids
|
||||||
|
|
||||||
|
|
||||||
|
chartform = ChartParamChoiceForm(request.POST)
|
||||||
|
if chartform.is_valid():
|
||||||
|
xparam = chartform.cleaned_data['xparam']
|
||||||
|
yparam = chartform.cleaned_data['yparam']
|
||||||
|
plottype = chartform.cleaned_data['plottype']
|
||||||
|
teamid = chartform.cleaned_data['teamid']
|
||||||
|
try:
|
||||||
|
workoutids = request.session['ids']
|
||||||
|
except KeyError: # pragma: no cover
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
workouts = []
|
||||||
|
for id in workoutids:
|
||||||
|
try:
|
||||||
|
workouts.append(Workout.objects.get(
|
||||||
|
id=id))
|
||||||
|
except Workout.DoesNotExist: # pragma: no cover
|
||||||
|
pass
|
||||||
|
|
||||||
|
labeldict = {
|
||||||
|
int(w.id): w.__str__() for w in workouts
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
res = interactive_multiple_compare_chart(workoutids,xparam,yparam,
|
||||||
|
promember=promember,
|
||||||
|
plottype=plottype,
|
||||||
|
labeldict=labeldict,startenddict=startenddict)
|
||||||
|
script = res[0]
|
||||||
|
div = res[1]
|
||||||
|
errormessage = res[3]
|
||||||
|
if errormessage != '': # pragma: no cover
|
||||||
|
messages.error(request,errormessage)
|
||||||
|
|
||||||
|
breadcrumbs = [
|
||||||
|
{
|
||||||
|
'url': reverse('courses_view'),
|
||||||
|
'name': 'Courses'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url':reverse('course_view',
|
||||||
|
kwargs={
|
||||||
|
'id':course.id,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
'name': course.name
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url':reverse('virtualevent_compare_view',
|
||||||
|
kwargs={
|
||||||
|
'id':course.id,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
'name': 'Compare'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
return render(request,'multicompare.html',
|
||||||
|
{'interactiveplot':script,
|
||||||
|
'the_div':div,
|
||||||
|
'breadcrumbs':breadcrumbs,
|
||||||
|
'rower':r,
|
||||||
|
'course':course,
|
||||||
|
'results':results,
|
||||||
|
'active':'nav-racing',
|
||||||
|
'promember':promember,
|
||||||
|
'teamid':0,
|
||||||
|
'chartform':chartform,
|
||||||
|
'form':form,
|
||||||
|
'teams':[]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
def virtualevent_compare_view(request,id=0):
|
def virtualevent_compare_view(request,id=0):
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user