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