Private
Public Access
1
0

replan meso cycle by weeks

This commit is contained in:
Sander Roosendaal
2018-10-26 13:47:29 +02:00
parent 96ff340bb3
commit 8617156db5
4 changed files with 96 additions and 8 deletions

View File

@@ -210,6 +210,10 @@
/ /
<a href="/rowers/deletemesocycle/{{ mesocycle.0.id }}/">delete</a> <a href="/rowers/deletemesocycle/{{ mesocycle.0.id }}/">delete</a>
/ /
<a href="/rowers/mesocycle/{{ mesocycle.0.id }}/planbyweeks/user/{{ rower.user.id }}">
Replan by Weeks
</a>
/
{% endif %} {% endif %}
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a> <a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
</td> </td>

View File

@@ -187,7 +187,7 @@ def may_edit(workout,request):
@register.filter @register.filter
def mayeditplan(obj,request): def mayeditplan(obj,request):
if obj is None: if obj is None:
return False return False

View File

@@ -441,6 +441,8 @@ urlpatterns = [
name='macrocycle_update_view'), name='macrocycle_update_view'),
url(r'^mesocycle/(?P<pk>\d+)/$',views.TrainingMesoCycleUpdate.as_view(), url(r'^mesocycle/(?P<pk>\d+)/$',views.TrainingMesoCycleUpdate.as_view(),
name='mesocycle_update_view'), name='mesocycle_update_view'),
url(r'^mesocycle/(?P<id>\d+)/planbyweeks/$',views.planmesocyclebyweek),
url(r'^mesocycle/(?P<id>\d+)/planbyweeks/user/(?P<userid>\d+)/$',views.planmesocyclebyweek),
url(r'^microcycle/(?P<pk>\d+)/$',views.TrainingMicroCycleUpdate.as_view(), url(r'^microcycle/(?P<pk>\d+)/$',views.TrainingMicroCycleUpdate.as_view(),
name='microcycle_update_view'), name='microcycle_update_view'),
url(r'^deletetarget/(?P<id>\d+)/$',views.rower_delete_trainingtarget), url(r'^deletetarget/(?P<id>\d+)/$',views.rower_delete_trainingtarget),

View File

