attach workouts to sessions version 0
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user