Private
Public Access
1
0

adding course compare and course mapcompare, still need to add onlyme option

This commit is contained in:
Sander Roosendaal
2021-10-14 18:35:54 +02:00
parent 806d34b2d2
commit 09a6fbcdbb
3 changed files with 276 additions and 0 deletions

View File

@@ -46,6 +46,13 @@
{% if records %}
<li class="grid_4">
<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">
<thead>
<tr>
@@ -88,6 +95,7 @@
{% endfor %}
</tbody>
</table>
</p>
</li>
{% if form %}
<li class="grid_4">

View File

@@ -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)/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'^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,
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/$',
views.virtualevent_uploadimage_view,name='virtualevent_uploadimage_view'),
re_path(r'^virtualevent/(?P<id>\d+)/setimage/(?P<logoid>\d+)/$',

View File

@@ -1477,6 +1477,93 @@ def team_comparison_select(request,
'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):
results = []
@@ -1567,6 +1654,184 @@ def virtualevent_mapcompare_view(request,id=0):
'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):
results = []