| Indoor Race | To be rowed on a Concept2 ergometer |
@@ -586,6 +594,21 @@
You cannot submit results rowed
on other bodies of water.
+ {% elif race.sessiontype == 'fastest_time' %}
+
+ This on-the-water challenge asks you to try to get
+ as far as you can over the
+ race duration. It automatically finds the fastest interval
+ of the given duration
+ in your entire workout.
+
+ {% elif race.sessiontype == 'fastest_distance' %}
+
+ This on-the-water challenge asks you to try row as hard
+ as you can over a set distance.
+ It automatically finds the fastest interval of the given length
+ in your entire workout.
+
{% else %}
Indoor challenges are open for all, wherever you live.
diff --git a/rowers/urls.py b/rowers/urls.py
index 520aeffa..78310079 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -262,6 +262,8 @@ urlpatterns = [
re_path(r'^virtualevents/$',views.virtualevents_view,name='virtualevents_view'),
re_path(r'^virtualevent/create/$',views.virtualevent_create_view,name='virtualevent_create_view'),
re_path(r'^virtualevent/createindoor/$',views.indoorvirtualevent_create_view,name='indoorvirtualevent_create_view'),
+ re_path(r'^virtualevent/createfastest/$',views.fastestvirtualevent_create_view,
+ name='fastestvirtualevent_create_view'),
re_path(r'^raceregistration/togglenotification/(?P\d+)/$',
views.virtualevent_toggle_email_view,name='virtualevent_toggle_email_view'),
re_path(r'^indoorraceregistration/togglenotification/(?P\d+)/$',
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index aed19ff6..57934fe1 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -2706,6 +2706,153 @@ def indoorvirtualevent_create_view(request):
})
+@login_required()
+def fastestvirtualevent_create_view(request):
+ r = getrower(request.user)
+
+ if request.method == 'POST':
+ racecreateform = IndoorVirtualRaceForm(request.POST)
+ if racecreateform.is_valid():
+ cd = racecreateform.cleaned_data
+ startdate = cd['startdate']
+ start_time = cd['start_time']
+ enddate = cd['enddate']
+ end_time = cd['end_time']
+ comment = cd['comment']
+ sessionunit = cd['sessionunit']
+ sessionvalue = cd['sessionvalue']
+ name = cd['name']
+ registration_form = cd['registration_form']
+ registration_closure = cd['registration_closure']
+ evaluation_closure = cd['evaluation_closure']
+ contact_phone = cd['contact_phone']
+ contact_email = cd['contact_email']
+ coursestandards = cd['coursestandards']
+
+ # correct times
+
+ timezone_str = cd['timezone']
+
+ startdatetime = datetime.datetime.combine(startdate,start_time)
+ enddatetime = datetime.datetime.combine(enddate,end_time)
+
+
+ startdatetime = pytz.timezone(timezone_str).localize(
+ startdatetime
+ )
+ enddatetime = pytz.timezone(timezone_str).localize(
+ enddatetime
+ )
+ evaluation_closure = pytz.timezone(timezone_str).localize(
+ evaluation_closure.replace(tzinfo=None)
+ )
+
+ if registration_form == 'manual':
+ try:
+ registration_closure = pytz.timezone(
+ timezone_str
+ ).localize(
+ registration_closure.replace(tzinfo=None)
+ )
+ except AttributeError:
+ registration_closure = startdatetime
+ elif registration_form == 'windowstart':
+ registration_closure = startdatetime
+ elif registration_form == 'windowend':
+ registration_closure = enddatetime
+ else:
+ registration_closure = evaluation_closure
+
+ if sessionunit == 'min':
+ sessionmode = 'time'
+ sessiontype = 'fastest_time'
+ else:
+ sessionmode = 'distance'
+ sessiontype = 'fastest_distance'
+
+
+ vs = VirtualRace(
+ name=name,
+ startdate=startdate,
+ preferreddate = startdate,
+ start_time = start_time,
+ enddate=enddate,
+ end_time=end_time,
+ comment=comment,
+ sessiontype = sessiontype,
+ sessionunit = sessionunit,
+ sessionmode = sessionmode,
+ sessionvalue = sessionvalue,
+ course=None,
+ timezone=timezone_str,
+ coursestandards=coursestandards,
+ evaluation_closure=evaluation_closure,
+ registration_closure=registration_closure,
+ contact_phone=contact_phone,
+ contact_email=contact_email,
+ country = 'Indoor',
+ manager=request.user,
+ )
+
+ vs.save()
+
+ # create Site Announcement & Tweet
+ if settings.DEBUG or settings.TESTING:
+ dotweet = False
+ elif 'dev' in settings.SITE_URL:
+ dotweet = False
+ else:
+ dotweet = True
+
+ announcementshort = "New Virtual Challenge on rowsandall.com: {name}".format(
+ name = name,
+ )
+
+ announcement = announcementshort + " {siteurl}/rowers/virtualevent/{raceid}/".format(
+ siteurl = SITE_URL,
+ raceid = vs.id
+ )
+
+
+ if len(announcement)>250:
+ announcement = announcementshort
+
+ sa = SiteAnnouncement(
+ announcement = announcement,
+ dotweet = dotweet
+ )
+
+ sa.save()
+
+ url = reverse('virtualevents_view')
+ return HttpResponseRedirect(url)
+ else:
+
+ racecreateform = IndoorVirtualRaceForm(timezone=r.defaulttimezone)
+
+
+ breadcrumbs = [
+ {
+ 'url':reverse('virtualevents_view'),
+ 'name': 'Challenges'
+ },
+ {
+ 'url':reverse('indoorvirtualevent_create_view',
+ ),
+ 'name': 'New Indoor Virtual Regatta'
+ },
+ ]
+
+ return render(request,'fastestvirtualeventcreate.html',
+ {
+ 'form':racecreateform,
+ 'breadcrumbs':breadcrumbs,
+ 'rower':r,
+ 'active':'nav-racing',
+
+ })
+
+
@login_required()
def virtualevent_create_view(request):
r = getrower(request.user)
From d4e819491d21169327043c47343d919c568cc97e Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Tue, 10 Nov 2020 11:06:19 +0100
Subject: [PATCH 2/8] basic submit, does not calculate points yet
---
rowers/plannedsessions.py | 148 +++++++++++++++++++++++++++++++++++++
rowers/views/racesviews.py | 7 +-
2 files changed, 153 insertions(+), 2 deletions(-)
diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py
index 03e34e0a..fb16db02 100644
--- a/rowers/plannedsessions.py
+++ b/rowers/plannedsessions.py
@@ -1528,6 +1528,154 @@ def default_class(r,w,race):
# No Course Standard
return True,boattype,boatclass,adaptiveclass,weightclass,sex,5.0,None
+def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
+ result = 0
+ comments = []
+ errors = []
+
+ start_time = race.start_time
+ start_date = race.startdate
+ startdatetime = datetime.combine(start_date,start_time)
+ startdatetime = pytz.timezone(race.timezone).localize(
+ startdatetime
+ )
+
+ end_time = race.end_time
+ end_date = race.enddate
+ enddatetime = datetime.combine(end_date,end_time)
+ enddatetime = pytz.timezone(race.timezone).localize(
+ enddatetime
+ )
+
+ # check if all sessions have same date
+ dates = [w.date for w in ws]
+ if (not all(d == dates[0] for d in dates)) and race.sessiontype not in ['challenge','cycletarget']:
+ errors.append('For tests and training sessions, selected workouts must all be done on the same date')
+ return result,comments,errors,0
+
+
+ if len(ws)>1 and race.sessiontype == 'test':
+ errors.append('For tests, you can only attach one workout')
+ return result,comments,errors,0
+
+
+
+ ids = [w.id for w in ws]
+ ids = list(set(ids))
+
+ if len(ids)>1 and race.sessiontype in ['test','coursetest','race','indoorrace','fastest_time','fastest_distance']:
+ errors.append('For tests, you can only attach one workout')
+ return result,comments,errors,0
+
+ username = r.user.first_name+' '+r.user.last_name
+ if r.birthdate:
+ age = calculate_age(r.birthdate)
+ else:
+ age = None
+
+ try:
+ record = IndoorVirtualRaceResult.objects.get(
+ userid=r.id,
+ race=race,
+ id=recordid
+ )
+ except IndoorVirtualRaceResult.DoesNotExist:
+ if doregister:
+ hasinitial,boattype,boatclass,adaptiveclass,weightclass,sex,referencespeed,initialcategory = default_class(r,ws[0],race)
+ if hasinitial:
+ record = IndoorVirtualRaceResult(
+ userid = r.id,
+ username = r.user.first_name+' '+r.user.last_name,
+ weightcategory=weightclass,
+ adaptiveclass=adaptiveclass,
+ race=race,
+ boatclass=boatclass,
+ sex=sex,
+ age = age,
+ referencespeed=referencespeed,
+ entrycategory=initialcategory,
+ )
+ record.save()
+ else:
+ errors.append("Unable to find a suitable start category")
+ return result,comments,errors,0
+ else:
+ errors.append("Couldn't find this entry")
+ return result,comments,errors,0
+
+ records = IndoorVirtualRaceResult.objects.filter(
+ userid=r.id,
+ race=race,
+ workoutid = ws[0].id
+ )
+
+ if ws[0].workouttype != record.boatclass:
+ errors.append('Your workout boat class is different than on your race registration')
+ return 0,comments,errors,0
+
+ if ws[0].workouttype not in mytypes.otwtypes:
+ errors.append('You must submit a on-the-water rowing workout')
+ return 0,comments, errors, 0
+
+ if record.weightcategory == 'lwt' and ws[0].weightcategory != record.weightcategory:
+ errors.append('Your workout weight category did not match the weight category you registered')
+ return 0,comments, errors,0
+
+ if ws[0].adaptiveclass != record.adaptiveclass:
+ errors.append('Your adaptive classification did not match the registration')
+ return 0,comments, errors, 0
+
+ # start adding sessions
+ if ws[0].startdatetime>=startdatetime and ws[0].startdatetime<=enddatetime:
+ ws[0].plannedsession = race
+ ws[0].save()
+ result += 1
+
+ else:
+ errors.append('Workout %i did not match the race window' % ws[0].id)
+ return result,comments,errors,0
+
+ if result>0:
+ for otherrecord in records:
+ otherrecord.workoutid = None
+ otherrecord.coursecompleted = False
+ otherrecord.save()
+
+ result, comment, errors = add_workouts_plannedsession(ws,race,r)
+ if result:
+ record.coursecompleted = True
+ record.workoutid = ws[0].id
+ if race.sessiontype == 'fastest_distance':
+ df = dataprep.getsmallrowdata_db(['time','cumdist'],ids=[ws[0].id])
+ fastest_milliseconds = datautils.getfastest(df,race.sessionvalue,mode='distance')
+
+ if fastest_milliseconds > 0:
+ duration = to_time(1000.*fastest_milliseconds)
+ record.coursecompleted = True
+ record.duration = duration
+ record.distance = race.sessionvalue
+ record.save()
+ if race.sessiontype == 'fastest_time':
+ df = dataprep.getsmallrowdata_db(['time','cumdist'],ids=[w.id])
+ fastest_meters = datautils.getfastest(df,ps.sessionvalue,mode='time')
+
+ if fastest_meters > 0:
+ duration = dt.time(0,ps.sessionvalue)
+ record.duration = duration
+ record.distance = fastest_meters
+ record.coursecompleted = True
+ record.save()
+
+
+
+ if ws[0].privacy == 'private':
+ ws[0].privacy = 'visible'
+ ws[0].save()
+ comments.append('Workouts submitted to virtual events have to be public. We have changed the workout to a public workout.')
+
+ record.save()
+
+ return result, comments, errors, 0
# Low Level functions - to be called by higher level methods
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index 57934fe1..a2867ee3 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -3319,13 +3319,16 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
if selectedworkout is not None:
-
-
workouts = Workout.objects.filter(id=selectedworkout)
+
if race.sessiontype == 'race':
result,comments,errors,jobid = add_workout_race(
workouts,race,r,
splitsecond=splitsecond,recordid=recordid)
+ elif race.sessiontype in ['fastest_time','fastest_distance']:
+ result, comments, errors, jobid = add_workout_fastestrace(
+ workouts,race,r,recordid=recordid
+ )
else:
result,comments,errors,jobid = add_workout_indoorrace(
workouts,race,r,recordid=recordid)
From cc3576bb6ec01e304b11e8ff146df77fafb99bad Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Tue, 10 Nov 2020 15:31:07 +0100
Subject: [PATCH 3/8] upload workout to fastest challenge now works
---
rowers/forms.py | 5 ++++-
rowers/plannedsessions.py | 28 +++++++++++++++++++++-----
rowers/views/workoutviews.py | 39 ++++++++++++++++++++++++++++++------
3 files changed, 60 insertions(+), 12 deletions(-)
diff --git a/rowers/forms.py b/rowers/forms.py
index dba009c4..eff14e8a 100644
--- a/rowers/forms.py
+++ b/rowers/forms.py
@@ -15,7 +15,7 @@ from rowers.rows import validate_file_extension,must_be_csv,validate_image_exten
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.contrib.admin.widgets import AdminDateWidget
-from django.forms.widgets import SelectDateWidget
+from django.forms.widgets import SelectDateWidget,HiddenInput
#from django.forms.extras.widgets import SelectDateWidget
from django.utils import timezone,translation
from django.forms import ModelForm, Select
@@ -410,6 +410,8 @@ class UploadOptionsForm(forms.Form):
initial='workout_edit_view',
label='After Upload, go to')
+ raceid = forms.IntegerField(initial=0,widget=HiddenInput())
+
class Meta:
fields = ['make_plot','plottype','upload_toc2','makeprivate']
@@ -448,6 +450,7 @@ class UploadOptionsForm(forms.Form):
if int(raceid) in [r.id for r in races]:
therace = VirtualRace.objects.get(id=raceid)
+ self.fields['raceid'].initial = therace.id
if therace.sessiontype == 'race':
registrations = VirtualRaceResult.objects.filter(race=therace,userid=r.id)
else:
diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py
index fb16db02..b356a3df 100644
--- a/rowers/plannedsessions.py
+++ b/rowers/plannedsessions.py
@@ -1498,23 +1498,33 @@ def default_class(r,w,race):
boatclass=boatclass,
adaptiveclass=adaptiveclass,
boattype=boattype,
+ sex=sex,
).order_by(
"agemax","-agemin","boattype","sex","weightclass",
"referencespeed"
)
if standards.count()==0:
+ # omit adaptive class
standards = CourseStandard.objects.filter(
agemin__lt=age,agemax__gt=age,
- boattype=boattype
+ boattype=boattype,sex=sex,
).order_by(
"agemax","-agemin","boattype","sex",
"weightclass","referencespeed")
if standards.count()==0:
+ # omit boattype
standards = CourseStandard.objects.filter(
- agemin__lt=age,agemax__gt=age
+ agemin__lt=age,agemax__gt=age,sex=sex,
).order_by(
"agemax","-agemin","boattype","sex",
"weightclass","referencespeed")
+ if standards.count()==0:
+ # omit boattype
+ standards = CourseStandard.objects.filter(
+ agemin__lt=age,agemax__gt=age,sex='male',
+ ).order_by(
+ "agemax","-agemin","boattype","sex",
+ "weightclass","referencespeed")
if standards.count()==0:
# boolean, boattype, boatclass, adaptiveclass, weightclass, sex, coursestandard,
@@ -1648,22 +1658,28 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
if race.sessiontype == 'fastest_distance':
df = dataprep.getsmallrowdata_db(['time','cumdist'],ids=[ws[0].id])
fastest_milliseconds = datautils.getfastest(df,race.sessionvalue,mode='distance')
+ velo = race.sessionvalue/fastest_milliseconds
+ points = 100.*velo/record.referencespeed
if fastest_milliseconds > 0:
duration = to_time(1000.*fastest_milliseconds)
record.coursecompleted = True
record.duration = duration
record.distance = race.sessionvalue
+ record.points = points
record.save()
if race.sessiontype == 'fastest_time':
- df = dataprep.getsmallrowdata_db(['time','cumdist'],ids=[w.id])
- fastest_meters = datautils.getfastest(df,ps.sessionvalue,mode='time')
+ df = dataprep.getsmallrowdata_db(['time','cumdist'],ids=[ws[0].id])
+ fastest_meters = datautils.getfastest(df,race.sessionvalue,mode='time')
+ velo = fastest_meters/(60.*race.sessionvalue)
+ points = 100.*velo/record.referencespeed
if fastest_meters > 0:
- duration = dt.time(0,ps.sessionvalue)
+ duration = dt.time(0,race.sessionvalue)
record.duration = duration
record.distance = fastest_meters
record.coursecompleted = True
+ record.points = points
record.save()
@@ -1674,6 +1690,8 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
comments.append('Workouts submitted to virtual events have to be public. We have changed the workout to a public workout.')
record.save()
+ else:
+ errors.append('Could not find a valid interval in this workout')
return result, comments, errors, 0
diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py
index 00cada4c..3ed1fcf3 100644
--- a/rowers/views/workoutviews.py
+++ b/rowers/views/workoutviews.py
@@ -5017,7 +5017,7 @@ def workout_upload_view(request,
response = {}
if request.method == 'POST':
form = DocumentsForm(request.POST,request.FILES)
- optionsform = UploadOptionsForm(request.POST,request=request,raceid=raceid)
+ optionsform = UploadOptionsForm(request.POST,request=request)
if form.is_valid():
# f = request.FILES['file']
@@ -5058,6 +5058,7 @@ def workout_upload_view(request,
upload_to_tp = optionsform.cleaned_data['upload_to_TrainingPeaks']
makeprivate = optionsform.cleaned_data['makeprivate']
landingpage = optionsform.cleaned_data['landingpage']
+ raceid = optionsform.cleaned_data['raceid']
try:
registrationid = optionsform.cleaned_data['submitrace']
@@ -5285,11 +5286,27 @@ def workout_upload_view(request,
messages.info(request,c)
for er in errors:
messages.error(request,er)
+ elif race.sessiontype in ['fastest_time','fastest_distance']:
+ result,comments,errors,jobid = add_workout_fastestrace(
+ [w], race,r,doregister=True,
+ )
+ if result:
+ messages.info(request,"We have submitted your workout to the race")
+ for c in comments:
+ messages.info(request,c)
+ for er in errors:
+ messages.error(request,er)
if int(registrationid)>0:
races = VirtualRace.objects.filter(
registration_closure__gt=timezone.now()
)
+ if raceid != 0:
+ races = VirtualRace.objects.filter(
+ registration_closure__gt=timezone.now(),
+ id=raceid,
+ )
+
registrations = IndoorVirtualRaceResult.objects.filter(
race__in = races,
id=registrationid,
@@ -5306,8 +5323,13 @@ def workout_upload_view(request,
registrations = registrations.filter(id=registrationid)
if registrations:
race = registrations[0].race
- result,comments,errors,jobid = add_workout_indoorrace(
- [w],race,r,recordid=registrations[0].id
+ if race.sessiontype == 'indoorrace':
+ result,comments,errors,jobid = add_workout_indoorrace(
+ [w],race,r,recordid=registrations[0].id
+ )
+ elif race.sessiontype in ['fastest_time','fastest_distance']:
+ result,comments, errors,jobid = add_workout_fastestrace(
+ [w],race,r,recordid=registrations[0].id
)
if result:
@@ -5326,9 +5348,14 @@ def workout_upload_view(request,
registrations = registrations2.filter(id=registrationid)
if registrations:
race = registrations[0].race
- result,comments,errors,jobid = add_workout_race(
- [w], race,r,recordid=registrations[0].id
- )
+ if race.sessiontype == 'race':
+ result,comments,errors,jobid = add_workout_race(
+ [w], race,r,recordid=registrations[0].id
+ )
+ elif race.sessiontype in ['fastest_time','fastest_distance']:
+ result, comments, errors, jobid = add_workout_fastestrace(
+ [w],race,r,recordid=registrations[0].id
+ )
if result:
messages.info(
request,
From 7b796006385a774c197033a2d3dc94cc06236768 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Tue, 10 Nov 2020 18:49:49 +0100
Subject: [PATCH 4/8] fix
---
rowers/plannedsessions.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py
index b356a3df..0a6933b5 100644
--- a/rowers/plannedsessions.py
+++ b/rowers/plannedsessions.py
@@ -407,7 +407,7 @@ def add_workouts_plannedsession(ws,ps,r):
duration = to_time(1000.*fastest_milliseconds)
record = CourseTestResult(
- userid=w.user.id,
+ userid=w.useruser..id,
plannedsession = ps,
duration = duration,
coursecompleted = True,
@@ -418,7 +418,7 @@ def add_workouts_plannedsession(ws,ps,r):
record.save()
else:
record = CourseTestResult(
- userid = w.user.id,
+ userid = w.user.user.id,
workoutid=w.id,
plannedsession = ps,
duration = dt.time(0,0),
@@ -438,7 +438,7 @@ def add_workouts_plannedsession(ws,ps,r):
duration = dt.time(0,ps.sessionvalue)
record = CourseTestResult(
- userid=w.user.id,
+ userid=w.user.user.id,
workoutid=w.id,
plannedsession = ps,
duration = duration,
@@ -448,7 +448,7 @@ def add_workouts_plannedsession(ws,ps,r):
record.save()
else:
record = CourseTestResult(
- userid = w.user.id,
+ userid = w.user.user.id,
plannedsession = ps,
workoutid=w.id,
duration = dt.time(0,ps.sessionvalue),
From e154355cea41ed0441b0425fd86bf3c7f660dc62 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Wed, 11 Nov 2020 07:14:02 +0100
Subject: [PATCH 5/8] better choices, simpler menu challenges
---
rowers/templates/menu_racing.html | 14 +-----
rowers/templates/newchallengechoice.html | 59 +++++++++++++++++++++++
rowers/urls.py | 1 +
static/img/HOCR.png | Bin 0 -> 101385 bytes
static/img/domca.jpg | Bin 0 -> 28700 bytes
static/img/domca.png | Bin 0 -> 190726 bytes
static/img/erg.png | Bin 0 -> 1065821 bytes
static/img/sculler.png | Bin 0 -> 542507 bytes
8 files changed, 62 insertions(+), 12 deletions(-)
create mode 100644 rowers/templates/newchallengechoice.html
create mode 100644 static/img/HOCR.png
create mode 100644 static/img/domca.jpg
create mode 100644 static/img/domca.png
create mode 100644 static/img/erg.png
create mode 100644 static/img/sculler.png
diff --git a/rowers/templates/menu_racing.html b/rowers/templates/menu_racing.html
index 47bcb10d..2c04ced0 100644
--- a/rowers/templates/menu_racing.html
+++ b/rowers/templates/menu_racing.html
@@ -6,18 +6,8 @@
-
- New Course Challenge
-
-
-
-
- New Any Course Challenge
-
-
-
-
- New Indoor Challenge
+
+ New Challenge
{% if race %}
diff --git a/rowers/templates/newchallengechoice.html b/rowers/templates/newchallengechoice.html
new file mode 100644
index 00000000..c43f3842
--- /dev/null
+++ b/rowers/templates/newchallengechoice.html
@@ -0,0 +1,59 @@
+{% extends "newbase.html" %}
+{% load staticfiles %}
+{% load rowerfilters %}
+
+{% block title %}New Virtual Challenge{% endblock %}
+
+{% block main %}
+
+What type of challenge do you want to create?
+
+
+ -
+
Course Challenge
+
+
+

+
+
+ On-the-water challenge with a course. You have to row through
+ all the gates on the course to create a valid entry. Ideal for
+ local challenges.
+
+
+ -
+
Time or Distance Challenge
+
+
+

+
+
+ On-the-water challenge over a set time or distance. This can be rowed
+ on any body of water in the world. Ideal to create a global on-the-water
+ challenge.
+
+
+ -
+
Indoor Rowing Challenge
+
+
+

+
+
+ Indoor rowing challenge over a set time or distance. This can be rowed
+ on any indoor rowing machine. Ideal to create a global indoor rowing
+ challenge.
+
+
+
+
+
+{% endblock %}
+
+
+{% block sidebar %}
+{% include 'menu_racing.html' %}
+{% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 78310079..573a3903 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -260,6 +260,7 @@ urlpatterns = [
# re_path(r'^list-workouts/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/$',views.workouts_view,
# name='workouts_view'),
re_path(r'^virtualevents/$',views.virtualevents_view,name='virtualevents_view'),
+ re_path(r'^virtualevent/createchoice/$', TemplateView.as_view(template_name='newchallengechoice.html'),name='newchallengechoice'),
re_path(r'^virtualevent/create/$',views.virtualevent_create_view,name='virtualevent_create_view'),
re_path(r'^virtualevent/createindoor/$',views.indoorvirtualevent_create_view,name='indoorvirtualevent_create_view'),
re_path(r'^virtualevent/createfastest/$',views.fastestvirtualevent_create_view,
diff --git a/static/img/HOCR.png b/static/img/HOCR.png
new file mode 100644
index 0000000000000000000000000000000000000000..4bc040c4005c437eaef4724ac6c932c9f00d495f
GIT binary patch
literal 101385
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