Private
Public Access
1
0

create plannedsession view v1.0

This commit is contained in:
Sander Roosendaal
2018-02-05 21:36:11 +01:00
parent cdf18058b9
commit ba334554eb
5 changed files with 127 additions and 37 deletions

View File

@@ -668,6 +668,8 @@ class GeoPoint(models.Model):
# of multiple GeoPoint instances
def half_year_from_now():
return timezone.now()+timezone.timedelta(days=182)
# models related to training planning - draft
@@ -676,7 +678,7 @@ class TrainingTarget(models.Model):
rower = models.ForeignKey(Rower)
name = models.CharField(max_length=150,blank=True)
date = models.DateField(
default=timezone.now()+datetime.timedelta(days=182))
default=half_year_from_now)
notes = models.TextField(max_length=300,blank=True)
class TrainingTargetForm(ModelForm):
@@ -705,13 +707,14 @@ class TrainingTargetForm(ModelForm):
# although such a TrainingGoal could have automatically calculated
# values without needing the user to assign
class TrainingPlan(models.Model):
rower = models.ForeignKey(Rower)
name = models.CharField(max_length=150,blank=True)
target = models.ForeignKey(TrainingTarget,blank=True)
startdate = models.DateField(default=timezone.now)
enddate = models.DateField(
default=timezone.now()+datetime.timedelta(days=182))
default=half_year_from_now)
class TrainingPlanForm(ModelForm):
class Meta:
@@ -738,7 +741,7 @@ class TrainingMacroCycle(models.Model):
name = models.CharField(max_length=150,blank=True)
startdate = models.DateField(default=timezone.now)
enddate = models.DateField(
default=timezone.now()+datetime.timedelta(days=182))
default=half_year_from_now)
notes = models.TextField(max_length=300,blank=True)
type = models.CharField(default='filler',
choices=cycletypechoices,
@@ -749,7 +752,7 @@ class TrainingMesoCycle(models.Model):
name = models.CharField(max_length=150,blank=True)
startdate = models.DateField(default=timezone.now)
enddate = models.DateField(
default=timezone.now()+datetime.timedelta(days=182))
default=half_year_from_now)
notes = models.TextField(max_length=300,blank=True)
type = models.CharField(default='filler',
choices=cycletypechoices,
@@ -761,7 +764,7 @@ class TrainingMicroCycle(models.Model):
name = models.CharField(max_length=150,blank=True)
startdate = models.DateField(default=timezone.now)
enddate = models.DateField(
default=timezone.now()+datetime.timedelta(days=182))
default=half_year_from_now)
notes = models.TextField(max_length=300,blank=True)
type = models.CharField(default='filler',
choices=cycletypechoices,
@@ -816,7 +819,8 @@ class PlannedSession(models.Model):
name = models.CharField(max_length=150,blank=True)
comment = models.TextField(max_length=300,blank=True)
comment = models.TextField(max_length=300,blank=True,
)
startdate = models.DateField(default=timezone.now,
verbose_name='Start Date')
@@ -826,7 +830,8 @@ class PlannedSession(models.Model):
sessiontype = models.CharField(default='session',
choices=sessiontypechoices,
max_length=150)
max_length=150,
verbose_name='Session Type')
sessionvalue = models.IntegerField(default=60,verbose_name='Value')
@@ -855,31 +860,11 @@ class PlannedSession(models.Model):
sessionmode = models.CharField(default='distance',
choices=sessionmodechoices,
max_length=150)
max_length=150,
verbose_name='Session Mode')
hasranking = models.BooleanField(default=False)
class PlannedSessionForm(ModelForm):
class Meta:
model = PlannedSession
fields = ['startdate',
'enddate',
'sessiontype',
'sessionmode',
'sessionvalue',
'sessionunit',
'comment',
]
widgets = {
'comment': forms.Textarea,
'startdate': SelectDateWidget(
years=range(
timezone.now().year-1,timezone.now().year+1)),
'enddate': SelectDateWidget(
years=range(
timezone.now().year-1,timezone.now().year+1)),
}
def __unicode__(self):
name = self.name
@@ -893,6 +878,30 @@ class PlannedSessionForm(ModelForm):
)
return stri
class PlannedSessionForm(ModelForm):
class Meta:
model = PlannedSession
fields = ['startdate',
'enddate',
'name',
'sessiontype',
'sessionmode',
'sessionvalue',
'sessionunit',
'comment',
]
widgets = {
'comment': forms.Textarea,
'startdate': SelectDateWidget(
years=range(
timezone.now().year-1,timezone.now().year+2)),
'enddate': SelectDateWidget(
years=range(
timezone.now().year-1,timezone.now().year+2)),
}
# Workout
class Workout(models.Model):

