diff --git a/rowers/forms.py b/rowers/forms.py
index 8606abe2..639631a4 100644
--- a/rowers/forms.py
+++ b/rowers/forms.py
@@ -58,6 +58,40 @@ class FlexibleDecimalField(forms.DecimalField):
value = value.replace('.', '').replace(',', '.')
return super(FlexibleDecimalField, self).to_python(value)
+class InstantPlanSelectForm(forms.Form):
+ datechoices = (
+ ('start date','startdate'),
+ ('end date', 'enddate'),
+ ('target','target')
+ )
+ name = forms.CharField(max_length=255,label='Plan Name',required=False)
+ startdate = forms.DateField(
+ initial=timezone.now()-datetime.timedelta(days=15),
+ # widget=SelectDateWidget(years=range(1990,2050)),
+ widget=AdminDateWidget(), #format='%Y-%m-%d'),
+ label='Start Date')
+ enddate = forms.DateField(
+ initial=timezone.now(),
+ widget=AdminDateWidget(), #format='%Y-%m-%d'),
+ label='End Date')
+ target = forms.ChoiceField(required=False)
+ datechoice = forms.ChoiceField(choices=datechoices,initial='enddate',label='Plan by target, start or end date')
+ notes = forms.CharField(required=False,
+ max_length=200,label='Course Notes',
+ widget=forms.Textarea)
+
+ def __init__(self, *args, **kwargs):
+ targets = kwargs.pop('targets',None)
+ super(InstantPlanSelectForm, self).__init__(*args, **kwargs)
+ if targets:
+ targetchoices = [(x.id,x) for x in targets]
+ targetchoices.append((None,'---'))
+ self.fields['target'].choices = targetchoices
+ else:
+ self.fields.pop('target')
+
+
+
# Video Analysis creation form
class VideoAnalysisCreateForm(forms.Form):
name = forms.CharField(max_length=255,label='Analysis Name',required=False)
diff --git a/rowers/templates/instantplan.html b/rowers/templates/instantplan.html
index 1f4a07e4..af8f4498 100644
--- a/rowers/templates/instantplan.html
+++ b/rowers/templates/instantplan.html
@@ -33,6 +33,7 @@
Price: {{ plan.price }}€
{% endif %}
+ {% if form %}
When you submit this form, a training plan will be created based on {{ plan.name }}, ending at your target date,
@@ -58,6 +59,13 @@
{% endif %}
+ {% else %}
+
+
+ Log in to install this plan to your training calendar.
+
+
+ {% endif %}
Plan Details
diff --git a/rowers/views/paymentviews.py b/rowers/views/paymentviews.py
index d5640c89..47c3e22b 100644
--- a/rowers/views/paymentviews.py
+++ b/rowers/views/paymentviews.py
@@ -109,7 +109,7 @@ def buy_trainingplan_view(request,id=0):
if request.method == 'POST':
billingaddressform = RowerBillingAddressForm(instance=r)
- form = TrainingPlanForm(request.POST,user=request.user)
+ form = InstantPlanSelectForm(request.POST)
if billingaddressform.is_valid():
cd = billingaddressform.cleaned_data
for attr, value in cd.items():
@@ -121,8 +121,10 @@ def buy_trainingplan_view(request,id=0):
cd = form.cleaned_data
enddate = cd['enddate']
+ startdate = cd['startdate']
notes = cd['notes']
- status = cd['status']
+ datechoice = form.cleaned_data['datechoice']
+ status = True
# get target and set enddate
try:
@@ -138,8 +140,12 @@ def buy_trainingplan_view(request,id=0):
except KeyError:
target = None
- if target:
+ if target and datechoice == 'target':
enddate = target.date
+ elif datechoice == 'startdate':
+ enddate = startdate+datetime.timedelta(days=plan.duration)
+ else:
+ startdate = enddate-datetime.timedelta(days=plan.duration)
pars = {
'name':cd['name'],
@@ -154,7 +160,7 @@ def buy_trainingplan_view(request,id=0):
return HttpResponseRedirect(url)
else:
- form = TrainingPlanForm(user=request.user)
+ form = InstantPlanForm()
billingaddressform = RowerBillingAddressForm(instance=r)
return render(request,
@@ -243,9 +249,12 @@ def purchase_checkouts_view(request):
url = reverse("purchase_checkouts_view")
return HttpResponseRedirect(url)
- url = reverse('rower_view_instantplan',kwargs={
- 'id':plan.uuid,
- })
+ url = reverse('rower_select_instantplan')
+ if 'plan' in request.POST:
+ plan = plan = InstantPlan.objects.get(id=request.POST['plan'])
+ url = reverse('rower_view_instantplan',kwargs={
+ 'id':plan.uuid,
+ })
return HttpResponseRedirect(url)
@user_passes_test(can_plan,login_url="/rowers/paidplans",
diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py
index 633d9d0e..7cba202d 100644
--- a/rowers/views/planviews.py
+++ b/rowers/views/planviews.py
@@ -2517,14 +2517,15 @@ def rower_view_instantplan(request,id='',userid=0):
date__gte=datetime.date.today(),
).order_by("-date")
- if request.method == 'POST':
+ if request.method == 'POST' and not request.user.is_anonymous:
if not can_plan(request.user):
messages.error(request,'You must be on a paid plan to use this functionality')
url = reverse('rower_view_instantplan',kwargs={
'id':id,
})
return HttpResponseRedirect(url)
- form = TrainingPlanForm(request.POST,user=request.user)
+ form = InstantPlanSelectForm(request.POST)
+
if form.is_valid():
plansteps = response.json()
@@ -2541,17 +2542,17 @@ def rower_view_instantplan(request,id='',userid=0):
except KeyError:
target = None
enddate = form.cleaned_data['enddate']
+ startdate = form.cleaned_data['startdate']
notes = form.cleaned_data['notes']
- status = form.cleaned_data['status']
- if target:
+ datechoice = form.cleaned_data['datechoice']
+ status = True
+ if target and datechoice == 'target':
enddate = target.date
+ elif datechoice == 'startdate':
+ enddate = startdate+datetime.timedelta(days=plan.duration)
+ else:
+ startdate = enddate-datetime.timedelta(days=plan.duration)
- startdate = enddate-datetime.timedelta(days=plan.duration+1)
-
- try:
- athletes = form.cleaned_data['rowers']
- except KeyError:
- athletes = [r]
p = TrainingPlan(
name=name,
@@ -2563,10 +2564,7 @@ def rower_view_instantplan(request,id='',userid=0):
)
p.save()
-
- for athlete in athletes:
- if can_plan_user(request.user,athlete):
- p.rowers.add(athlete)
+ p.rowers.add(r)
create_sessions_from_json(plansteps,athletes,startdate,r.user)
@@ -2577,9 +2575,10 @@ def rower_view_instantplan(request,id='',userid=0):
return HttpResponseRedirect(url)
+ elif not request.user.is_anonymous:
+ form = InstantPlanSelectForm(targets=targets)
else:
- form = TrainingPlanForm(targets=targets,initial={'status':True,'rowers':[r]},
- user=request.user)
+ form = None
breadcrumbs = [
{
diff --git a/rowers/views/statements.py b/rowers/views/statements.py
index 28430fae..e2dd74d9 100644
--- a/rowers/views/statements.py
+++ b/rowers/views/statements.py
@@ -77,7 +77,7 @@ from rowers.forms import (
VideoAnalysisCreateForm,WorkoutSingleSelectForm,
VideoAnalysisMetricsForm,SurveyForm,HistorySelectForm,
StravaChartForm,FitnessFitForm,PerformanceManagerForm,
- TrainingPlanBillingForm,
+ TrainingPlanBillingForm,InstantPlanSelectForm
)
from django.urls import reverse, reverse_lazy