Private
Public Access
1
0

first version actual/executed chart for plan

This commit is contained in:
Sander Roosendaal
2019-10-05 14:35:06 +02:00
parent 65db7ee6d8
commit c12a2c8fe3
6 changed files with 299 additions and 97 deletions

View File

@@ -22,11 +22,14 @@ queue = django_rq.get_queue('default')
queuelow = django_rq.get_queue('low')
queuehigh = django_rq.get_queue('low')
import pandas as pd
from rowers.models import (
Rower, Workout,Team,
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
TrainingPlan,PlannedSession,VirtualRaceResult,CourseTestResult,
get_course_timezone, IndoorVirtualRaceResult,VirtualRace
get_course_timezone, IndoorVirtualRaceResult,VirtualRace,createmacrofillers,
createmesofillers,createmicrofillers,
)
from rowers.courses import get_time_course
@@ -47,6 +50,170 @@ from rowers.tasks import (
)
from rowers.utils import totaltime_sec_to_string
def checkscores(r,macrocycles):
for m in macrocycles:
createmesofillers(m)
m.plantime = 0
m.actualtime = 0
m.plandistance = 0
m.actualdistance = 0
m.planrscore = 0
m.actualrscore = 0
m.plantrimp = 0
m.actualtrimp = 0
mesocycles = TrainingMesoCycle.objects.filter(
plan=m,
type='userdefined').order_by("startdate")
for me in mesocycles:
me.plantime = 0
me.actualtime = 0
me.plandistance = 0
me.actualdistance = 0
me.planrscore = 0
me.actualrscore = 0
me.plantrimp = 0
me.actualtrimp = 0
microcycles = TrainingMicroCycle.objects.filter(
plan=me,
type='userdefined').order_by("startdate")
for mm in microcycles:
sps = get_sessions(r,startdate=mm.startdate,enddate=mm.enddate)
# sps = PlannedSession.objects.filter(
# rower = r,
# startdate__lte=mm.enddate,
# enddate__gte=mm.startdate)
mm.plantime = 0
mm.actualtime = 0
mm.plandistance = 0
mm.actualdistance = 0
mm.planrscore = 0
mm.actualrscore = 0
mm.plantrimp = 0
mm.actualtrimp = 0
if mm.type == 'userdefined':
for ps in sps:
ratio, status, cdate = is_session_complete(r,ps)
if ps.sessionmode == 'time':
mm.plantime += ps.sessionvalue
mm.actualtime += int(ps.sessionvalue*ratio)
elif ps.sessionmode == 'distance' and ps.sessiontype != 'race':
mm.plandistance += ps.sessionvalue
mm.actualdistance += int(ps.sessionvalue*ratio)
elif ps.sessionmode == 'rScore':
mm.planrscore += ps.sessionvalue
mm.actualrscore += int(ps.sessionvalue*ratio)
elif ps.sessionmode == 'TRIMP':
mm.plantrimp += ps.sessionvalue
mm.actualtrimp += int(ps.sessionvalue*ratio)
mm.save()
me.plantime += mm.plantime
me.actualtime += mm.actualtime
me.plandistance += mm.plandistance
me.actualdistance += mm.actualdistance
me.planrscore += mm.planrscore
me.actualrscore += mm.actualrscore
me.plantrimp += mm.plantrimp
me.actualtrimp += mm.actualtrimp
if me.type == 'userdefined':
me.save()
m.plantime += me.plantime
m.actualtime += me.actualtime
m.plandistance += me.plandistance
m.actualdistance += me.actualdistance
m.planrscore += me.planrscore
m.actualrscore += me.actualrscore
m.plantrimp += me.plantrimp
m.actualtrimp += me.actualtrimp
if m.type == 'userdefined':
m.save()
def get_execution_report(rower,startdate,enddate,plan=None):
if plan:
macros = TrainingMacroCycle.objects.filter(plan=plan).order_by("startdate")
checkscores(rower,macros)
mesos = TrainingMesoCycle.objects.filter(plan__in=macros).order_by("startdate")
micros = TrainingMicroCycle.objects.filter(plan__in=mesos).order_by("startdate")
else:
plans = TrainingPlan.objects.filter(startdate__lte=startdate,enddate__gte=startdate)
plans2 = TrainingPlan.objects.filter(enddate__lte=enddate,startdate__lte=enddate)
plans = plans | plans2
plans = plans.exclude(status=False).order_by("-enddate")
if not plans:
# make week cycles here
return(0,'no plan found')
else:
plan = plans[0]
macros = TrainingMacroCycle.objects.filter(plan=plan).order_by("startdate")
checkscores(rower,macros)
mesos = TrainingMesoCycle.objects.filter(plan__in=macros).order_by("startdate")
micros = TrainingMicroCycle.objects.filter(plan__in=mesos).order_by("startdate")
# we've got micros, now get sessions
startdates = []
planned = []
executed = []
for mm in micros:
plannedscore = 0
actualscore = 0
sps = get_sessions(rower,startdate=mm.startdate,enddate=mm.enddate)
for ps in sps:
if ps.sessionmode == 'rscore':
plannedscore += ps.planrscore
actualscore += ps.actualrscore
else:
ratio, status, cdate = is_session_complete(rower,ps)
ws = Workout.objects.filter(user=rower,plannedsession=ps)
for w in ws:
if w.rscore != 0:
plannedscore += w.rscore/ratio
actualscore += w.rscore
elif w.hrtss != 0:
plannedscore += w.hrtss/ratio
actualscore += w.hrtss
else:
minutes = w.duration.hour*60+w.duration.minute
plannedscore += minutes/ratio
actualscore += minutes
actualscore = int(actualscore)
plannedscore = int(plannedscore)
startdates += [mm.startdate]
planned += [plannedscore]
executed += [actualscore]
data = pd.DataFrame({
'startdate':startdates,
'planned':planned,
'executed':executed,
})
return(data,'ok')
def get_indoorraces(workout):
races1 = VirtualRace.objects.filter(
sessiontype='indoorrace',