diff --git a/rowers/models.py b/rowers/models.py
index 4e877fd3..38151ee3 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -935,17 +935,31 @@ class TrainingTarget(models.Model):
default=half_year_from_now)
notes = models.TextField(max_length=300,blank=True)
+ def __unicode__(self):
+ date = self.date
+ name = self.name
+ ownerfirst = self.rower.user.first_name
+ ownerlast = self.rower.user.last_name
+
+ stri = u'{ownerfirst} {ownerlast} {d} {n}'.format(
+ ownerfirst = ownerfirst,
+ ownerlast = ownerlast,
+ d = date.strftime('%Y-%m-%d'),
+ n = name
+ )
+
+ return stri
+
class TrainingTargetForm(ModelForm):
class Meta:
model = TrainingTarget
fields = ['name','date','notes']
widgets = {
- 'date': SelectDateWidget(
- years=range(
- timezone.now().year-1,timezone.now().year+1)),
+ 'date': AdminDateWidget()
}
+
# SportTracks has a TrainingGoal like this
#class TrainingGoal(models.Model):
# rower = models.ForeignKey(Rower)
@@ -976,14 +990,19 @@ class TrainingPlanForm(ModelForm):
fields = ['name','target','startdate','enddate']
widgets = {
- 'startdate': SelectDateWidget(
- years=range(
- timezone.now().year-1,timezone.now().year+1)),
- 'enddate': SelectDateWidget(
- years=range(
- timezone.now().year-1,timezone.now().year+1)),
+ 'startdate': AdminDateWidget(),
+ 'enddate': AdminDateWidget()
}
+ def __init__(self,*args, **kwargs):
+ targets = kwargs.pop('targets',None)
+ super(TrainingPlanForm, self).__init__(*args, **kwargs)
+
+ if targets:
+ targetchoices = [(x.id,x) for x in targets]
+ targetchoices.append((None,'---'))
+ self.fields['target'].choices = targetchoices
+
cycletypechoices = (
('filler','System Defined'),
diff --git a/rowers/templates/trainingplan_create.html b/rowers/templates/trainingplan_create.html
new file mode 100644
index 00000000..1a4f2c29
--- /dev/null
+++ b/rowers/templates/trainingplan_create.html
@@ -0,0 +1,117 @@
+{% extends "base.html" %}
+{% load staticfiles %}
+{% load rowerfilters %}
+
+{% block title %}Rowsandall Training Plans{% endblock %}
+
+{% block scripts %}
+
+{% endblock %}
+
+{% block content %}
+
+
+
+
+
Training Targets
+
+ {% if targets %}
+
+
+
+ | Target Date |
+ Name |
+ Notes |
+
+
+
+ {% for target in targets %}
+
+ | {{ target.date }} |
+ {{ target.name }} |
+ {{ target.notes }} |
+
+ {% endfor %}
+
+
+ {% else %}
+ No training targets found
+ {% endif %}
+
+
+
+
+
+
+
+
+
Plans
+
+ {% if plans %}
+
+
+
+ | Start Date |
+ End Date |
+ Name |
+
+
+
+ {% for plan in plans %}
+
+ | {{ plan.startdate }} |
+ {{ plan.enddate }} |
+ {{ plan.name }} |
+
+ {% endfor %}
+
+
+ {% else %}
+
No plans found
+ {% endif %}
+
+
+
+
+
+
+
+
+
+ {% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index a423bb70..5e0b41e0 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -419,6 +419,8 @@ urlpatterns = [
url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P[\w\ ]+.*)/(?P[\w\ ]+.*)$',views.workout_comparison_view2),
url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P[\w\ ]+.*)/$',views.workout_comparison_view2),
url(r'^test\_callback',views.rower_process_testcallback),
+ url(r'^createplan$',views.rower_create_trainingplan),
+ url(r'^createplan/(?P\d+)$',views.rower_create_trainingplan),
url(r'^workout/(?P\d+)/test\_strokedata$',views.strokedataform),
url(r'^sessions/teamcreate$',views.plannedsession_teamcreate_view),
diff --git a/rowers/views.py b/rowers/views.py
index 09f32763..9a1bc520 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -64,7 +64,10 @@ from rowers.forms import (
)
from rowers.models import (
Workout, User, Rower, WorkoutForm,FavoriteChart,
- PlannedSession, DeactivateUserForm,DeleteUserForm
+ PlannedSession, DeactivateUserForm,DeleteUserForm,
+ TrainingPlan,TrainingPlanForm,TrainingTarget,TrainingTargetForm,
+ TrainingMacroCycle,TrainingMesoCycle,TrainingMicroCycle,
+ TrainingTarget,TrainingTargetForm,
)
from rowers.models import (
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
@@ -14167,5 +14170,61 @@ def virtualevent_submit_result_view(request,id=0):
'w_form':w_form,
})
+@user_passes_test(hasplannedsessions,login_url="/", redirect_field_name=None)
+def rower_create_trainingplan(request,id=0):
+
+ therower = getrequestrower(request,userid=id)
+ theuser = therower.user
+
+
+ if request.method == 'POST' and 'date' in request.POST:
+ targetform = TrainingTargetForm(request.POST)
+ if targetform.is_valid():
+ name = targetform.cleaned_data['name']
+ date = targetform.cleaned_data['date']
+ notes = targetform.cleaned_data['notes']
+
+ t = TrainingTarget(rower=therower,
+ name=name,
+ date=date,
+ notes=notes)
+
+ t.save()
+
+ elif request.method == 'POST' and 'startdate' in request.POST:
+ form = TrainingPlanForm(request.POST)
+ if form.is_valid():
+ name = form.cleaned_data['name']
+ target = form.cleaned_data['target']
+ startdate = form.cleaned_data['startdate']
+ enddate = form.cleaned_data['enddate']
+
+ p = TrainingPlan(
+ name=name,
+ rower=therower,
+ target=target,
+ startdate=startdate,
+ enddate=enddate,
+ )
+
+ p.save()
+
+
+
+ targets = TrainingTarget.objects.filter(rower=therower).order_by("date")
+ targetform = TrainingTargetForm()
+
+ plans = TrainingPlan.objects.filter(rower=therower).order_by("-startdate")
+ form = TrainingPlanForm(targets=targets)
+
+
+ return render(request,'trainingplan_create.html',
+ {
+ 'form':form,
+ 'plans':plans,
+ 'targets':targets,
+ 'targetform':targetform,
+ })
+