Please select a reason and add a comment (mandatory).
- Pressing 'Reject' disqualifies the submitted result.
+ Pressing 'Reject' removes the submitted result.
An email will be sent to the rower. There is no "undo".
+ Before you reject this challenge result, please carefully review it
+ using the information below. If you still want to reject the entry,
+ scroll down to the rejection form.
+
+ Please select a reason and add a comment (mandatory).
+ Pressing 'Reject' removes the submitted result.
+ An email will be sent to the rower. There is no "undo".
+
+
+
+
+
+
+{% endblock %}
+
+{% block sidebar %}
+{% include 'menu_racing.html' %}
+{% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 5df0f9ba..097ad88c 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -195,6 +195,8 @@ urlpatterns = [
views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'),
re_path(r'^virtualevent/(?P\d+)/disqualify/(?P\d+)/',
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'^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 845a79cf..b0d2c9d7 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -647,7 +647,7 @@ def virtualevent_disqualify_view(request,id=0,recordid=0):
},
{
'url':reverse(virtualevent_disqualify_view,
- kwargs={'raceid':raceid,
+ kwargs={'id':id,
'recordid':recordid}),
'name': 'Disqualify Entry'
},
@@ -688,6 +688,149 @@ def virtualevent_disqualify_view(request,id=0,recordid=0):
'record':record,
})
+@login_required()
+def virtualevent_withdrawresult_view(request,id=0,recordid=0):
+
+ r = getrower(request.user)
+ race = get_object_or_404(VirtualRace,pk=id)
+
+
+ if race.sessiontype == 'race':
+ recordobj = VirtualRaceResult
+ else:
+ recordobj = IndoorVirtualRaceResult
+
+ # datum moet voor race evaluation date zijn (ook in template controleren)
+
+ try:
+ record = recordobj.objects.get(id=recordid)
+ except recordobj.DoesNotExist:
+ messages.error(request,"We couldn't find the record")
+
+ if r.id != record.userid:
+ raise PermissionDenied("You are not the owner of this result")
+
+ if timezone.now() > race.evaluation_closure+datetime.timedelta(hours=1):
+ messages.error(request,"The evaluation is already closed and the results are official")
+ url = reverse('virtualevent_view',kwargs={'id':raceid})
+
+ return HttpResponseRedirect(url)
+
+ if request.method == 'POST':
+ form = DisqualificationForm(request.POST)
+ if form.is_valid():
+ message = form.cleaned_data['message']
+ reason = form.cleaned_data['reason']
+ disqualifier = disqualifiers[reason]
+
+ r = Rower.objects.get(id=record.userid)
+ name = record.username
+
+ job = myqueue(queue,handle_send_withdraw_email,
+ r.user.email, name,
+ disqualifier,message,race.name)
+
+ messages.info(request,"We have invalidated the result for: "+str(record))
+
+ record.coursecompleted = False
+ record.save()
+
+ url = reverse('virtualevent_view',kwargs={'id':id})
+
+ return HttpResponseRedirect(url)
+
+ else:
+ form = DisqualificationForm(request.POST)
+
+ workout = Workout.objects.get(id=record.workoutid)
+
+ g = GraphImage.objects.filter(workout=workout).order_by("-creationdatetime")
+ for i in g:
+ try:
+ width,height = Image.open(i.filename).size
+ i.width = width
+ i.height = height
+ i.save()
+ except:
+ pass
+
+ script, div = interactive_chart(record.workoutid)
+
+ f1 = workout.csvfilename
+ rowdata = rdata(f1)
+ hascoordinates = 1
+ if rowdata != 0:
+ try:
+ latitude = rowdata.df[' latitude']
+ if not latitude.std():
+ hascoordinates = 0
+ except (KeyError, AttributeError):
+ hascoordinates = 0
+ else:
+ hascoordinates = 0
+
+ if hascoordinates:
+ mapscript, mapdiv = leaflet_chart(rowdata.df[' latitude'],
+ rowdata.df[' longitude'],
+ workout.name)
+ else:
+ mapscript = ""
+ mapdiv = ""
+
+ breadcrumbs = [
+ {
+ 'url':reverse('virtualevents_view'),
+ 'name': 'Challenges'
+ },
+ {
+ 'url':reverse('virtualevent_view',
+ kwargs={'id':race.id}),
+ 'name': race.name
+ },
+ {
+ 'url':reverse(virtualevent_disqualify_view,
+ kwargs={'id':id,
+ 'recordid':recordid}),
+ 'name': 'Disqualify Entry'
+ },
+ ]
+
+ buttons = []
+
+ if not request.user.is_anonymous:
+ if race_can_register(r,race):
+ buttons += ['registerbutton']
+
+ if race_can_adddiscipline(r,race):
+ buttons += ['adddisciplinebutton']
+
+ if race_can_submit(r,race):
+ buttons += ['submitbutton']
+
+ if race_can_resubmit(r,race):
+ buttons += ['resubmitbutton']
+
+ if race_can_withdraw(r,race):
+ buttons += ['withdrawbutton']
+
+ if race_can_edit(r,race):
+ buttons += ['editbutton']
+
+ return render(request,"withdraw_view.html",
+ {'workout':workout,
+ 'active':'nav-racing',
+ 'graphs':g,
+ 'buttons':buttons,
+ 'interactiveplot':script,
+ 'the_div':div,
+ 'mapscript':mapscript,
+ 'mapdiv':mapdiv,
+ 'form':form,
+ 'race':race,
+ 'record':record,
+ })
+
+
def virtualevent_view(request,id=0):
results = []