View File

@@ -17,7 +17,7 @@ queuehigh = django_rq.get_queue('low')
from rowers.models import (
Rower, Workout,
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
TrainingPlan,
TrainingPlan,PlannedSession,
)
import metrics
@@ -103,3 +103,13 @@ def remove_rower_session(r,ps):
ps.rower.remove(r)
return 1
def get_sessions(r,startdate=timezone.now(),
enddate=timezone.now()+timezone.timedelta(+1000)):
sps = PlannedSession.objects.filter(
rower__in=[r],
startdate__gte=startdate,
enddate__lte=enddate,
).order_by("startdate")
return sps

View File

@@ -7,9 +7,9 @@
<div class="grid_12 alpha">
{% include "planningbuttons.html" %}
<h1>Create a new Planned Session</h1>
</div>
<div id="left" class="grid_6 alpha">
<h1>Create a new Planned Session</h1>
<form enctype="multipart/form-data" action="{{ formloc }}" method="post">
{% if form.errors %}
<p style="color: red;">
@@ -26,7 +26,48 @@
</div>
</div>
<div id="right" class="grid_6 omega">
<p>Not yet defined</p>
<h1>Plan</h1>
<p>
Click on session name to view
</p>
<table class="listtable shortpadded">
<thead>
<tr>
<th>After</th>
<th>Before</th>
<th>Name</th>
<th>Value</th>
<th>&nbsp;</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
{% for ps in plannedsessions %}
<tr>
<td> {{ ps.startdate|date:"Y-m-d" }} </td>
<td> {{ ps.enddate|date:"Y-m-d" }} </td>
<td>
{% if ps.name != '' %}
<a class="small"
href="/rowers/sessions/{{ ps.id }}">{{ ps.name }}</a>
{% else %}
<a class="small"
href="/rowers/sessions/{{ ps.id }}">Unnamed Session</a>
{% endif %}
</td>
<td> {{ ps.sessionvalue }} </td>
<td> {{ ps.sessionunit }} </td>
<td>
<a class="small" href="/rowers/sessions/{{ ps.id }}/edit">Edit</a>
</td>
<td>
<a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm">Delete</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>

View File

@@ -396,7 +396,7 @@ urlpatterns = [
url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>[\w\ ]+.*)/$',views.workout_comparison_view2),
url(r'^test\_callback',views.rower_process_testcallback),
url(r'^workout/(?P<id>\d+)/test\_strokedata$',views.strokedataform),
url(r'^sessions/create$',views.session_create_view),
url(r'^sessions/create$',views.plannedsession_create_view),
]
if settings.DEBUG:

View File

@@ -107,6 +107,7 @@ import json
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from rowers.rows import handle_uploaded_file,handle_uploaded_image
from rowers.plannedsessions import *
from rowers.tasks import handle_makeplot,handle_otwsetpower,handle_sendemailtcx,handle_sendemailcsv
from rowers.tasks import (
handle_sendemail_unrecognized,handle_sendemailnewcomment,
@@ -11702,22 +11703,51 @@ def agegrouprecordview(request,sex='male',weightcategory='hwt',
'the_div':div,
})
# Individual user creates training for himself
@user_passes_test(hasplannedsessions,login_url="/",
redirect_field_name=None)
def session_create_view(request):
def plannedsession_create_view(request):
r = getrower(request.user)
if request.method == 'POST':
sessioncreateform = PlannedSessionForm(request.POST)
if sessioncreateform.is_valid():
cd = sessioncreateform.cleaned_data
# do something with data
startdate = cd['startdate']
enddate = cd['enddate']
sessiontype = cd['sessiontype']
sessionmode = cd['sessionmode']
sessionvalue = cd['sessionvalue']
sessionunit = cd['sessionunit']
comment = cd['comment']
name = cd['name']
url = reverse(session_create_view)
ps = PlannedSession(
name=name,
startdate=startdate,
enddate=enddate,
sessiontype=sessiontype,
sessionmode=sessionmode,
sessionvalue=sessionvalue,
sessionunit=sessionunit,
comment=comment,
manager=request.user)
ps.save()
add_rower_session(r,ps)
url = reverse(plannedsession_create_view)
return HttpResponseRedirect(url)
else:
sessioncreateform = PlannedSessionForm()
sps = get_sessions(r)
return render(request,'plannedsessioncreate.html',
{
'teams':get_my_teams(request.user),
'form':sessioncreateform,
'plannedsessions':sps,
})