basic submit, does not calculate points yet
This commit is contained in:
@@ -1528,6 +1528,154 @@ def default_class(r,w,race):
|
|||||||
# No Course Standard
|
# No Course Standard
|
||||||
return True,boattype,boatclass,adaptiveclass,weightclass,sex,5.0,None
|
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
|
# Low Level functions - to be called by higher level methods
|
||||||
|
|||||||
@@ -3319,13 +3319,16 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
|||||||
|
|
||||||
|
|
||||||
if selectedworkout is not None:
|
if selectedworkout is not None:
|
||||||
|
|
||||||
|
|
||||||
workouts = Workout.objects.filter(id=selectedworkout)
|
workouts = Workout.objects.filter(id=selectedworkout)
|
||||||
|
|
||||||
if race.sessiontype == 'race':
|
if race.sessiontype == 'race':
|
||||||
result,comments,errors,jobid = add_workout_race(
|
result,comments,errors,jobid = add_workout_race(
|
||||||
workouts,race,r,
|
workouts,race,r,
|
||||||
splitsecond=splitsecond,recordid=recordid)
|
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:
|
else:
|
||||||
result,comments,errors,jobid = add_workout_indoorrace(
|
result,comments,errors,jobid = add_workout_indoorrace(
|
||||||
workouts,race,r,recordid=recordid)
|
workouts,race,r,recordid=recordid)
|
||||||
|
|||||||
Reference in New Issue
Block a user