From 08d892154e2b5aba8dfe4ae9787463317659a358 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 29 May 2025 13:42:04 +0200 Subject: [PATCH] sort of working, good enough for now --- rowers/forms.py | 11 ---------- rowers/models.py | 43 ++++++++++++++++++++++++++++++++++++++ rowers/views/planviews.py | 26 +++++++++-------------- rowers/views/statements.py | 3 ++- 4 files changed, 55 insertions(+), 28 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index 45a545bb..0ce79b0c 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -316,17 +316,6 @@ 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/models.py b/rowers/models.py index bd6c833e..611574d4 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1179,6 +1179,8 @@ class Rower(models.Model): workoutnametemplate = WorkoutNameTemplateField(default=['date','name','distance','ownerfirst','ownerlast','duration','boattype','workouttype']) # Access tokens + training_plan_code = models.CharField(default='', max_length=200, blank=True, null=True) + training_plan_secret = models.CharField(default='', max_length=200, blank=True, null=True) c2token = models.CharField( default='', max_length=200, blank=True, null=True) tokenexpirydate = models.DateTimeField(blank=True, null=True) @@ -5209,6 +5211,47 @@ class RowerBillingAddressForm(ModelForm): super(RowerBillingAddressForm, self).__init__(*args, **kwargs) self.fields['country'].required = True +class NextWeekPlanForm(ModelForm): + # add some extra fields save_credentials and delete_existing to the form + delete_existing = forms.BooleanField(required=False, initial=False, label="Remove any existing sessions") + save_credentials = forms.BooleanField(required=False, initial=False, label="Save credentials for next time") + + class Meta: + model = Rower + fields = ['training_plan_code', + 'training_plan_secret', + 'actualfit', + 'actualfatigue'] + + def __init__(self, *args, **kwargs): + super(NextWeekPlanForm, self).__init__(*args, **kwargs) + + def clean(self): + cleaned_data = super(NextWeekPlanForm, self).clean() + plan = cleaned_data.get('training_plan_code') + secret = cleaned_data.get('training_plan_secret') + save_credentials = cleaned_data.get('save_credentials') + fitness = cleaned_data.get('actualfit') + fatigue = cleaned_data.get('actualfatigue') + + if not fitness or not fatigue: + raise forms.ValidationError("You need to fill in fitness and fatigue") + + r = self.instance + r.actualfit = fitness + r.actualfatigue = fatigue + w = Workout.objects.filter(user=r).order_by('-date').exclude(duplicate=True) + r.last_workout = w.last().id + r.save() + + if not plan or not secret: + raise forms.ValidationError("Plan Code and Secret are required") + if save_credentials: + r.training_plan_code = plan + r.training_plan_secret = secret + r.save() + + return cleaned_data # Form to set rower's Email and Weight category class AccountRowerForm(ModelForm): diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index e057cd29..12941d77 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -4217,13 +4217,13 @@ def planmacrocyclebymonth(request, id=0, userid=0): # pragma: no cover def currentweekplan_view(request): r = getrower(request.user) - form = CurrentWeekJsonForm() + form = NextWeekPlanForm(instance=r) if request.method == "POST": - form = CurrentWeekJsonForm(request.POST) + form = NextWeekPlanForm(request.POST, instance=r) if form.is_valid(): - secret = form.cleaned_data['secret'] - plan = form.cleaned_data['plan'] + secret = form.cleaned_data['training_plan_secret'] + plan = form.cleaned_data['training_plan_code'] delete_existing = form.cleaned_data['delete_existing'] post_data = { @@ -4277,21 +4277,15 @@ def nextweekplan_view(request): fitness, fatigue = calculate_fitness(r) - - form = NextWeekJsonForm( - initial={ - 'fitness': round(fitness), - 'fatigue': round(fatigue), - } - ) + form = NextWeekPlanForm(instance=r) if request.method == "POST": - form = NextWeekJsonForm(request.POST) + form = NextWeekPlanForm(request.POST, instance=r) if form.is_valid(): - fitness = form.cleaned_data['fitness'] - fatigue = form.cleaned_data['fatigue'] - secret = form.cleaned_data['secret'] - plan = form.cleaned_data['plan'] + fitness = form.cleaned_data['actualfit'] + fatigue = form.cleaned_data['actualfatigue'] + secret = form.cleaned_data['training_plan_secret'] + plan = form.cleaned_data['training_plan_code'] delete_existing = form.cleaned_data['delete_existing'] post_data = { diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 7667dae2..2f40eb67 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, CurrentWeekJsonForm, + AssignChoices, ) from django.urls import reverse, reverse_lazy @@ -188,6 +188,7 @@ from rowers.models import ( RowerPowerForm, RowerHRZonesForm, SimpleRowerPowerFo RowerExportFormConcept2, RowerExportFormGarmin, RowerExportFormIntervals, RowerExportFormRP3, RowerExportFormNK, RowerPrivateImportForm, + NextWeekPlanForm, ) from rowers.models import ( FavoriteForm, BaseFavoriteFormSet, SiteAnnouncement, BasePlannedSessionFormSet,