create plannedsession view v1.0
This commit is contained in:
@@ -668,6 +668,8 @@ class GeoPoint(models.Model):
|
|||||||
# of multiple GeoPoint instances
|
# of multiple GeoPoint instances
|
||||||
|
|
||||||
|
|
||||||
|
def half_year_from_now():
|
||||||
|
return timezone.now()+timezone.timedelta(days=182)
|
||||||
|
|
||||||
|
|
||||||
# models related to training planning - draft
|
# models related to training planning - draft
|
||||||
@@ -676,7 +678,7 @@ class TrainingTarget(models.Model):
|
|||||||
rower = models.ForeignKey(Rower)
|
rower = models.ForeignKey(Rower)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
date = models.DateField(
|
date = models.DateField(
|
||||||
default=timezone.now()+datetime.timedelta(days=182))
|
default=half_year_from_now)
|
||||||
notes = models.TextField(max_length=300,blank=True)
|
notes = models.TextField(max_length=300,blank=True)
|
||||||
|
|
||||||
class TrainingTargetForm(ModelForm):
|
class TrainingTargetForm(ModelForm):
|
||||||
@@ -705,13 +707,14 @@ class TrainingTargetForm(ModelForm):
|
|||||||
# although such a TrainingGoal could have automatically calculated
|
# although such a TrainingGoal could have automatically calculated
|
||||||
# values without needing the user to assign
|
# values without needing the user to assign
|
||||||
|
|
||||||
|
|
||||||
class TrainingPlan(models.Model):
|
class TrainingPlan(models.Model):
|
||||||
rower = models.ForeignKey(Rower)
|
rower = models.ForeignKey(Rower)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
target = models.ForeignKey(TrainingTarget,blank=True)
|
target = models.ForeignKey(TrainingTarget,blank=True)
|
||||||
startdate = models.DateField(default=timezone.now)
|
startdate = models.DateField(default=timezone.now)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
default=timezone.now()+datetime.timedelta(days=182))
|
default=half_year_from_now)
|
||||||
|
|
||||||
class TrainingPlanForm(ModelForm):
|
class TrainingPlanForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -738,7 +741,7 @@ class TrainingMacroCycle(models.Model):
|
|||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
startdate = models.DateField(default=timezone.now)
|
startdate = models.DateField(default=timezone.now)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
default=timezone.now()+datetime.timedelta(days=182))
|
default=half_year_from_now)
|
||||||
notes = models.TextField(max_length=300,blank=True)
|
notes = models.TextField(max_length=300,blank=True)
|
||||||
type = models.CharField(default='filler',
|
type = models.CharField(default='filler',
|
||||||
choices=cycletypechoices,
|
choices=cycletypechoices,
|
||||||
@@ -749,7 +752,7 @@ class TrainingMesoCycle(models.Model):
|
|||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
startdate = models.DateField(default=timezone.now)
|
startdate = models.DateField(default=timezone.now)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
default=timezone.now()+datetime.timedelta(days=182))
|
default=half_year_from_now)
|
||||||
notes = models.TextField(max_length=300,blank=True)
|
notes = models.TextField(max_length=300,blank=True)
|
||||||
type = models.CharField(default='filler',
|
type = models.CharField(default='filler',
|
||||||
choices=cycletypechoices,
|
choices=cycletypechoices,
|
||||||
@@ -761,7 +764,7 @@ class TrainingMicroCycle(models.Model):
|
|||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
startdate = models.DateField(default=timezone.now)
|
startdate = models.DateField(default=timezone.now)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
default=timezone.now()+datetime.timedelta(days=182))
|
default=half_year_from_now)
|
||||||
notes = models.TextField(max_length=300,blank=True)
|
notes = models.TextField(max_length=300,blank=True)
|
||||||
type = models.CharField(default='filler',
|
type = models.CharField(default='filler',
|
||||||
choices=cycletypechoices,
|
choices=cycletypechoices,
|
||||||
@@ -816,7 +819,8 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
name = models.CharField(max_length=150,blank=True)
|
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,
|
startdate = models.DateField(default=timezone.now,
|
||||||
verbose_name='Start Date')
|
verbose_name='Start Date')
|
||||||
@@ -826,7 +830,8 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
sessiontype = models.CharField(default='session',
|
sessiontype = models.CharField(default='session',
|
||||||
choices=sessiontypechoices,
|
choices=sessiontypechoices,
|
||||||
max_length=150)
|
max_length=150,
|
||||||
|
verbose_name='Session Type')
|
||||||
|
|
||||||
sessionvalue = models.IntegerField(default=60,verbose_name='Value')
|
sessionvalue = models.IntegerField(default=60,verbose_name='Value')
|
||||||
|
|
||||||
@@ -855,31 +860,11 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
sessionmode = models.CharField(default='distance',
|
sessionmode = models.CharField(default='distance',
|
||||||
choices=sessionmodechoices,
|
choices=sessionmodechoices,
|
||||||
max_length=150)
|
max_length=150,
|
||||||
|
verbose_name='Session Mode')
|
||||||
|
|
||||||
hasranking = models.BooleanField(default=False)
|
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):
|
def __unicode__(self):
|
||||||
|
|
||||||
name = self.name
|
name = self.name
|
||||||
@@ -894,6 +879,30 @@ class PlannedSessionForm(ModelForm):
|
|||||||
|
|
||||||
return stri
|
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
|
# Workout
|
||||||
class Workout(models.Model):
|
class Workout(models.Model):
|
||||||
workouttypes = types.workouttypes
|
workouttypes = types.workouttypes
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ queuehigh = django_rq.get_queue('low')
|
|||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
Rower, Workout,
|
Rower, Workout,
|
||||||
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
|
GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle,
|
||||||
TrainingPlan,
|
TrainingPlan,PlannedSession,
|
||||||
)
|
)
|
||||||
|
|
||||||
import metrics
|
import metrics
|
||||||
@@ -103,3 +103,13 @@ def remove_rower_session(r,ps):
|
|||||||
ps.rower.remove(r)
|
ps.rower.remove(r)
|
||||||
|
|
||||||
return 1
|
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">
|
<div class="grid_12 alpha">
|
||||||
{% include "planningbuttons.html" %}
|
{% include "planningbuttons.html" %}
|
||||||
|
|
||||||
<h1>Create a new Planned Session</h1>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="left" class="grid_6 alpha">
|
<div id="left" class="grid_6 alpha">
|
||||||
|
<h1>Create a new Planned Session</h1>
|
||||||
<form enctype="multipart/form-data" action="{{ formloc }}" method="post">
|
<form enctype="multipart/form-data" action="{{ formloc }}" method="post">
|
||||||
{% if form.errors %}
|
{% if form.errors %}
|
||||||
<p style="color: red;">
|
<p style="color: red;">
|
||||||
@@ -26,7 +26,48 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="right" class="grid_6 omega">
|
<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>
|
</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'^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'^test\_callback',views.rower_process_testcallback),
|
||||||
url(r'^workout/(?P<id>\d+)/test\_strokedata$',views.strokedataform),
|
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:
|
if settings.DEBUG:
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ import json
|
|||||||
from rest_framework.renderers import JSONRenderer
|
from rest_framework.renderers import JSONRenderer
|
||||||
from rest_framework.parsers import JSONParser
|
from rest_framework.parsers import JSONParser
|
||||||
from rowers.rows import handle_uploaded_file,handle_uploaded_image
|
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_makeplot,handle_otwsetpower,handle_sendemailtcx,handle_sendemailcsv
|
||||||
from rowers.tasks import (
|
from rowers.tasks import (
|
||||||
handle_sendemail_unrecognized,handle_sendemailnewcomment,
|
handle_sendemail_unrecognized,handle_sendemailnewcomment,
|
||||||
@@ -11702,22 +11703,51 @@ def agegrouprecordview(request,sex='male',weightcategory='hwt',
|
|||||||
'the_div':div,
|
'the_div':div,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# Individual user creates training for himself
|
||||||
@user_passes_test(hasplannedsessions,login_url="/",
|
@user_passes_test(hasplannedsessions,login_url="/",
|
||||||
redirect_field_name=None)
|
redirect_field_name=None)
|
||||||
def session_create_view(request):
|
def plannedsession_create_view(request):
|
||||||
|
|
||||||
|
r = getrower(request.user)
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
sessioncreateform = PlannedSessionForm(request.POST)
|
sessioncreateform = PlannedSessionForm(request.POST)
|
||||||
if sessioncreateform.is_valid():
|
if sessioncreateform.is_valid():
|
||||||
cd = sessioncreateform.cleaned_data
|
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)
|
return HttpResponseRedirect(url)
|
||||||
else:
|
else:
|
||||||
sessioncreateform = PlannedSessionForm()
|
sessioncreateform = PlannedSessionForm()
|
||||||
|
|
||||||
|
sps = get_sessions(r)
|
||||||
|
|
||||||
return render(request,'plannedsessioncreate.html',
|
return render(request,'plannedsessioncreate.html',
|
||||||
{
|
{
|
||||||
'teams':get_my_teams(request.user),
|
'teams':get_my_teams(request.user),
|
||||||
'form':sessioncreateform,
|
'form':sessioncreateform,
|
||||||
|
'plannedsessions':sps,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user