diff --git a/rowers/forms.py b/rowers/forms.py index 53ecf07c..45a545bb 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -316,9 +316,17 @@ class MetricsForm(forms.Form): class CNsummaryForm(forms.Form): file = forms.FileField(required=True, validators=[must_be_csv]) +class CurrentWeekJsonForm(forms.Form): + plan = forms.CharField(required=True, label="Plan Code", initial="zwolsche") + secret = forms.CharField(required=True, label="Plan Secret", initial="noot") + delete_existing = forms.BooleanField(required=False, initial=False, label="Remove any existing sessions") + class NextWeekJsonForm(forms.Form): + plan = forms.CharField(required=True, label="Plan Code", initial="zwolsche") + secret = forms.CharField(required=True, label="Plan Secret", initial="noot") fitness = forms.IntegerField(required=False, label='Fitness', initial=0) fatigue = forms.IntegerField(required=False, label='Fatigue', initial=0) + delete_existing = forms.BooleanField(required=False, initial=False, label="Remove any existing sessions") # The little window to type '4x2000m/500m' to update the workout summary diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 2bef406d..5b0513f9 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -1088,6 +1088,41 @@ def correct_intensity(workout): return workout +def remove_next_week_sessions(rower): + # remove all sessions in the next week + today = timezone.now() + startdate = today - timezone.timedelta(days=today.weekday())+timezone.timedelta(days=7) + enddate = startdate + timezone.timedelta(days=6) + + sps = PlannedSession.objects.filter( + rower__in=[rower], + startdate__gte=startdate, + enddate__lte=enddate, + is_template=False, + ) + + for ps in sps: + ps.delete() + + return 1 + +def remove_this_week_sessions(rower): + # remove all sessions in the current week + today = timezone.now() + startdate = today - timezone.timedelta(days=today.weekday()) + enddate = startdate + timezone.timedelta(days=6) + + sps = PlannedSession.objects.filter( + rower__in=[rower], + startdate__gte=startdate, + enddate__lte=enddate, + is_template=False, + ) + + for ps in sps: + ps.delete() + + return 1 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)): diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 90c7c353..87867b58 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -4217,22 +4217,57 @@ def planmacrocyclebymonth(request, id=0, userid=0): # pragma: no cover def currentweekplan_view(request): r = getrower(request.user) - post_data = { - 'secret': 'noot', # to be replaced - 'plan': 'zwolsche', # to be replaced - } + form = CurrentWeekJsonForm() - url = "http://localhost:8898/current-week-plan/" - response = requests.post(url, data=post_data) + if request.method == "POST": + form = CurrentWeekJsonForm(request.POST) + if form.is_valid(): + secret = form.cleaned_data['secret'] + plan = form.cleaned_data['plan'] + delete_existing = form.cleaned_data['delete_existing'] - data = response.json() + post_data = { + 'secret': secret, + 'plan': plan, + } - 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 = "http://localhost:8898/current-week-plan/" + response = requests.post(url, data=post_data) - url = reverse("plannedsessions_view") + data = response.json() + if response.status_code in [200,201]: + if delete_existing: + remove_this_week_sessions(r) + + 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) + + active = 'nav-plan' + + breadcrumbs = [ + { + 'url': reverse('plannedsessions_view'), + 'name': 'Sessions' + }, + { + 'url': reverse('currentweekplan_view'), + 'name': "Next week" + }, + ] - return HttpResponseRedirect(url) + return render(request, + 'loadnextweek.html', + {'rower': r, + 'form': form, + 'active': active, + 'breadcrumbs': breadcrumbs}) + @user_passes_test(can_plan, login_url="/rowers/paidplans", message="This functionality requires a Pro plan", @@ -4255,12 +4290,15 @@ def nextweekplan_view(request): if form.is_valid(): fitness = form.cleaned_data['fitness'] fatigue = form.cleaned_data['fatigue'] + secret = form.cleaned_data['secret'] + plan = form.cleaned_data['plan'] + delete_existing = form.cleaned_data['delete_existing'] post_data = { 'fitness':fitness, 'fatigue':fatigue, - 'plan':'zwolsche', # to be replaced - 'secret':'noot', # to be replaced + 'plan': plan, + 'secret': secret, } # post form.cleaned_data to localhost:8898/next-week-plan @@ -4269,8 +4307,13 @@ def nextweekplan_view(request): data = response.json() - create_next_week_from_json(data, r) - messages.info(request,"Your planned sessions were created") + if response.status_code in [200,201]: + if delete_existing: + remove_next_week_sessions(r) + create_next_week_from_json(data, r) + messages.info(request,"Your planned sessions were created") + else: + messages.error(request,"Unsuccessful") active = 'nav-plan' diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 53e9fb13..7667dae2 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -121,7 +121,7 @@ from rowers.forms import ( TrainingPlanBillingForm, InstantPlanSelectForm, TrainingZonesForm, InstrokeForm, InStrokeMultipleCompareForm, ForceCurveMultipleCompareForm, PlanByRscoreForm, - AssignChoices, NextWeekJsonForm, + AssignChoices, NextWeekJsonForm, CurrentWeekJsonForm, ) from django.urls import reverse, reverse_lazy