@@ -16725,7 +16725,7 @@ class TrainingMacroCycleUpdate(UpdateView):
def get_object(self, *args, **kwargs): def get_object(self, *args, **kwargs):
obj = super(TrainingMacroCycleUpdate, self).get_object(*args, **kwargs) obj = super(TrainingMacroCycleUpdate, self).get_object(*args, **kwargs)
if obj.plan.manager is not None and self.request.user != obj.plan.manager: if obj.plan.manager is not None and self.request.user.rower != obj.plan.manager:
raise PermissionDenied('You are not allowed to edit this training plan cycle') raise PermissionDenied('You are not allowed to edit this training plan cycle')
if not checkaccessuser(self.request.user,obj.plan.rower): if not checkaccessuser(self.request.user,obj.plan.rower):
@@ -16800,7 +16800,7 @@ class TrainingMesoCycleUpdate(UpdateView):
def get_object(self, *args, **kwargs): def get_object(self, *args, **kwargs):
obj = super(TrainingMesoCycleUpdate, self).get_object(*args, **kwargs) obj = super(TrainingMesoCycleUpdate, self).get_object(*args, **kwargs)
r = obj.plan.plan.rower r = obj.plan.plan.rower
if obj.plan.plan.manager is not None and self.request.user != obj.plan.plan.manager: if obj.plan.plan.manager is not None and self.request.user.rower != obj.plan.plan.manager:
raise PermissionDenied('You are not allowed to edit this training plan cycle') raise PermissionDenied('You are not allowed to edit this training plan cycle')
if not checkaccessuser(self.request.user,r): if not checkaccessuser(self.request.user,r):
@@ -16881,7 +16881,7 @@ class TrainingMicroCycleUpdate(UpdateView):
def get_object(self, *args, **kwargs): def get_object(self, *args, **kwargs):
obj = super(TrainingMicroCycleUpdate, self).get_object(*args, **kwargs) obj = super(TrainingMicroCycleUpdate, self).get_object(*args, **kwargs)
r = obj.plan.plan.plan.rower r = obj.plan.plan.plan.rower
if obj.plan.plan.plan.manager is not None and self.request.user != obj.plan.plan.plan.manager.user: if obj.plan.plan.plan.manager is not None and self.request.user.rower != obj.plan.plan.plan.manager:
raise PermissionDenied('You are not allowed to edit this training plan cycle') raise PermissionDenied('You are not allowed to edit this training plan cycle')
if not checkaccessuser(self.request.user,r): if not checkaccessuser(self.request.user,r):
@@ -16898,6 +16898,41 @@ class TrainingPlanUpdate(UpdateView):
template_name = 'trainingplan_edit.html' template_name = 'trainingplan_edit.html'
form_class = TrainingPlanForm form_class = TrainingPlanForm
# extra parameters
def get_context_data(self, **kwargs):
context = super(TrainingPlanUpdate, self).get_context_data(**kwargs)
if 'userid' in kwargs:
userid = kwargs['userid']
else:
userid=0
breadcrumbs = [
{
'url':reverse(plannedsessions_view,
kwargs={'userid':userid}),
'name': 'Plan'
},
{
'url':reverse(rower_trainingplan_view,
kwargs={'userid':userid,
'id':self.object.id}),
'name': self.object.name
},
{
'url':reverse('trainingplan_update_view',
kwargs={'pk':self.object.pk}),
'name': 'Edit'
}
]
context['active'] = 'nav-plan'
context['breadcrumbs'] = breadcrumbs
context['rower'] = getrequestrower(self.request,userid=userid)
return context
def get_success_url(self): def get_success_url(self):
return reverse(rower_create_trainingplan) return reverse(rower_create_trainingplan)
@@ -16912,7 +16947,7 @@ class TrainingPlanUpdate(UpdateView):
def get_object(self, *args, **kwargs): def get_object(self, *args, **kwargs):
obj = super(TrainingPlanUpdate, self).get_object(*args, **kwargs) obj = super(TrainingPlanUpdate, self).get_object(*args, **kwargs)
if obj.manager is not None and self.request.user != obj.manager.user: if obj.manager is not None and self.request.user.rower != obj.manager.user:
raise PermissionDenied('You are not allowed to edit this training plan cycle') raise PermissionDenied('You are not allowed to edit this training plan cycle')
if not checkaccessuser(self.request.user,obj.rower): if not checkaccessuser(self.request.user,obj.rower):
@@ -16935,15 +16970,62 @@ class TrainingTargetUpdate(UpdateView):
def get_object(self, *args, **kwargs): def get_object(self, *args, **kwargs):
obj = super(TrainingTargetUpdate, self).get_object(*args, **kwargs) obj = super(TrainingTargetUpdate, self).get_object(*args, **kwargs)
if obj.manager is not None and self.request.user != obj.manager.user: if obj.manager is not None and self.request.user.rower != obj.manager.user:
raise PermissionDenied('You are not allowed to edit this training plan cycle') raise PermissionDenied('You are not allowed to edit this training plan cycle')
if not checkaccessuser(self.request.user,obj.rower): if not checkaccessuser(self.request.user,obj.rower):
raise PermissionDenied('You are not allowed to edit this training plan target') raise PermissionDenied('You are not allowed to edit this training plan target')
return obj return obj
def allsundays(startdate,enddate):
d = startdate
d += timedelta(days = 6 - d.weekday()) # first Sunday
while d<enddate:
yield d
d += timedelta(days=7)
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership", @user_passes_test(hasplannedsessions,login_url="/rowers/promembership",
message="This functionality requires a Coach or Self-Coach plan", message="This functionality requires a Coach or Self-Coach plan",
redirect_field_name=None) redirect_field_name=None)
def bla(): def planmesocyclebyweek(request,id=0,userid=0):
pass try:
cycle = TrainingMesoCycle.objects.get(id=id)
except TrainingMesoCycle.DoesNotExist:
raise Http404("Training Cycle does not exist")
if not checkaccessuser(request.user,cycle.plan.plan.manager):
raise PermissionDenied("You are not allowed to do this")
micros = TrainingMicroCycle.objects.filter(plan=cycle)
for m in micros:
m.delete()
cycle.type = 'userdefined'
cycle.save()
#we're still here. We have permission
sundays = [s for s in allsundays(cycle.startdate,cycle.enddate)]
for i in range(len(sundays)-1):
monday = sundays[i]+timedelta(days=1)
nextsunday = sundays[i+1]
if i == 0 and monday > cycle.startdate:
monday = cycle.startdate
if nextsunday < cycle.enddate and i == len(sundays)-2:
nextsunday = cycle.enddate
micro = TrainingMicroCycle(startdate = monday,
enddate = nextsunday,
plan = cycle,
name = 'Week %s' % sundays[i+1].isocalendar()[1],
type = 'userdefined')
micro.save()
micros = TrainingMicroCycle.objects.filter(plan=cycle)
url = reverse(rower_trainingplan_view,
kwargs = {'userid':str(userid),
'id':str(cycle.plan.plan.id),
'thismicroid':str(micros[0].id)})
return HttpResponseRedirect(url)