diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 62ef4e79..e764f853 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -2049,7 +2049,20 @@ def leaflet_chart(lat,lon,name=""): return script,div -def leaflet_chart_compare(latlondf,name=""): +def leaflet_chart_compare(workoutids,labeldict={},startenddict={}): + data = [] + for id in workoutids: + w = Workout.objects.get(id=id) + rowdata = rdata(w.csvfilename) + df = pd.DataFrame({ + 'id':id, + 'latitude':rowdata.df[' latitude'], + 'longitude':rowdata.df[' longitude'] + }) + data.append(f) + + df = pd.concat(data,axis=0) + if lat.empty or lon.empty: return [0,"invalid coordinate data"] diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 40be42c1..8751b45f 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -1491,6 +1491,99 @@ def team_comparison_select(request, 'teams':get_my_teams(request.user), }) +def virtualevent_mapcompare_view(request,id=0): + results = [] + + r = None + if not request.user.is_anonymous: + r = getrower(request.user) + + try: + race = VirtualRace.objects.get(id=id) + except VirtualRace.DoesNotExist: + raise Http404("Virtual Challenge does not exist") + + if race.sessiontype != 'race': + url = reverse(virtualevent_view,kwargs={'id':id}) + messages.error(request,"This challenge doesn't have map data") + return HttpResponseRedirect(request) + + results = VirtualRaceResult.objects.filter( + race=race, + workoutid__isnull=False, + coursecompleted=True, + ).order_by("distance","duration") + + workoutids = [result.workoutid for result in results] + + startenddict = {} + if race.sessiontype == 'race': + for result in results: + startenddict[result.workoutid] = (result.startsecond,result.endsecond) + + if len(workoutids) == 0: + url = reverse('virtualevent_view', + kwargs={ + 'id':race.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: + pass + + labeldict = { + int(w.id): w.__str__() for w in workouts + } + + script,div = leaflet_chart_compare(workoutids, + labeldict=labeldict, + startenddict=startenddict) + + breadcrumbs = [ + { + 'url': reverse('virtualevents_view'), + 'name': 'Racing' + }, + { + 'url':reverse('virtualevent_view', + kwargs={ + 'id':race.id, + } + ), + 'name': race.name + }, + { + 'url':reverse('virtualevent_mapcompare_view', + kwargs={ + 'id':race.id, + } + ), + 'name': 'Compare' + } + ] + + + return render(request,'mapcompare.html', + {'interactiveplot':script, + 'the_div':div, + 'breadcrumbs':breadcrumbs, + 'rower':r, + 'race':race, + 'results':results, + 'active':'nav-racing', + 'promember':promember, + 'teamid':0, + 'chartform':chartform, + 'teams':[] + }) + def virtualevent_compare_view(request,id=0): results = [] @@ -1506,7 +1599,7 @@ def virtualevent_compare_view(request,id=0): try: race = VirtualRace.objects.get(id=id) except VirtualRace.DoesNotExist: - raise Http404("Virtual Race does not exist") + raise Http404("Virtual Challenge does not exist") if race.sessiontype == 'race': script,div = course_map(race.course) @@ -1531,6 +1624,8 @@ def virtualevent_compare_view(request,id=0): + + if len(workoutids) == 0: url = reverse('virtualevent_view', kwargs={