diff --git a/rowers/fitness.py b/rowers/fitness.py index bcced876..2d2986cc 100644 --- a/rowers/fitness.py +++ b/rowers/fitness.py @@ -17,9 +17,9 @@ def weightfromrecord(row,metricchoice): return 0 # pragma: no cover -def getfatigues(df, fatigues, fitnesses, dates, impulses, startdate, kfatigue, kfitness): - fatigue = 0 - fitness = 0 +def getfatigues(df, fatigues, fitnesses, dates, impulses, startdate, kfatigue, kfitness,actualfitness=0, actualfatigue=0): + fatigue = actualfatigue + fitness = actualfitness impulses = [] for f in fatigues: @@ -57,13 +57,28 @@ def getfatigues(df, fatigues, fitnesses, dates, impulses, startdate, kfatigue, k return fatigues, fitnesses, dates, impulses -def calculate_fitness(rower): - workouts = Workout.objects.filter(user=rower, date__gte=datetime.date.today() - datetime.timedelta(days=90), - duplicate=False).order_by('date') +def calculate_fitness(rower, reset=False): + try: + w_last = Workout.objects.get(id=rower.last_workout) + datetime_last = w_last.startdatetime + except Workout.DoesNotExist: + w_last = None + datetime_last = datetime.datetime.now() - datetime.timedelta(days=90) + + if reset: + rower.last_workout = 0 + rower.actualfit = 0 + rower.actualfatigue = 0 + rower.save() + datetime_last = datetime.datetime.now() - datetime.timedelta(days=90) + + workouts = Workout.objects.filter(user=rower, startdatetime__gt=datetime_last, + duplicate=False).order_by('date').exclude(id=rower.last_workout) kfitness = rower.kfit kfatigue = rower.kfatigue - + actualfitness = rower.actualfit + actualfatigue = rower.actualfatigue records = [] @@ -81,13 +96,15 @@ def calculate_fitness(rower): df = pl.from_records(records) if df.is_empty(): - return 0, 0 + return actualfitness, actualfatigue dates = [arrow.get(w.date).datetime for w in workouts] impulses = [np.nan for w in workouts] fitnesses = [np.nan for w in workouts] fatigues = [np.nan for w in workouts] + + fatigues, fitnesses, dates, impulses = getfatigues( df, fatigues, @@ -95,7 +112,9 @@ def calculate_fitness(rower): dates, impulses, datetime.date.today()-datetime.timedelta(days=90), - kfatigue, kfitness + kfatigue, kfitness, + actualfitness=actualfitness, + actualfatigue=actualfatigue, ) df = pl.DataFrame({ @@ -105,8 +124,15 @@ def calculate_fitness(rower): 'impulse': impulses, }) - endfitness = fitnesses[-2] - endfatigue = fatigues[-2] + endfitness = fitnesses[-1] + endfatigue = fatigues[-1] + + if workouts: + enddate = workouts.last().date + rower.last_workout = workouts.last().id + rower.actualfit = int(endfitness) + rower.actualfatigue = int(endfatigue) + rower.save() return endfitness, endfatigue diff --git a/rowers/models.py b/rowers/models.py index 43665c5b..bd6c833e 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1129,6 +1129,10 @@ class Rower(models.Model): showfit = models.BooleanField(default=False) showfresh = models.BooleanField(default=False) + actualfit = models.IntegerField(default=0, verbose_name='Actual Fitness') + actualfatigue = models.IntegerField(default=0, verbose_name='Actual Fatigue') + last_workout = models.BigIntegerField(default=0, verbose_name='Last Workout ID') + pw_ut2 = models.IntegerField(default=124, verbose_name="UT2 Power") pw_ut1 = models.IntegerField(default=171, verbose_name="UT1 Power") pw_at = models.IntegerField(default=203, verbose_name="AT Power") diff --git a/rowers/templates/loadcurrentweek.html b/rowers/templates/loadcurrentweek.html new file mode 100644 index 00000000..62e78d5d --- /dev/null +++ b/rowers/templates/loadcurrentweek.html @@ -0,0 +1,24 @@ +{% extends "newbase.html" %} +{% load static %} +{% load rowerfilters %} + +{% block title %}Planned Sessions{% endblock %} + +{% block main %} + +