From 4f8bdf15437c9457d877344ce040fe40c2cfc70e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 17 May 2018 18:19:42 +0200 Subject: [PATCH] made everything work with async --- rowers/models.py | 8 +++ rowers/plannedsessions.py | 77 ++++++++++++++++++++++++++- rowers/tasks.py | 13 +++++ rowers/templates/plannedsessions.html | 10 ++++ rowers/views.py | 44 ++++++++++----- 5 files changed, 137 insertions(+), 15 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index 374339ff..c5dd1270 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -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 diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 3911458f..7f01d08c 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -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 {{ ps.startdate|date:"Y-m-d" }} {{ ps.enddate|date:"Y-m-d" }} + {% if ps.sessiontype != 'race' %} {% if ps.name != '' %} {{ ps.name }} @@ -122,6 +123,15 @@ Unnamed Session {% endif %} + {% else %} + {% if ps.name != '' %} + {{ ps.name }} + {% else %} + Unnamed Race + {% endif %} + {% endif %} {{ ps.get_sessiontype_display }} {{ ps.get_sessionmode_display }} diff --git a/rowers/views.py b/rowers/views.py index 57c45db9..bba37d17 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -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,