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 %} + + + + + + + + + + {% for target in targets %} + + + + + + {% endfor %} + +
Target DateNameNotes
{{ target.date }} {{ target.name }} {{ target.notes }}
+ {% else %} + No training targets found + {% endif %} +
+
+
+

Add a target

+ +
+ + {{ targetform.as_table }} +
+ {% csrf_token %} +
+ +
+
+ +
+
+
+ + +
+ +
+

Plans

+ + {% if plans %} + + + + + + + + + + {% for plan in plans %} + + + + + + {% endfor %} + +
Start Date End Date Name
{{ plan.startdate }} {{ plan.enddate }} {{ plan.name }}
+ {% else %} +

No plans found

+ {% endif %} + +
+ + + +
+
+

Add a plan

+ +
+ + {{ form.as_table }} +
+ {% csrf_token %} +
+ +
+
+ +
+
+ + +
+ {% 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, + }) +