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