made everything work with async
This commit is contained in:
@@ -1575,6 +1575,14 @@ class VirtualRaceResult(models.Model):
|
|||||||
|
|
||||||
age = models.IntegerField(null=True)
|
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 VirtualRaceResultForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VirtualRaceResult
|
model = VirtualRaceResult
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# Python
|
# Python
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import datetime as dt
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from datetime import date
|
from datetime import date
|
||||||
import time
|
import time
|
||||||
@@ -18,7 +19,7 @@ queuehigh = django_rq.get_queue('low')
|
|||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
Rower, Workout,Team,
|
Rower, Workout,Team,
|
||||||
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
|
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
|
||||||
TrainingPlan,PlannedSession,VirtualRaceResult
|
TrainingPlan,PlannedSession,VirtualRaceResult,CourseTestResult
|
||||||
)
|
)
|
||||||
|
|
||||||
import metrics
|
import metrics
|
||||||
@@ -61,6 +62,17 @@ def add_workouts_plannedsession(ws,ps,r):
|
|||||||
w.save()
|
w.save()
|
||||||
result += 1
|
result += 1
|
||||||
comments.append('Attached workout %i to session' % w.id)
|
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:
|
else:
|
||||||
errors.append('Workout %i did not match session dates' % w.id)
|
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:
|
if not completiondate:
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
return ratio,'partial',completiondate
|
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:
|
if ps.course:
|
||||||
(
|
(
|
||||||
coursetime,
|
coursetime,
|
||||||
|
|||||||
@@ -210,6 +210,10 @@ def handle_check_race_course(self,
|
|||||||
else:
|
else:
|
||||||
debug = False
|
debug = False
|
||||||
|
|
||||||
|
mode = 'race'
|
||||||
|
if 'mode' in kwargs:
|
||||||
|
mode = kwargs['mode']
|
||||||
|
|
||||||
columns = ['time',' latitude',' longitude','cum_dist']
|
columns = ['time',' latitude',' longitude','cum_dist']
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -293,6 +297,15 @@ def handle_check_race_course(self,
|
|||||||
workoutid=workoutid,
|
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():
|
with engine.connect() as conn, conn.begin():
|
||||||
result = conn.execute(query)
|
result = conn.execute(query)
|
||||||
|
|
||||||
|
|||||||
@@ -115,6 +115,7 @@
|
|||||||
<td> {{ ps.startdate|date:"Y-m-d" }} </td>
|
<td> {{ ps.startdate|date:"Y-m-d" }} </td>
|
||||||
<td> {{ ps.enddate|date:"Y-m-d" }} </td>
|
<td> {{ ps.enddate|date:"Y-m-d" }} </td>
|
||||||
<td>
|
<td>
|
||||||
|
{% if ps.sessiontype != 'race' %}
|
||||||
{% if ps.name != '' %}
|
{% if ps.name != '' %}
|
||||||
<a class="small"
|
<a class="small"
|
||||||
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">{{ ps.name }}</a>
|
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">{{ ps.name }}</a>
|
||||||
@@ -122,6 +123,15 @@
|
|||||||
<a class="small"
|
<a class="small"
|
||||||
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">Unnamed Session</a>
|
href="/rowers/sessions/{{ ps.id }}/{{ timeperiod }}/rower/{{ rower.id }}">Unnamed Session</a>
|
||||||
{% endif %}
|
{% 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>
|
||||||
<td> {{ ps.get_sessiontype_display }} </td>
|
<td> {{ ps.get_sessiontype_display }} </td>
|
||||||
<td> {{ ps.get_sessionmode_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)
|
sps = get_sessions(r,startdate=startdate,enddate=enddate)
|
||||||
|
|
||||||
|
for ps in sps:
|
||||||
|
print ps.name,ps.sessiontype
|
||||||
|
|
||||||
completeness = {}
|
completeness = {}
|
||||||
actualvalue = {}
|
actualvalue = {}
|
||||||
completiondate = {}
|
completiondate = {}
|
||||||
@@ -13187,7 +13190,7 @@ def plannedsession_view(request,id=0,rowerid=0,
|
|||||||
ws = get_workouts_session(r,ps)
|
ws = get_workouts_session(r,ps)
|
||||||
|
|
||||||
ratio,status,completiondate = is_session_complete(r,ps)
|
ratio,status,completiondate = is_session_complete(r,ps)
|
||||||
|
|
||||||
ratio = int(100.*ratio)
|
ratio = int(100.*ratio)
|
||||||
|
|
||||||
# ranking for test
|
# ranking for test
|
||||||
@@ -13214,19 +13217,34 @@ def plannedsession_view(request,id=0,rowerid=0,
|
|||||||
'type': w.workouttype,
|
'type': w.workouttype,
|
||||||
}
|
}
|
||||||
if ps.sessiontype == 'coursetest':
|
if ps.sessiontype == 'coursetest':
|
||||||
(
|
vs = CourseTestResult.objects.filter(plannedsession=ps)
|
||||||
coursetimeseconds,
|
if vs:
|
||||||
coursemeters,
|
for record in vs:
|
||||||
coursecompleted
|
if record.workoutid == w.id:
|
||||||
) = courses.get_time_course([w],ps.course)
|
coursemeters = record.distance
|
||||||
intsecs = int(coursetimeseconds)
|
coursecompleted = record.coursecompleted
|
||||||
microsecs = int(1.e6*(coursetimeseconds-intsecs))
|
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(
|
wdict['time'] = datetime.timedelta(
|
||||||
seconds=intsecs,
|
seconds=intsecs,
|
||||||
microseconds=microsecs
|
microseconds=microsecs
|
||||||
)
|
)
|
||||||
wdict['distance'] = int(round(coursemeters))
|
wdict['distance'] = int(round(coursemeters))
|
||||||
|
|
||||||
|
|
||||||
ranking.append(wdict)
|
ranking.append(wdict)
|
||||||
@@ -13631,7 +13649,7 @@ def virtualevent_create_view(request):
|
|||||||
end_time=end_time,
|
end_time=end_time,
|
||||||
course=geocourse,
|
course=geocourse,
|
||||||
comment=comment,
|
comment=comment,
|
||||||
sessiontype = 'coursetest',
|
sessiontype = 'race',
|
||||||
timezone=timezone_str,
|
timezone=timezone_str,
|
||||||
evaluation_closure=evaluation_closure,
|
evaluation_closure=evaluation_closure,
|
||||||
registration_closure=registration_closure,
|
registration_closure=registration_closure,
|
||||||
|
|||||||
Reference in New Issue
Block a user