diff --git a/rowers/models.py b/rowers/models.py index ad5a7b4c..1d74caf9 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -992,7 +992,7 @@ class TrainingPlan(models.Model): firstname = self.rower.user.first_name lastname = self.rower.user.last_name - stri = u'Training Plan for {first_name} {last_name} {s} - {e}: {n}'.format( + stri = u'Training Plan for {firstname} {lastname} {s} - {e}: {n}'.format( s = startdate.strftime('%Y-%m-%d'), e = enddate.strftime('%Y-%m-%d'), firstname = firstname, @@ -1031,7 +1031,8 @@ class TrainingPlan(models.Model): m.save() - createmacrofillers(self) + else: + createmacrofillers(self) class TrainingPlanForm(ModelForm): class Meta: @@ -1070,10 +1071,20 @@ def createmacrofillers(plan): plan = plan ).order_by("-startdate") + if not cycles: + macr = TrainingMacroCycle( + startdate = plan.startdate, + enddate = plan.enddate, + type='filler', + name='Filler' + ) + macr.save() + thedate = plan.enddate while cycles: if cycles[0].enddate < thedate: macr = TrainingMacroCycle( + plan=plan, startdate = cycles[0].enddate+datetime.timedelta(days=1), enddate = thedate, type='filler', @@ -1095,6 +1106,15 @@ class TrainingMacroCycle(models.Model): choices=cycletypechoices, max_length=150) + def __unicode__(self): + stri = 'Macro Cycle - {n} ({sd} - {ed})'.format( + n = self.name, + sd = self.startdate, + ed = self.enddate, + ) + + return stri + def save(self, *args, **kwargs): if self.enddate < self.startdate: startdate = self.startdate @@ -1132,6 +1152,15 @@ class TrainingMacroCycle(models.Model): meso.save() +class TrainingMacroCycleForm(ModelForm): + class Meta: + model = TrainingMacroCycle + fields = ['name','startdate','enddate'] + + widgets = { + 'startdate': AdminDateWidget(), + 'enddate': AdminDateWidget() + } class TrainingMesoCycle(models.Model): plan = models.ForeignKey(TrainingMacroCycle) @@ -1143,6 +1172,14 @@ class TrainingMesoCycle(models.Model): type = models.CharField(default='filler', choices=cycletypechoices, max_length=150) + def __unicode__(self): + stri = 'Meso Cycle - {n} ({sd} - {ed})'.format( + n = self.name, + sd = self.startdate, + ed = self.enddate, + ) + + return stri class TrainingMicroCycle(models.Model): @@ -1155,6 +1192,14 @@ class TrainingMicroCycle(models.Model): type = models.CharField(default='filler', choices=cycletypechoices, max_length=150) + def __unicode__(self): + stri = 'Micro Cycle - {n} ({sd} - {ed})'.format( + n = self.name, + sd = self.startdate, + ed = self.enddate, + ) + + return stri # Needs some error checking diff --git a/rowers/templates/trainingplan.html b/rowers/templates/trainingplan.html new file mode 100644 index 00000000..8c726804 --- /dev/null +++ b/rowers/templates/trainingplan.html @@ -0,0 +1,60 @@ +{% extends "base.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Rowsandall Training Plans{% endblock %} + +{% block scripts %} + +{% endblock %} + +{% block content %} + + +
+
+

Training Plan - {{ plan.name }}

+
+
+

Macro Cycles

+
+
+

Meso Cycles

+
+
+

Micro Cycles

+
+
+
+ {% for key,macrocycle in cycles.items %} +
+
+

{{ macrocycle.0.name }}

+

{{ macrocycle.0.startdate }}

+

{{ macrocycle.0.enddate }}

+

edit

+
+
+ {% for key, mesocycle in macrocycle.1.items %} +
+ {{ mesocycle.0 }} +
+
+ {% for key, microcycle in mesocycle.1.items %} +
+ {{ microcycle }} +
+
+ {% endfor %} +
+ {% endfor %} +
+ {% endfor %} + +
+ + {% endblock %} diff --git a/rowers/templates/trainingplan_create.html b/rowers/templates/trainingplan_create.html index 3ea01a93..3d32874b 100644 --- a/rowers/templates/trainingplan_create.html +++ b/rowers/templates/trainingplan_create.html @@ -83,7 +83,7 @@ {{ plan.startdate }} {{ plan.enddate }} - {{ plan.name }} + {{ plan.name }} Edit Delete diff --git a/rowers/urls.py b/rowers/urls.py index 9c554557..2df4078f 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -422,6 +422,8 @@ urlpatterns = [ url(r'^createplan$',views.rower_create_trainingplan), url(r'^createplan/(?P\d+)$',views.rower_create_trainingplan), url(r'^deleteplan/(?P\d+)$',views.rower_delete_trainingplan), + url(r'^plan/(?P\d+)$',views.rower_trainingplan_view), + url(r'^macrocycle/(?P\d+)$',views.TrainingMacroCycleUpdate.as_view()), url(r'^deletetarget/(?P\d+)$',views.rower_delete_trainingtarget), url(r'^editplan/(?P\d+)$',views.TrainingPlanUpdate.as_view()), url(r'^edittarget/(?P\d+)$',views.TrainingTargetUpdate.as_view()), diff --git a/rowers/views.py b/rowers/views.py index 33f92b32..1b0bf330 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -71,6 +71,7 @@ from rowers.models import ( TrainingPlan,TrainingPlanForm,TrainingTarget,TrainingTargetForm, TrainingMacroCycle,TrainingMesoCycle,TrainingMicroCycle, TrainingTarget,TrainingTargetForm, + TrainingMacroCycleForm,createmacrofillers ) from rowers.models import ( RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm, @@ -14269,8 +14270,66 @@ def rower_create_trainingplan(request,id=0): @user_passes_test(hasplannedsessions,login_url="/", redirect_field_name=None) -def rower_view_trainingplan(request,id=0): - pass +def rower_trainingplan_view(request,id=0): + try: + plan = TrainingPlan.objects.get(id=id) + except TrainingPlan.DoesNotExist: + raise Http404("Training Plan Does Not Exist") + + if not checkaccessuser(request.user,plan.rower): + raise PermissionDenied("Access denied") + + macrocycles = TrainingMacroCycle.objects.filter(plan=plan).order_by("startdate") + + count = 0 + cycles = {} + + + for m in macrocycles: + mesocycles = TrainingMesoCycle.objects.filter(plan=m).order_by("startdate") + mesos = {} + count2 = 0 + for me in mesocycles: + microcycles = TrainingMicroCycle.objects.filter(plan=me).order_by("startdate") + mesos[count2] = (me, microcycles) + count2 += 1 + cycles[count] = (m,mesos) + count += 1 + + + return render(request,'trainingplan.html', + { + 'plan':plan, + 'cycles':cycles, + } + ) + +class TrainingMacroCycleUpdate(UpdateView): + model = TrainingMacroCycle + template_name = 'trainingplan_edit.html' + form_class = TrainingMacroCycleForm + + + def get_success_url(self): + plan = self.object.plan + createmacrofillers(plan) + return reverse(rower_trainingplan_view, + kwargs = { + 'id':plan.id + } + ) + def form_valid(self, form): + macrocycle = form.save() + return super(TrainingMacroCycleUpdate, self).form_valid(form) + + def get_object(self, *args, **kwargs): + obj = super(TrainingMacroCycleUpdate, self).get_object(*args, **kwargs) + if not checkaccessuser(self.request.user,obj.plan.rower): + raise Http404 + else: + obj.type = 'userdefined' + obj.save() + return obj class TrainingPlanUpdate(UpdateView): model = TrainingPlan