made everything work with async
This commit is contained in:
@@ -1575,6 +1575,14 @@ class VirtualRaceResult(models.Model):
|
||||
|
||||
age = models.IntegerField(null=True)
|
||||
|
||||
class CourseTestResult(models.Model):
|
||||
userid = models.IntegerField(default=0)
|
||||
workoutid = models.IntegerField(null=True)
|
||||
plannedsession = models.ForeignKey(PlannedSession)
|
||||
duration = models.TimeField(default=datetime.time(1,0))
|
||||
distance = models.IntegerField(default=0)
|
||||
coursecompleted = models.BooleanField(default=False)
|
||||
|
||||
class VirtualRaceResultForm(ModelForm):
|
||||
class Meta:
|
||||
model = VirtualRaceResult
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# Python
|
||||
from django.utils import timezone
|
||||
from datetime import datetime
|
||||
import datetime as dt
|
||||
from datetime import timedelta
|
||||
from datetime import date
|
||||
import time
|
||||
@@ -18,7 +19,7 @@ queuehigh = django_rq.get_queue('low')
|
||||
from rowers.models import (
|
||||
Rower, Workout,Team,
|
||||
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
|
||||
TrainingPlan,PlannedSession,VirtualRaceResult
|
||||
TrainingPlan,PlannedSession,VirtualRaceResult,CourseTestResult
|
||||
)
|
||||
|
||||
import metrics
|
||||
@@ -61,6 +62,17 @@ def add_workouts_plannedsession(ws,ps,r):
|
||||
w.save()
|
||||
result += 1
|
||||
comments.append('Attached workout %i to session' % w.id)
|
||||
if ps.sessiontype == 'coursetest':
|
||||
record = CourseTestResult(
|
||||
userid=w.user.id,
|
||||
plannedsession=ps,
|
||||
duration=dt.time(0,0),
|
||||
coursecompleted=False,
|
||||
)
|
||||
record.save()
|
||||
job = myqueue(queue,handle_check_race_course,w.csvfilename,
|
||||
w.id,ps.course.id,record.id,
|
||||
mode='coursetest')
|
||||
else:
|
||||
errors.append('Workout %i did not match session dates' % w.id)
|
||||
|
||||
@@ -273,7 +285,68 @@ def is_session_complete_ws(ws,ps):
|
||||
if not completiondate:
|
||||
completiondate = ws.reverse()[0].date
|
||||
return ratio,'partial',completiondate
|
||||
elif ps.sessiontype in ['coursetest','race']:
|
||||
elif ps.sessiontype == 'race':
|
||||
vs = VirtualRaceResult.objects.filter(race=ps)
|
||||
wids = [w.id for w in ws]
|
||||
for record in vs:
|
||||
if record.workoutid in wids:
|
||||
if record.coursecompleted:
|
||||
ratio = record.distance/ps.sessionvalue
|
||||
return ratio,'completed',completiondate
|
||||
|
||||
if ps.course:
|
||||
(
|
||||
coursetime,
|
||||
coursemeters,
|
||||
coursecompleted
|
||||
) = courses.get_time_course(ws,ps.course)
|
||||
if coursecompleted:
|
||||
return 1.0,'completed',completiondate
|
||||
else:
|
||||
return ratio,'partial',completiondate
|
||||
else:
|
||||
if ps.criterium == 'exact':
|
||||
if ratio == 1.0:
|
||||
return ratio,'completed',completiondate
|
||||
else:
|
||||
if not completiondate:
|
||||
completiondate = ws.reverse()[0].date
|
||||
return ratio,'partial',completiondate
|
||||
elif ps.criterium == 'minimum':
|
||||
if ratio >= 1.0:
|
||||
return ratio,'completed',completiondate
|
||||
else:
|
||||
if not completiondate:
|
||||
completiondate = ws.reverse()[0].date
|
||||
|
||||
return ratio,'partial',completiondate
|
||||
else:
|
||||
if ratio>cratiomin and ratio<cratiomax:
|
||||
return ratio,'completed',completiondate
|
||||
else:
|
||||
return ratio,'partial',completiondate
|
||||
elif ps.sessiontype == 'coursetest':
|
||||
vs = CourseTestResult.objects.filter(plannedsession=ps)
|
||||
wids = [w.id for w in ws]
|
||||
for record in vs:
|
||||
if record.workoutid in wids:
|
||||
if record.coursecompleted:
|
||||
ratio = record.distance/ps.sessionvalue
|
||||
return ratio,'completed',completiondate
|
||||
|
||||
# we're still here - no record, need to create one
|
||||
if ws:
|
||||
record = CourseTestResult(
|
||||
userid=ws[0].user.id,
|
||||
plannedsession=ps,
|
||||
duration=dt.time(0,0),
|
||||
coursecompleted=False,
|
||||
)
|
||||
record.save()
|
||||
job = myqueue(queue,handle_check_race_course,ws[0].csvfilename,
|
||||
ws[0].id,ps.course.id,record.id,
|
||||
mode='coursetest')
|
||||
|
||||
if ps.course:
|
||||
(
|
||||
coursetime,
|
||||
|
||||
@@ -210,6 +210,10 @@ def handle_check_race_course(self,
|
||||
else:
|
||||
debug = False
|
||||
|
||||
mode = 'race'
|
||||
if 'mode' in kwargs:
|
||||
mode = kwargs['mode']
|
||||
|
||||
columns = ['time',' latitude',' longitude','cum_dist']
|
||||
|
||||
try:
|
||||
@@ -293,6 +297,15 @@ def handle_check_race_course(self,
|
||||
workoutid=workoutid,
|
||||
)
|
||||
|
||||
if mode == 'coursetest':
|
||||
query = 'UPDATE "rowers_coursetestresult" SET "coursecompleted" = 1, "duration" = "{duration}", "distance" = {distance}, "workoutid" = {workoutid} WHERE "id"="{recordid}"'.format(
|
||||
recordid=recordid,
|
||||
duration=totaltime_sec_to_string(coursetimeseconds),
|
||||
distance=int(coursemeters),
|
||||
workoutid=workoutid,
|
||||
)
|
||||
|
||||
|
||||
with engine.connect() as conn, conn.begin():
|
||||
result = conn.execute(query)
|
||||
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
<td> {{ ps.startdate|date:"Y-m-d" }} </td>
|
||||
<td> {{ ps.enddate|date:"Y-m-d" }} </td>
|
||||
<td>
|
||||
{% if ps.sessiontype != 'race' %}
|
||||
{% if ps.name != '' %}
|
||||
<a class="small"
|
||||
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">{{ ps.name }}</a>
|
||||
@@ -122,6 +123,15 @@
|
||||
<a class="small"
|
||||
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">Unnamed Session</a>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if ps.name != '' %}
|
||||
<a class="small"
|
||||
href="/rowers/virtualevent/{{ ps.id }}">{{ ps.name }}</a>
|
||||
{% else %}
|
||||
<a class="small"
|
||||
href="/rowers/virtualevent/{{ ps.id }}">Unnamed Race</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td> {{ ps.get_sessiontype_display }} </td>
|
||||
<td> {{ ps.get_sessionmode_display }} </td>
|
||||
|
||||
@@ -12857,6 +12857,9 @@ def plannedsessions_view(request,timeperiod='thisweek',rowerid=0):
|
||||
|
||||
sps = get_sessions(r,startdate=startdate,enddate=enddate)
|
||||
|
||||
for ps in sps:
|
||||
print ps.name,ps.sessiontype
|
||||
|
||||
completeness = {}
|
||||
actualvalue = {}
|
||||
completiondate = {}
|
||||
@@ -13187,7 +13190,7 @@ def plannedsession_view(request,id=0,rowerid=0,
|
||||
ws = get_workouts_session(r,ps)
|
||||
|
||||
ratio,status,completiondate = is_session_complete(r,ps)
|
||||
|
||||
|
||||
ratio = int(100.*ratio)
|
||||
|
||||
# ranking for test
|
||||
@@ -13214,19 +13217,34 @@ def plannedsession_view(request,id=0,rowerid=0,
|
||||
'type': w.workouttype,
|
||||
}
|
||||
if ps.sessiontype == 'coursetest':
|
||||
(
|
||||
coursetimeseconds,
|
||||
coursemeters,
|
||||
coursecompleted
|
||||
) = courses.get_time_course([w],ps.course)
|
||||
intsecs = int(coursetimeseconds)
|
||||
microsecs = int(1.e6*(coursetimeseconds-intsecs))
|
||||
vs = CourseTestResult.objects.filter(plannedsession=ps)
|
||||
if vs:
|
||||
for record in vs:
|
||||
if record.workoutid == w.id:
|
||||
coursemeters = record.distance
|
||||
coursecompleted = record.coursecompleted
|
||||
t = record.duration
|
||||
wdict['time'] = datetime.timedelta(
|
||||
hours=t.hour,
|
||||
seconds=t.second,
|
||||
minutes=t.minute,
|
||||
microseconds=t.microsecond
|
||||
)
|
||||
wdict['distance'] = int(round(coursemeters))
|
||||
else:
|
||||
(
|
||||
coursetimeseconds,
|
||||
coursemeters,
|
||||
coursecompleted
|
||||
) = courses.get_time_course([w],ps.course)
|
||||
intsecs = int(coursetimeseconds)
|
||||
microsecs = int(1.e6*(coursetimeseconds-intsecs))
|
||||
|
||||
wdict['time'] = datetime.timedelta(
|
||||
seconds=intsecs,
|
||||
microseconds=microsecs
|
||||
wdict['time'] = datetime.timedelta(
|
||||
seconds=intsecs,
|
||||
microseconds=microsecs
|
||||
)
|
||||
wdict['distance'] = int(round(coursemeters))
|
||||
wdict['distance'] = int(round(coursemeters))
|
||||
|
||||
|
||||
ranking.append(wdict)
|
||||
@@ -13631,7 +13649,7 @@ def virtualevent_create_view(request):
|
||||
end_time=end_time,
|
||||
course=geocourse,
|
||||
comment=comment,
|
||||
sessiontype = 'coursetest',
|
||||
sessiontype = 'race',
|
||||
timezone=timezone_str,
|
||||
evaluation_closure=evaluation_closure,
|
||||
registration_closure=registration_closure,
|
||||
|
||||
Reference in New Issue
Block a user