Private
Public Access
1
0

improved session completion date

This commit is contained in:
Sander Roosendaal
2018-02-16 10:41:26 +01:00
parent af2ae853bd
commit 0c9bfcad8d
3 changed files with 55 additions and 38 deletions

View File

@@ -104,7 +104,8 @@ def get_session_metrics(ps):
completedatev = ''
statusv = 0
ws = Workout.objects.filter(user=r,plannedsession=ps)
ws = Workout.objects.filter(user=r,plannedsession=ps).order_by("date")
if len(ws) != 0:
for w in ws:
distancev += w.distance
@@ -112,8 +113,11 @@ def get_session_metrics(ps):
trimpv += dataprep.workout_trimp(w)
rscorev += dataprep.workout_rscore(w)[0]
ratio,statusv = is_session_complete_ws(ws,ps)
completedatev = ws[0].date.strftime('%Y-%m-%d')
ratio,statusv,completiondate = is_session_complete_ws(ws,ps)
try:
completedatev = completiondate.strftime('%Y-%m-%d')
except AttributeError:
completedatev = ''
durationv /= 60.
trimp.append(int(trimpv))
@@ -139,16 +143,35 @@ def get_session_metrics(ps):
return thedict
def is_session_complete_ws(ws,ps):
ws = ws.order_by("date")
if len(ws)==0:
today = date.today()
if today > ps.enddate:
status = 'missed'
ratio = 0
return ratio,status
return ratio,status,None
else:
return 0,'not done'
return 0,'not done',None
value = ps.sessionvalue
if ps.sessionunit == 'min':
value *= 60.
elif ps.sessionunit == 'km':
value *= 1000.
cratiomin = 1
cratiomax = 1
if ps.criterium == 'none':
if ps.sessiontype == 'session':
cratiomin = 0.8
cratiomax = 1.2
else:
cratiomin = 0.9167
cratiomax = 1.0833
score = 0
completiondate = None
for w in ws:
if ps.sessionmode == 'distance':
score += w.distance
@@ -161,12 +184,8 @@ def is_session_complete_ws(ws,ps):
elif ps.sessionmode == 'rScore':
rscore = dataprep.workout_rscore(w)[0]
score += rscore
value = ps.sessionvalue
if ps.sessionunit == 'min':
value *= 60.
elif ps.sessionunit == 'km':
value *= 1000.
if not completiondate and score>=cratiomin*value:
completiondate = w.date
ratio = score/float(value)
@@ -175,49 +194,47 @@ def is_session_complete_ws(ws,ps):
if ps.sessiontype in ['session','cycletarget']:
if ps.criterium == 'exact':
if ratio == 1.0:
return ratio,'completed'
return ratio,'completed',completiondate
else:
return ratio,'partial'
return ratio,'partial',completiondate
elif ps.criterium == 'minimum':
if ratio >= 1.0:
return ratio,'completed'
return ratio,'completed',completiondate
else:
return ratio,'partial'
return ratio,'partial',completiondate
else:
if ratio>0.8 and ratio<1.2 and ps.sessiontype=='session':
return ratio,'completed'
elif ratio>0.9167 and ratio<1.0833 and ps.sessiontype=='cycletarget':
return ratio,'completed'
if ratio>cratiomin and ratio<cratiomax:
return ratio,'completed',completiondate
else:
return ratio,'partial'
return ratio,'partial',completiondate
elif ps.sessiontype == 'test':
if ratio==1.0:
return ratio,'completed'
return ratio,'completed',completiondate
else:
return ratio,'partial'
return ratio,'partial',completiondate
elif ps.sessiontype == 'challenge':
if ps.criterium == 'exact':
if ratio == 1.0:
return ratio,'completed'
return ratio,'completed',completiondate
else:
return ratio,'partial'
return ratio,'partial',completiondate
elif ps.criterium == 'minimum':
if ratio > 1.0:
return ratio,'completed'
return ratio,'completed',completiondate
else:
return ratio,'partial'
return ratio,'partial',completiondate
else:
return ratio,'partial'
return ratio,'partial',completiondate
else:
return ratio,status
return ratio,status,completiondate
def is_session_complete(r,ps):
status = 'not done'
if r not in ps.rower.all():
return 0,'not assigned'
return 0,'not assigned',None
ws = Workout.objects.filter(user=r,plannedsession=ps)

View File

@@ -92,7 +92,11 @@
</td>
<td>
<a href="/rowers/sessions/{{ key }}">
{% if thedict|lookup:'name' %}
{{ thedict|lookup:'name' }}
{% else %}
Unnamed Session
{% endif %}
</a>
</td>
{% for r in rowers %}

View File

@@ -11991,7 +11991,7 @@ def plannedsessions_coach_view(request,timeperiod='thisweek',
for ps in sps:
rowerstatus = {}
for r in rowers:
ratio, status = is_session_complete(r,ps)
ratio, status,completiondate = is_session_complete(r,ps)
rowerstatus[r.id] = status
sessiondict = {
'results':rowerstatus,
@@ -12046,15 +12046,11 @@ def plannedsessions_view(request,timeperiod='thisweek',rowerid=0):
completiondate = {}
for ps in sps:
ratio,status = is_session_complete(r,ps)
ratio,status,cdate = is_session_complete(r,ps)
actualvalue[ps.id] = int(ps.sessionvalue*ratio)
completeness[ps.id] = status
ws = Workout.objects.filter(user=r,plannedsession=ps)
if len(ws):
date = min([w.date for w in ws])
completiondate[ps.id] = date
else:
completiondate[ps.id] = ''
completiondate[ps.id] = cdate
unmatchedworkouts = Workout.objects.filter(
user=r,
@@ -12361,7 +12357,7 @@ def plannedsession_view(request,id=0,rowerid=0,
ws = get_workouts_session(r,ps)
ratio,status = is_session_complete(r,ps)
ratio,status,completiondate = is_session_complete(r,ps)
ratio = int(100.*ratio)
@@ -12391,7 +12387,7 @@ def plannedsession_view(request,id=0,rowerid=0,
'psdict': psdict,
'attrs':[
'name','startdate','enddate','sessiontype',
'sessionmode',
'sessionmode','criterium',
'sessionvalue','sessionunit'
],
'workouts': ws,