diff --git a/rowers/forms.py b/rowers/forms.py index 8ebd1804..f54c97b0 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -316,6 +316,9 @@ class MetricsForm(forms.Form): class CNsummaryForm(forms.Form): file = forms.FileField(required=True, validators=[must_be_csv]) +class NextWeekJsonForm(forms.Form): + file = forms.FileField(required=True) + # The little window to type '4x2000m/500m' to update the workout summary diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 7df99eda..28da7b70 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -18,7 +18,7 @@ import rowers.dataprep as dataprep import numpy as np import rowers.metrics as metrics import rowers.mytypes as mytypes -from rowers.utils import to_pace +from rowers.utils import to_pace, intensitymap from rowers.opaque import encoder from rowingdata import rower as rrower from rowingdata import rowingdata as rrdata @@ -1067,6 +1067,63 @@ def get_workouts_session(r, ps): return ws +def correct_intensity(workout): + # reads the steps and if the intensity is an integer, converts it to a string + steps = workout['steps'] + for step in steps: + if 'intensity' in step: + if isinstance(step['intensity'], int): + step['intensity'] = intensitymap[step['intensity']] + + return workout + + +def create_next_week_from_json(plansteps, rower, planbyrscore=False, plan=None,): + trainingdays = plansteps['cycles'] + # start date is the first day of the following week + today = timezone.now() + startdate = today - timezone.timedelta(days=today.weekday())+timezone.timedelta(days=7) + ndays = 0 + for day in trainingdays: + try: + workouts = day[0][1:] + except IndexError: + workouts =[] + for workout in workouts: + sessionsport = 'water' + try: + sessionsport = mytypes.fitmappinginv[workout['sport'].lower()] + except KeyError: + pass + + preferreddate = startdate+timedelta(days=ndays) + sessionmode = 'time' + if planbyrscore: + sessionmode = 'rScore' + + ps = PlannedSession( + startdate=preferreddate - timedelta(days=preferreddate.weekday()), + enddate=preferreddate + timedelta(days=-preferreddate.weekday()-1, weeks=1), + preferreddate=preferreddate, + sessionsport=sessionsport, # change this + name=workout['workoutName'], + steps=correct_intensity(workout), + manager=rower.user, + sessionmode=sessionmode, + comment=workout['description'], + from_plan=plan, + ) + ps.save() + add_rower_session(rower, ps) + if ps.fitfile: + ps.steps = {} + ps.save() + ndays += 1 + + return + + + def create_sessions_from_json(plansteps, rower, startdate, manager, planbyrscore=False, plan=None, plan_past_days=False, asynchronous=True, queue=queue): @@ -1094,7 +1151,7 @@ def create_sessions_from_json(plansteps, rower, startdate, manager, planbyrscore preferreddate=preferreddate, sessionsport=sessionsport, # change this name=workout['workoutName'], - steps=workout, + steps=correct_intensity(workout), manager=manager, sessionmode=sessionmode, comment=workout['description'], diff --git a/rowers/templates/loadnextweek.html b/rowers/templates/loadnextweek.html new file mode 100644 index 00000000..b7eb16bb --- /dev/null +++ b/rowers/templates/loadnextweek.html @@ -0,0 +1,24 @@ +{% extends "newbase.html" %} +{% load static %} +{% load rowerfilters %} + +{% block title %}Planned Sessions{% endblock %} + +{% block main %} + +