Private
Public Access
1
0

attach workouts to sessions version 0

This commit is contained in:
Sander Roosendaal
2018-02-07 16:37:03 +01:00
parent d3448c66f1
commit 91d59dfc28
13 changed files with 483 additions and 61 deletions

View File

@@ -26,14 +26,28 @@ import numpy as np
import dataprep
# Low Level functions - to be called by higher level methods
# dummies for now
def add_workouts_plannedsession(ws,ps):
for w in ws:
w.plannedsession = ps
w.save()
result = 0
comments = []
errors = []
return 1
# 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 ps.sessiontype != 'challenge':
errors.append('For tests and training sessions, selected workouts must all be done on the same date')
return result,comments,errors
# start adding sessions
for w in ws:
if w.date>=ps.startdate and w.date<=ps.enddate:
w.plannedsession = ps
w.save()
result += 1
comments.append('Attached workout %i to session' % w.id)
else:
errors.append('Workout %i did not match session dates' % w.id)
return result,comments,errors
def remove_workout_plannedsession(w,ps):
@@ -57,8 +71,20 @@ def timefield_to_seconds_duration(t):
return duration
def is_session_complete(ps):
ws = Workout.objects.filter(plannedsession=ps)
def is_session_complete(r,ps):
status = 'not done'
ws = Workout.objects.filter(user=r,plannedsession=ps)
if len(ws)==0:
today = date.today()
if today > ps.enddate:
status = 'missed'
ratio = 0
return ratio,status
else:
return 0,'not done'
score = 0
for w in ws:
if ps.sessionmode == 'distance':
@@ -73,13 +99,56 @@ def is_session_complete(ps):
rscore = dataprep.workout_rscore(w)
score += rscore
ratio = score/float(ps.value)
value = ps.sessionvalue
if ps.sessionunit == 'min':
value *= 60.
elif ps.sessionunit == 'km':
value *= 1000.
if ratio>0.8 and ratio<1.2:
return True
print score,value,ps.sessionvalue,ps.sessionunit
ratio = score/float(value)
return False
status = 'partial'
if ps.sessiontype == 'training':
if ps.sessioncriterium == 'exact':
if ratio == 1.0:
return ratio,'completed'
else:
return ratio,'partial'
elif ps.sessioncriterium == 'minimum':
if ratio > 1.0:
return ratio,'completed'
else:
return ratio,'partial'
else:
if ratio>0.8 and ratio<1.2:
return ratio,'completed'
else:
return ratio,'partial'
elif ps.sessiontype == 'test':
if ratio==1.0:
return ratio,'completed'
else:
return ratio,'partial'
elif ps.sessiontype == 'challenge':
if ps.sessioncriterium == 'exact':
if ratio == 1.0:
return ratio,'completed'
else:
return ratio,'partial'
elif ps.sessioncriterium == 'minimum':
if ratio > 1.0:
return ratio,'completed'
else:
return ratio,'partial'
else:
return ratio,'partial'
else:
return ratio,status
def rank_results(ps):
return 1
@@ -105,17 +174,58 @@ def remove_rower_session(r,ps):
return 1
def get_dates_timeperiod(timeperiod):
# set start end date according timeperiod
if timeperiod=='today':
startdate=date.today()
enddate=date.today()
elif timeperiod=='tomorrow':
startdate=date.today()+timezone.timedelta(days=1)
enddate=date.today()+timezone.timedelta(days=1)
elif timeperiod=='thisweek':
today = date.today()
startdate = date.today()-timezone.timedelta(days=today.weekday())
enddate = startdate+timezone.timedelta(days=6)
elif timeperiod=='thismonth':
today = date.today()
startdate = today.replace(day=1)
enddate = startdate+timezone.timedelta(days=32)
enddate = enddate.replace(day=1)
enddate = enddate-timezone.timedelta(days=1)
elif timeperiod=='lastweek':
today = date.today()
enddate = today-timezone.timedelta(days=today.weekday())-timezone.timedelta(days=1)
startdate = enddate-timezone.timedelta(days=6)
elif timeperiod=='lastmonth':
today = date.today()
startdate = today.replace(day=1)
startdate = startdate-timezone.timedelta(days=3)
startdate = startdate.replace(day=1)
enddate = startdate+timezone.timedelta(days=32)
enddate = enddate.replace(day=1)
enddate = enddate-timezone.timedelta(days=1)
else:
startdate = date.today()
enddate = date.today()
return startdate,enddate
def get_sessions(r,startdate=date.today(),
enddate=date.today()+timezone.timedelta(+1000)):
sps = PlannedSession.objects.filter(
rower__in=[r],
startdate__gte=startdate,
enddate__lte=enddate,
startdate__lte=enddate,
enddate__gte=startdate,
).order_by("startdate","enddate")
return sps
def get_workouts_session(r,ps):
ws = Workout.objects.filter(user=r,plannedsession=ps)
return ws
def update_plannedsession(ps,cd):
for attr, value in cd.items():
setattr(ps, attr, value)