From 24592f81ede1d1abc34089cb01b77f55466b1363 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 12 Apr 2022 09:51:12 +0200 Subject: [PATCH 1/2] better plan actual comparison --- rowers/models.py | 20 +++++++++++++ rowers/plannedsessions.py | 41 ++++++++++++++++----------- rowers/templates/templatelibrary.html | 2 ++ rowers/templates/trainingplan.html | 2 +- rowers/views/planviews.py | 8 +++++- 5 files changed, 54 insertions(+), 19 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index 5823717e..e1996516 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1805,6 +1805,26 @@ class TrainingPlan(models.Model): else: createmacrofillers(self) + def length(self): + startdate = self.startdate + enddate = self.enddate + return (enddate-startdate).days + + def overlap(self,startdate,enddate): + is_overlapped = max(self.startdate, startdate) < min(self.enddate, enddate) + if not is_overlapped: + return 0 + + if startdate >= self.startdate: + if self.enddate >= enddate: + return (enddate-startdate).days + else: + return (self.enddate-startdate).days + elif startdate < self.startdate: + if enddate >= self.enddate: + return (self.enddate-self.startdate).days + else: + return (enddate-self.startdate).days def check_trainingplan_on_change(sender, **kwargs): instance = kwargs.pop('instance', None) diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index af0b9830..9e4f197f 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -202,30 +202,21 @@ def get_execution_report(rower, startdate, enddate, plan=None): micros = micros.exclude(enddate__lte=startdate).exclude( startdate__gte=enddate) else: # pragma: no cover - plans = TrainingPlan.objects.filter( - startdate__lte=startdate, enddate__gte=startdate) - plans2 = TrainingPlan.objects.filter( - enddate__lte=enddate, startdate__lte=enddate) - plans = plans | plans2 + plans = TrainingPlan.objects.filter(rowers__in=[rower]) + #plans2 = TrainingPlan.objects.filter( + # enddate__lte=enddate, startdate__lte=enddate, rowers__in=[rower]) + #plans = plans | plans2 - plans = plans.exclude(status=False).order_by("-enddate") + #plans = plans.exclude(status=False).order_by("-enddate") if not plans: # make week cycles here # get monday before startdate - startdate += timedelta(days=1-startdate.isoweekday()) - startdate = startdate-timedelta(days=7) + micros = [] - while startdate <= enddate: - micro = type('micros', (object,), - { - 'startdate': startdate, - 'enddate': startdate+timedelta(days=7) - }) - micros.append(micro) - startdate += timedelta(days=7) else: - plan = plans[0] + sorted_plans = sorted(plans, key= lambda t: t.overlap(startdate,enddate)) + plan = plans.reverse()[0] macros = TrainingMacroCycle.objects.filter( plan=plan).order_by("startdate") checkscores(rower, macros) @@ -237,12 +228,28 @@ def get_execution_report(rower, startdate, enddate, plan=None): startdate__lte=enddate, ).order_by("startdate") + if len(micros)==0: + startdate += timedelta(days=1-startdate.isoweekday()) + startdate = startdate-timedelta(days=7) + micros = [] + while startdate <= enddate: + micro = type('micros', (object,), + { + 'startdate': startdate, + 'enddate': startdate+timedelta(days=7) + }) + micros.append(micro) + startdate += timedelta(days=7) + + # we've got micros, now get sessions startdates = [] planned = [] executed = [] + for mm in micros: + print(mm) plannedscore = 0 actualscore = 0 sps = get_sessions(rower, startdate=mm.startdate, enddate=mm.enddate) diff --git a/rowers/templates/templatelibrary.html b/rowers/templates/templatelibrary.html index c8c72041..f845ce3e 100644 --- a/rowers/templates/templatelibrary.html +++ b/rowers/templates/templatelibrary.html @@ -39,6 +39,8 @@ Private/Shared Edit Copy to Calendar + Share + Lock Delete diff --git a/rowers/templates/trainingplan.html b/rowers/templates/trainingplan.html index 47716e5c..156cdfbd 100644 --- a/rowers/templates/trainingplan.html +++ b/rowers/templates/trainingplan.html @@ -32,7 +32,7 @@ {% if plan|mayeditplan:request %}

Edit the plan

{% endif %} -

Plan vs Actual chart

+

Plan vs Actual chart

View all sessions diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 0a6221d4..fa5f1ac1 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -1414,6 +1414,13 @@ def save_plan_yaml(request, userid=0): ps.interval_string = '{d}m'.format(d=ps.sessionvalue) elif ps.sessionmode == 'time': ps.interval_string = '{d}min'.format(d=ps.sessionvalue) + elif ps.sessionmode == 'rScore': + print('aap') + ps.approximate_duration = ps.sessionvalue + ps.interval_string = '{d}min'.format(d=ps.sessionvalue) + elif ps.sessionmode == 'TRIMP': + ps.approximate_duration = int(ps.sessionvalue/2.) + ps.interval_string = '{d}min'.format(d=int(ps.sessionvalue/2.)) ps.fitfile = '' ps.steps = None ps.save() @@ -1421,7 +1428,6 @@ def save_plan_yaml(request, userid=0): steps = ps_reload.steps steps['filename'] = "" steps['workoutName'] = ps.name - print(steps) workouts.append(steps) trainingdays.append({'order': i+1, 'workouts': workouts}) From 172f598f69bc2dc8d81bb044b5a0a5518e434612 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 12 Apr 2022 10:01:29 +0200 Subject: [PATCH 2/2] fix --- rowers/plannedsessions.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 9e4f197f..5f1c1a37 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -240,7 +240,7 @@ def get_execution_report(rower, startdate, enddate, plan=None): }) micros.append(micro) startdate += timedelta(days=7) - + # we've got micros, now get sessions startdates = [] @@ -249,7 +249,6 @@ def get_execution_report(rower, startdate, enddate, plan=None): for mm in micros: - print(mm) plannedscore = 0 actualscore = 0 sps = get_sessions(rower, startdate=mm.startdate, enddate=mm.enddate)