From 310affa9e746c134d80e589667c08f6b11476b3e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 25 May 2020 12:24:01 +0200 Subject: [PATCH] download results working --- rowers/templates/virtualevent.html | 4 +++ rowers/urls.py | 2 ++ rowers/views/racesviews.py | 52 ++++++++++++++++++++++++++---- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/rowers/templates/virtualevent.html b/rowers/templates/virtualevent.html index abdc4a03..b3e1ff57 100644 --- a/rowers/templates/virtualevent.html +++ b/rowers/templates/virtualevent.html @@ -351,6 +351,10 @@ Compare Results

+ {% if race.manager == request.user %} + Download Results + {% endif %} {% else %}

No results yet diff --git a/rowers/urls.py b/rowers/urls.py index c03c809b..ad52fd3b 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -197,6 +197,8 @@ urlpatterns = [ views.virtualevent_disqualify_view,name='virtualevent_disqualify_view'), re_path(r'^virtualevent/(?P\d+)/withdrawresult/(?P\d+)/', views.virtualevent_withdrawresult_view,name='virtualevent_withdrawresult_view'), + re_path(r'^virtualevent/(?P\d+)/download/', + views.virtualevent_results_download_view,name='virtualevent_results_download_view'), re_path(r'^list-workouts/$',views.workouts_view,name='workouts_view'), re_path(r'^list-courses/$',views.courses_view,name='courses_view'), re_path(r'^courses/upload/$',views.course_upload_view,name='course_upload_view'), diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index a4d172a8..9371e87c 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -591,6 +591,8 @@ def virtualevent_disqualify_view(request,id=0,recordid=0): messages.info(request,"We have invalidated the result for: "+str(record)) record.coursecompleted = False + record.startsecond = 0 + record.endsecond = 0 record.save() url = reverse('virtualevent_view',kwargs={'id':raceid}) @@ -733,6 +735,8 @@ def virtualevent_withdrawresult_view(request,id=0,recordid=0): messages.info(request,"We have invalidated the result for: "+str(record)) record.coursecompleted = False + record.startsecond = 0 + record.endsecond = 0 record.save() url = reverse('virtualevent_view',kwargs={'id':id}) @@ -853,7 +857,7 @@ def virtualevent_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) @@ -1023,6 +1027,40 @@ def virtualevent_view(request,id=0): 'comments':comments }) +@login_required() +@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True) +def virtualevent_results_download_view(request,id=0): + 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': + resultobj = VirtualRaceResult + else: + resultobj = IndoorVirtualRaceResult + + records = resultobj.objects.filter(race=race) + + filename = 'Challenge Results {name} {id} {date}.csv'.format( + id=id, + name=race.name, + date=timezone.now().strftime("%Y-%m-%d %H:%M:%S %Z") + ) + + df = pd.DataFrame.from_records(records.values()) + df['workoutid'] = df['workoutid'].apply(lambda x:encoder.encode_hex(x)) + + response = HttpResponse(df.to_csv()) + + response['Content-Disposition'] = 'attachment; filename="%s"' % filename + response['Content-Type'] = 'application/octet-stream' + + return response + + def virtualevent_ranking_view(request,id=0): results = [] @@ -1036,7 +1074,7 @@ def virtualevent_ranking_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) @@ -1210,7 +1248,7 @@ def virtualevent_withdraw_view(request,id=0,recordid=None): 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_can_withdraw(r,race): remove_rower_race(r,race,recordid=recordid) @@ -1232,7 +1270,7 @@ def virtualevent_addboat_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 not race_can_adddiscipline(r,race): messages.error(request,"You cannot register for this race") @@ -1402,7 +1440,7 @@ def virtualevent_register_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 not race_can_register(r,race): messages.error(request,"You cannot register for this race") @@ -1598,7 +1636,7 @@ def indoorvirtualevent_register_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 not race_can_register(r,race): messages.error(request,"You cannot register for this race") @@ -2214,7 +2252,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=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") start_time = race.start_time start_date = race.startdate