initial incomplete version
This commit is contained in:
373
rowers/views.py
373
rowers/views.py
@@ -90,7 +90,9 @@ from rowers.models import (
|
||||
WorkoutComment,WorkoutCommentForm,RowerExportForm,
|
||||
CalcAgePerformance,PowerTimeFitnessMetric,PlannedSessionForm,
|
||||
PlannedSessionFormSmall,GeoCourseEditForm,VirtualRace,
|
||||
VirtualRaceForm,VirtualRaceResultForm,RowerImportExportForm
|
||||
VirtualRaceForm,VirtualRaceResultForm,RowerImportExportForm,
|
||||
IndoorVirtualRaceResultForm,IndoorVirtualRaceResult,
|
||||
IndoorVirtualRaceForm,
|
||||
)
|
||||
from rowers.models import (
|
||||
FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet,
|
||||
@@ -15765,7 +15767,8 @@ def virtualevents_view(request):
|
||||
if country == 'All':
|
||||
countries = VirtualRace.objects.order_by('country').values_list('country').distinct()
|
||||
else:
|
||||
countries = [country]
|
||||
countries = [country,
|
||||
'Indoor']
|
||||
|
||||
if regattatype == 'upcoming':
|
||||
races1 = VirtualRace.objects.filter(
|
||||
@@ -15836,13 +15839,17 @@ def virtualevent_view(request,id=0):
|
||||
except VirtualRace.DoesNotExist:
|
||||
raise Http404("Virtual Race does not exist")
|
||||
|
||||
script,div = course_map(race.course)
|
||||
if race.sessiontype == 'race':
|
||||
script,div = course_map(race.course)
|
||||
resultobj = VirtualRaceResult
|
||||
else:
|
||||
script = ''
|
||||
div = ''
|
||||
resultobj = IndoorVirtualRaceResult
|
||||
|
||||
|
||||
records = VirtualRaceResult.objects.filter(
|
||||
race=race
|
||||
)
|
||||
|
||||
records = resultobj.objects.filter(race=race)
|
||||
|
||||
|
||||
buttons = []
|
||||
|
||||
if not request.user.is_anonymous():
|
||||
@@ -15881,8 +15888,11 @@ def virtualevent_view(request,id=0):
|
||||
try:
|
||||
boatclass = cd['boatclass']
|
||||
except KeyError:
|
||||
boatclass = [t for t in mytypes.otwtypes]
|
||||
|
||||
if race.sessiontype == 'race':
|
||||
boatclass = [t for t in mytypes.otwtypes]
|
||||
else:
|
||||
boatclass = [t for t in mytypes.otetypes]
|
||||
|
||||
age_min = cd['age_min']
|
||||
age_max = cd['age_max']
|
||||
|
||||
@@ -15891,35 +15901,46 @@ def virtualevent_view(request,id=0):
|
||||
except KeyError:
|
||||
weightcategory = ['hwt','lwt']
|
||||
|
||||
results = VirtualRaceResult.objects.filter(
|
||||
race=race,
|
||||
workoutid__isnull=False,
|
||||
boatclass__in=boatclass,
|
||||
boattype__in=boattype,
|
||||
sex__in=sex,
|
||||
weightcategory__in=weightcategory,
|
||||
age__gte=age_min,
|
||||
age__lte=age_max
|
||||
).order_by("duration")
|
||||
|
||||
# to-do - add DNS
|
||||
dns = []
|
||||
if timezone.now() > race.evaluation_closure:
|
||||
dns = VirtualRaceResult.objects.filter(
|
||||
if race.sessiontype == 'race':
|
||||
results = resultobj.objects.filter(
|
||||
race=race,
|
||||
workoutid__isnull=True,
|
||||
workoutid__isnull=False,
|
||||
boatclass__in=boatclass,
|
||||
boattype__in=boattype,
|
||||
sex__in=sex,
|
||||
weightcategory__in=weightcategory,
|
||||
age__gte=age_min,
|
||||
age__lte=age_max
|
||||
).order_by("duration")
|
||||
else:
|
||||
results = resultobj.objects.filter(
|
||||
race=race,
|
||||
workoutid__isnull=False,
|
||||
boatclass__in=boatclass,
|
||||
sex__in=sex,
|
||||
weightcategory__in=weightcategory,
|
||||
age__gte=age_min,
|
||||
age__lte=age_max
|
||||
).order_by("duration","-distance")
|
||||
|
||||
|
||||
# to-do - add DNS
|
||||
dns = []
|
||||
if timezone.now() > race.evaluation_closure:
|
||||
dns = resultobj.objects.filter(
|
||||
race=race,
|
||||
workoutid__isnull=True,
|
||||
boatclass__in=boatclass,
|
||||
sex__in=sex,
|
||||
weightcategory__in=weightcategory,
|
||||
age__gte=age_min,
|
||||
age__lte=age_max
|
||||
)
|
||||
else:
|
||||
results = VirtualRaceResult.objects.filter(
|
||||
results = resultobj.objects.filter(
|
||||
race=race,
|
||||
workoutid__isnull=False,
|
||||
).order_by("duration")
|
||||
).order_by("duration","-distance")
|
||||
|
||||
if results:
|
||||
form = RaceResultFilterForm(records=records)
|
||||
@@ -15929,7 +15950,7 @@ def virtualevent_view(request,id=0):
|
||||
# to-do - add DNS
|
||||
dns = []
|
||||
if timezone.now() > race.evaluation_closure:
|
||||
dns = VirtualRaceResult.objects.filter(
|
||||
dns = resultobj.objects.filter(
|
||||
race=race,
|
||||
workoutid__isnull=True,
|
||||
)
|
||||
@@ -16190,6 +16211,221 @@ def virtualevent_register_view(request,id=0):
|
||||
|
||||
})
|
||||
|
||||
@login_required()
|
||||
def indoorvirtualevent_register_view(request,id=0):
|
||||
r = getrower(request.user)
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
except VirtualRace.DoesNotExist:
|
||||
raise Http404("Virtual Race does not exist")
|
||||
|
||||
if not race_can_register(r,race):
|
||||
messages.error(request,"You cannot register for this race")
|
||||
|
||||
url = reverse(virtualevent_view,
|
||||
kwargs = {
|
||||
'id':race.id
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# we're still here
|
||||
if request.method == 'POST':
|
||||
# process form
|
||||
form = IndoorVirtualRaceResultForm(request.POST)
|
||||
if form.is_valid():
|
||||
cd = form.cleaned_data
|
||||
teamname = cd['teamname']
|
||||
weightcategory = cd['weightcategory']
|
||||
age = cd['age']
|
||||
boatclass = cd['boatclass']
|
||||
|
||||
sex = r.sex
|
||||
|
||||
if r.birthdate:
|
||||
age = calculate_age(r.birthdate)
|
||||
sex = r.sex
|
||||
|
||||
if sex == 'not specified':
|
||||
sex = 'male'
|
||||
|
||||
record = IndoorVirtualRaceResult(
|
||||
userid=r.id,
|
||||
teamname=teamname,
|
||||
race=race,
|
||||
username = u'{f} {l}'.format(
|
||||
f = r.user.first_name,
|
||||
l = r.user.last_name
|
||||
),
|
||||
weightcategory=weightcategory,
|
||||
duration=datetime.time(0,0),
|
||||
boatclass=boatclass,
|
||||
coursecompleted=False,
|
||||
sex=sex,
|
||||
age=age
|
||||
)
|
||||
|
||||
record.save()
|
||||
|
||||
add_rower_race(r,race)
|
||||
|
||||
|
||||
|
||||
messages.info(
|
||||
request,
|
||||
"You have successfully registered for this race. Good luck!"
|
||||
)
|
||||
|
||||
url = reverse(virtualevent_view,
|
||||
kwargs = {
|
||||
'id':race.id
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
initial = {
|
||||
'age': calculate_age(r.birthdate),
|
||||
'weightcategory': r.weightcategory,
|
||||
}
|
||||
|
||||
form = IndoorVirtualRaceResultForm(initial=initial)
|
||||
|
||||
return render(request,'virtualeventregister.html',
|
||||
{
|
||||
'form':form,
|
||||
'race':race,
|
||||
'userid':r.user.id,
|
||||
|
||||
})
|
||||
|
||||
@login_required()
|
||||
def indoorvirtualevent_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']
|
||||
|
||||
# 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'
|
||||
else:
|
||||
sessionmode = 'distance'
|
||||
|
||||
vs = VirtualRace(
|
||||
name=name,
|
||||
startdate=startdate,
|
||||
preferreddate = startdate,
|
||||
start_time = start_time,
|
||||
enddate=enddate,
|
||||
end_time=end_time,
|
||||
comment=comment,
|
||||
sessiontype = 'indoorrace',
|
||||
sessionunit = sessionunit,
|
||||
sessionmode = sessionmode,
|
||||
sessionvalue = sessionvalue,
|
||||
course=None,
|
||||
timezone=timezone_str,
|
||||
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:
|
||||
dotweet = False
|
||||
elif 'dev' in settings.SITE_URL:
|
||||
dotweet = False
|
||||
else:
|
||||
dotweet = True
|
||||
try:
|
||||
sa = SiteAnnouncement(
|
||||
announcement = "New Virtual Indoor Race on rowsandall.com: {name}".format(
|
||||
name = name.encode('utf8'),
|
||||
),
|
||||
dotweet = dotweet
|
||||
)
|
||||
|
||||
sa.save()
|
||||
except UnicodeEncodeError:
|
||||
sa = SiteAnnouncement(
|
||||
announcement = "New Virtual Indoor Race on rowsandall.com: {name}".format(
|
||||
name = name,
|
||||
),
|
||||
dotweet = dotweet
|
||||
)
|
||||
|
||||
|
||||
sa.save()
|
||||
|
||||
url = reverse(virtualevents_view)
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
|
||||
racecreateform = IndoorVirtualRaceForm()
|
||||
|
||||
|
||||
return render(request,'indoorvirtualeventcreate.html',
|
||||
{
|
||||
'form':racecreateform,
|
||||
'rower':r,
|
||||
'active':'nav-racing',
|
||||
|
||||
})
|
||||
|
||||
@login_required()
|
||||
def virtualevent_create_view(request):
|
||||
r = getrower(request.user)
|
||||
@@ -16369,6 +16605,64 @@ def virtualevent_edit_view(request,id=0):
|
||||
|
||||
})
|
||||
|
||||
@login_required()
|
||||
def indoorvirtualevent_edit_view(request,id=0):
|
||||
r = getrower(request.user)
|
||||
|
||||
try:
|
||||
race = VirtualRace.objects.get(id=id)
|
||||
if race.manager != request.user:
|
||||
raise PermissionDenied("Access denied")
|
||||
except VirtualRace.DoesNotExist:
|
||||
raise Http404("Virtual Race does not exist")
|
||||
|
||||
start_time = race.start_time
|
||||
start_date = race.startdate
|
||||
startdatetime = datetime.datetime.combine(start_date,start_time)
|
||||
startdatetime = pytz.timezone(race.timezone).localize(
|
||||
startdatetime
|
||||
)
|
||||
|
||||
if timezone.now() > startdatetime:
|
||||
messages.error(request,"You cannot edit a race after the start of the race window")
|
||||
url = reverse(virtualevent_view,
|
||||
kwargs={
|
||||
'id':race.id,
|
||||
})
|
||||
|
||||
if request.method == 'POST':
|
||||
racecreateform = IndoorVirtualRaceForm(request.POST,instance=race)
|
||||
if racecreateform.is_valid():
|
||||
cd = racecreateform.cleaned_data
|
||||
|
||||
res, message = update_indoorvirtualrace(race,cd)
|
||||
|
||||
if res:
|
||||
messages.info(request,message)
|
||||
else:
|
||||
messages.error(request,message)
|
||||
|
||||
url = reverse(virtualevent_view,
|
||||
kwargs = {
|
||||
'id':race.id
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
|
||||
racecreateform = IndoorVirtualRaceForm(instance=race)
|
||||
|
||||
|
||||
return render(request,'virtualeventedit.html',
|
||||
{
|
||||
'form':racecreateform,
|
||||
'rower':r,
|
||||
'race':race,
|
||||
|
||||
})
|
||||
|
||||
|
||||
@login_required()
|
||||
def virtualevent_submit_result_view(request,id=0):
|
||||
|
||||
@@ -16391,7 +16685,12 @@ def virtualevent_submit_result_view(request,id=0):
|
||||
|
||||
can_submit = race_can_submit(r,race) or race_can_resubmit(r,race)
|
||||
|
||||
records = VirtualRaceResult.objects.filter(
|
||||
if race.sessiontype == 'race':
|
||||
resultobj = VirtualRaceResult
|
||||
else:
|
||||
resultobj = IndoorVirtualRaceResult
|
||||
|
||||
records = resultobj.objects.filter(
|
||||
userid = r.id,
|
||||
race=race
|
||||
)
|
||||
@@ -16462,10 +16761,16 @@ def virtualevent_submit_result_view(request,id=0):
|
||||
|
||||
workouts = Workout.objects.filter(id=selectedworkout)
|
||||
|
||||
result,comments,errors,jobid = add_workout_race(
|
||||
workouts,race,r,
|
||||
splitsecond=splitsecond,recordid=recordid)
|
||||
# if result:
|
||||
if race.sessiontype == 'race':
|
||||
result,comments,errors,jobid = add_workout_race(
|
||||
workouts,race,r,
|
||||
splitsecond=splitsecond,recordid=recordid)
|
||||
else:
|
||||
result,comments,errors,jobid = add_workout_indoorrace(
|
||||
workouts,race,r,recordid=recordid)
|
||||
|
||||
|
||||
# if result:
|
||||
# for w in ws:
|
||||
# remove_workout_plannedsession(w,race)
|
||||
# delete_race_result(w,race)
|
||||
|
||||
Reference in New Issue
Block a user