first changes for template planned sessions
This commit is contained in:
@@ -2128,6 +2128,8 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
hasranking = models.BooleanField(default=False)
|
hasranking = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
is_template = models.BooleanField(default=False)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
||||||
name = self.name
|
name = self.name
|
||||||
|
|||||||
@@ -600,6 +600,7 @@ def get_sessions_manager(m,teamid=0,startdate=date.today(),
|
|||||||
manager=m,
|
manager=m,
|
||||||
startdate__lte=enddate,
|
startdate__lte=enddate,
|
||||||
enddate__gte=startdate,
|
enddate__gte=startdate,
|
||||||
|
is_template=False,
|
||||||
).order_by("preferreddate","startdate","enddate").exclude(
|
).order_by("preferreddate","startdate","enddate").exclude(
|
||||||
sessiontype='race').exclude(sessiontype='indoorrace')
|
sessiontype='race').exclude(sessiontype='indoorrace')
|
||||||
else:
|
else:
|
||||||
@@ -607,6 +608,7 @@ def get_sessions_manager(m,teamid=0,startdate=date.today(),
|
|||||||
manager=m,
|
manager=m,
|
||||||
startdate__lte=enddate,
|
startdate__lte=enddate,
|
||||||
enddate__gte=startdate,
|
enddate__gte=startdate,
|
||||||
|
is_template=False,
|
||||||
).order_by("preferreddate","startdate","enddate").exclude(
|
).order_by("preferreddate","startdate","enddate").exclude(
|
||||||
sessiontype='race').exclude(sessiontype='indoorrace')
|
sessiontype='race').exclude(sessiontype='indoorrace')
|
||||||
|
|
||||||
@@ -619,6 +621,7 @@ def get_sessions(r,startdate=date.today(),
|
|||||||
rower__in=[r],
|
rower__in=[r],
|
||||||
startdate__lte=enddate,
|
startdate__lte=enddate,
|
||||||
enddate__gte=startdate,
|
enddate__gte=startdate,
|
||||||
|
is_template=False,
|
||||||
).order_by("preferreddate","startdate","enddate").exclude(
|
).order_by("preferreddate","startdate","enddate").exclude(
|
||||||
sessiontype='race').exclude(sessiontype='indoorrace')
|
sessiontype='race').exclude(sessiontype='indoorrace')
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,7 @@
|
|||||||
<th>Edit</th>
|
<th>Edit</th>
|
||||||
<th>Clone</th>
|
<th>Clone</th>
|
||||||
<th>Delete</th>
|
<th>Delete</th>
|
||||||
|
<th>Template</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -88,6 +89,45 @@
|
|||||||
<td>
|
<td>
|
||||||
<a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm/">Delete</a>
|
<a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm/">Delete</a>
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
<a class="small" href="/rowers/sessions/{{ ps.id }}/maketemplate/">Save</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</li>
|
||||||
|
<li class="grid_2">
|
||||||
|
<h1>Templates</h1>
|
||||||
|
<p>
|
||||||
|
Click on session name to clone to current period
|
||||||
|
</p>
|
||||||
|
<table class="listtable shortpadded" width="80%">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
<th> </th>
|
||||||
|
<th>Delete</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for ps in sessiontemplates %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{% if ps.name != '' %}
|
||||||
|
<a class="small"
|
||||||
|
href="/rowers/sessions/{{ ps.id }}/clone/user/{{ rower.user.id }}/?when={{ timeperiod }}">{{ ps.name }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="small"
|
||||||
|
href="/rowers/sessions/{{ ps.id }}/clone/user/{{ rower.user.id }}/?when={{ timeperiod }}">Unnamed Session</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td> {{ ps.sessionvalue }} </td>
|
||||||
|
<td> {{ ps.sessionunit }} </td>
|
||||||
|
<td>
|
||||||
|
<a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm/">Delete</a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
{% if not object.is_template %}
|
||||||
<li class="grid_2">
|
<li class="grid_2">
|
||||||
<h2>Session {{ psdict.name.1 }}</h2>
|
<h2>Session {{ psdict.name.1 }}</h2>
|
||||||
<table class="listtable shortpadded">
|
<table class="listtable shortpadded">
|
||||||
@@ -32,6 +33,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,42 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="grid_2">
|
||||||
|
<h1>Templates</h1>
|
||||||
|
<p>
|
||||||
|
Click on session name to clone to current period
|
||||||
|
</p>
|
||||||
|
<table class="listtable shortpadded" width="80%">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
<th> </th>
|
||||||
|
<th>Delete</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for ps in sessiontemplates %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{% if ps.name != '' %}
|
||||||
|
<a class="small"
|
||||||
|
href="/rowers/sessions/{{ ps.id }}/clone/user/{{ rower.user.id }}/?when={{ timeperiod }}">{{ ps.name }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="small"
|
||||||
|
href="/rowers/sessions/{{ ps.id }}/clone/user/{{ rower.user.id }}/?when={{ timeperiod }}">Unnamed Session</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td> {{ ps.sessionvalue }} </td>
|
||||||
|
<td> {{ ps.sessionunit }} </td>
|
||||||
|
<td>
|
||||||
|
<a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm/">Delete</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
@@ -649,6 +649,7 @@ urlpatterns = [
|
|||||||
views.plannedsession_multicreate_view,
|
views.plannedsession_multicreate_view,
|
||||||
name='plannedsession_multicreate_view'),
|
name='plannedsession_multicreate_view'),
|
||||||
re_path(r'^sessions/(?P<id>\d+)/edit/$',views.plannedsession_edit_view),
|
re_path(r'^sessions/(?P<id>\d+)/edit/$',views.plannedsession_edit_view),
|
||||||
|
re_path(r'^sessions/(?P<id>\d+)/maketemplate/$',views.plannedsession_totemplate_view),
|
||||||
re_path(r'^sessions/(?P<id>\d+)/compare/$',
|
re_path(r'^sessions/(?P<id>\d+)/compare/$',
|
||||||
views.plannedsession_compare_view,
|
views.plannedsession_compare_view,
|
||||||
name='plannedsession_compare_view'),
|
name='plannedsession_compare_view'),
|
||||||
|
|||||||
@@ -240,6 +240,7 @@ def plannedsession_multiclone_view(
|
|||||||
sps = PlannedSession.objects.filter(
|
sps = PlannedSession.objects.filter(
|
||||||
manager=request.user,
|
manager=request.user,
|
||||||
rower__in=[r],
|
rower__in=[r],
|
||||||
|
is_template=False,
|
||||||
startdate__lte=enddate,
|
startdate__lte=enddate,
|
||||||
enddate__gte=startdate).order_by(
|
enddate__gte=startdate).order_by(
|
||||||
"startdate","preferreddate","enddate").exclude(
|
"startdate","preferreddate","enddate").exclude(
|
||||||
@@ -435,6 +436,10 @@ def plannedsession_create_view(request,
|
|||||||
|
|
||||||
sps = get_sessions(r,startdate=startdate,enddate=enddate).exclude(
|
sps = get_sessions(r,startdate=startdate,enddate=enddate).exclude(
|
||||||
sessiontype='race')
|
sessiontype='race')
|
||||||
|
|
||||||
|
|
||||||
|
sessiontemplates = PlannedSession.objects.filter(manager=request.user,is_template=True)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
trainingplan = TrainingPlan.objects.filter(
|
trainingplan = TrainingPlan.objects.filter(
|
||||||
startdate__lte = startdate,
|
startdate__lte = startdate,
|
||||||
@@ -458,6 +463,7 @@ def plannedsession_create_view(request,
|
|||||||
'form':sessioncreateform,
|
'form':sessioncreateform,
|
||||||
'active':'nav-plan',
|
'active':'nav-plan',
|
||||||
'plannedsessions':sps,
|
'plannedsessions':sps,
|
||||||
|
'sessiontemplates':sessiontemplates,
|
||||||
'rower':r,
|
'rower':r,
|
||||||
'timeperiod':timeperiod,
|
'timeperiod':timeperiod,
|
||||||
})
|
})
|
||||||
@@ -1412,13 +1418,16 @@ def plannedsession_clone_view(request,id=0,userid=0):
|
|||||||
teams = ps.team.all()
|
teams = ps.team.all()
|
||||||
|
|
||||||
ps.pk = None
|
ps.pk = None
|
||||||
|
ps.id = None
|
||||||
|
if not ps.is_template:
|
||||||
|
ps.name += ' (copy)'
|
||||||
|
ps.is_template = False
|
||||||
|
|
||||||
deltadays = ps.enddate-ps.startdate
|
deltadays = ps.enddate-ps.startdate
|
||||||
|
|
||||||
ps.startdate = timezone.now().date()
|
ps.startdate = timezone.now().date()
|
||||||
ps.enddate = (timezone.now()+deltadays).date()
|
ps.enddate = (timezone.now()+deltadays).date()
|
||||||
ps.preferreddate = ps.preferreddate+deltadays
|
ps.preferreddate = ps.preferreddate+deltadays
|
||||||
ps.name += ' (copy)'
|
|
||||||
|
|
||||||
ps.save()
|
ps.save()
|
||||||
|
|
||||||
@@ -1441,6 +1450,37 @@ def plannedsession_clone_view(request,id=0,userid=0):
|
|||||||
|
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
|
@user_passes_test(hasplannedsessions, login_url="/rowers/paidplans/",
|
||||||
|
message="This functionality requires a Coach or Self-Coach plan",
|
||||||
|
redirect_field_name=None)
|
||||||
|
def plannedsession_totemplate_view(request,id=0):
|
||||||
|
|
||||||
|
r = getrequestplanrower(request)
|
||||||
|
|
||||||
|
startdate, enddate = get_dates_timeperiod(request)
|
||||||
|
|
||||||
|
try:
|
||||||
|
ps = PlannedSession.objects.get(id=id)
|
||||||
|
except PlannedSession.DoesNotExist:
|
||||||
|
raise Http404("Planned Session does not exist")
|
||||||
|
|
||||||
|
if ps.manager != request.user:
|
||||||
|
raise PermissionDenied("You can only store your own sessions as a template")
|
||||||
|
|
||||||
|
ps.pk = None
|
||||||
|
ps.id = None
|
||||||
|
ps.is_template = True
|
||||||
|
ps.startdate = datetime.date(1970,1,1)
|
||||||
|
ps.enddate = datetime.date(1970,1,1)
|
||||||
|
ps.save()
|
||||||
|
|
||||||
|
url = reverse(plannedsession_create_view,kwargs={'userid':request.user.id})
|
||||||
|
|
||||||
|
startdatestring = startdate.strftime('%Y-%m-%d')
|
||||||
|
enddatestring = enddate.strftime('%Y-%m-%d')
|
||||||
|
url += '?when='+startdatestring+'/'+enddatestring
|
||||||
|
|
||||||
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
# Edit an existing planned session
|
# Edit an existing planned session
|
||||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
|
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
|
||||||
@@ -1547,6 +1587,8 @@ def plannedsession_edit_view(request,id=0,userid=0):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
sessiontemplates = PlannedSession.objects.filter(manager=request.user,is_template=True)
|
||||||
|
|
||||||
dateform = DateRangeForm(initial={
|
dateform = DateRangeForm(initial={
|
||||||
'startdate':startdate,
|
'startdate':startdate,
|
||||||
'enddate':enddate,
|
'enddate':enddate,
|
||||||
@@ -1564,6 +1606,7 @@ def plannedsession_edit_view(request,id=0,userid=0):
|
|||||||
'plannedsessions':sps,
|
'plannedsessions':sps,
|
||||||
'thesession':ps,
|
'thesession':ps,
|
||||||
'dateform':dateform,
|
'dateform':dateform,
|
||||||
|
'sessiontemplates':sessiontemplates,
|
||||||
'rower':r,
|
'rower':r,
|
||||||
'timeperiod':timeperiod,
|
'timeperiod':timeperiod,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user