diff --git a/rowers/forms.py b/rowers/forms.py index f54c97b0..53ecf07c 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -317,7 +317,8 @@ class CNsummaryForm(forms.Form): file = forms.FileField(required=True, validators=[must_be_csv]) class NextWeekJsonForm(forms.Form): - file = forms.FileField(required=True) + fitness = forms.IntegerField(required=False, label='Fitness', initial=0) + fatigue = forms.IntegerField(required=False, label='Fatigue', initial=0) # The little window to type '4x2000m/500m' to update the workout summary diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 48bfe281..2bef406d 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -1089,11 +1089,11 @@ def correct_intensity(workout): return workout -def create_next_week_from_json(plansteps, rower, planbyrscore=False, plan=None,): +def create_next_week_from_json(plansteps, rower, planbyrscore=False, plan=None, + startdate=timezone.now()-timezone.timedelta(days=timezone.now().weekday())+timezone.timedelta(days=7)): 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: diff --git a/rowers/urls.py b/rowers/urls.py index 05d38608..65db0431 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -1111,5 +1111,7 @@ urlpatterns = [ name="braintree_webhook_view"), re_path(r'^nextweekplan/$', views.nextweekplan_view, name='nextweekplan_view'), + re_path(r'^currentweekplan/$', views.currentweekplan_view, + name='currentweekplan_view'), ] diff --git a/rowers/utils.py b/rowers/utils.py index 743df665..f6aa06bd 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -1381,26 +1381,25 @@ def step_to_string(step, short=False): if isinstance(intensity, int): intensity = intensitymap[intensity] - - if short and intensity.lower() in ['warmup', 'cooldown', 'rest']: - s = '{intensity} {duration} {unit} {target} {repeat}'.format( - intensity=intensity, - duration=duration, - target=target, - repeat=repeat, - unit=unit - ) - elif intensity.lower() in ['warmup', 'cooldown', 'rest']: - s = '{intensity} {duration} {unit} {target} {repeat} {notes}'.format( - intensity=intensity, - duration=duration, - target=target, - repeat=repeat, - unit=unit, - notes=notes, - ) - - if stype == 'RepeatStep': + if stype != 'RepeatStep': + if short and intensity.lower() in ['warmup', 'cooldown', 'rest']: + s = '{intensity} {duration} {unit} {target} {repeat}'.format( + intensity=intensity, + duration=duration, + target=target, + repeat=repeat, + unit=unit + ) + elif intensity.lower() in ['warmup', 'cooldown', 'rest']: + s = '{intensity} {duration} {unit} {target} {repeat} {notes}'.format( + intensity=intensity, + duration=duration, + target=target, + repeat=repeat, + unit=unit, + notes=notes, + ) + else: s = 'Repeat {duration}'.format(duration=duration) return s, stype, nr, repeatID, repeatValue diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 09048997..90c7c353 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -4211,30 +4211,67 @@ def planmacrocyclebymonth(request, id=0, userid=0): # pragma: no cover return HttpResponseRedirect(url) +@user_passes_test(can_plan, login_url="/rowers/paidplans", + message="This functionality requires a Pro plan", + redirect_field_name=None) +def currentweekplan_view(request): + r = getrower(request.user) + + post_data = { + 'secret': 'noot', # to be replaced + 'plan': 'zwolsche', # to be replaced + } + + url = "http://localhost:8898/current-week-plan/" + response = requests.post(url, data=post_data) + + data = response.json() + + create_next_week_from_json(data, r, startdate=timezone.now()-timezone.timedelta(days=timezone.now().weekday())) + messages.info(request,"Your planned sessions were created") + + url = reverse("plannedsessions_view") + + return HttpResponseRedirect(url) + @user_passes_test(can_plan, login_url="/rowers/paidplans", message="This functionality requires a Pro plan", redirect_field_name=None) def nextweekplan_view(request): r = getrower(request.user) - form = NextWeekJsonForm() + fitness, fatigue = calculate_fitness(r) + + + form = NextWeekJsonForm( + initial={ + 'fitness': round(fitness), + 'fatigue': round(fatigue), + } + ) if request.method == "POST": - form = NextWeekJsonForm(request.POST, request.FILES) + form = NextWeekJsonForm(request.POST) if form.is_valid(): - f = form.cleaned_data['file'] - if f is not None: - filename, path_and_filename = handle_uploaded_file(f) - try: - with open(path_and_filename,'r') as ff: - data = json.load(ff) - except: - messages.error(request,"Hmm, invalid file") + fitness = form.cleaned_data['fitness'] + fatigue = form.cleaned_data['fatigue'] + + post_data = { + 'fitness':fitness, + 'fatigue':fatigue, + 'plan':'zwolsche', # to be replaced + 'secret':'noot', # to be replaced + } + + # post form.cleaned_data to localhost:8898/next-week-plan + url = "http://localhost:8898/next-week-plan/" + response = requests.post(url, data=post_data) + + data = response.json() + + create_next_week_from_json(data, r) + messages.info(request,"Your planned sessions were created") - create_next_week_from_json(data, r) - messages.info(request,"Your planned sessions were created") - # remove path_and_filename - os.remove(path_and_filename) active = 'nav-plan' diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 0b9e0aa9..53e9fb13 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -13,6 +13,7 @@ from rowers.utils import ( my_dict_from_instance, wavg, NoTokenError, request_is_ajax, dologging ) +from rowers.fitness import calculate_fitness from rowers.celery import result as celery_result from rowers.interactiveplots import * from scipy.interpolate import griddata