create plannedsession view v1.0
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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> </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>
|
||||
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user