multiple athletes for plans and targets
This commit is contained in:
@@ -934,7 +934,9 @@ def a_week_from_now():
|
|||||||
# models related to training planning - draft
|
# models related to training planning - draft
|
||||||
# Do we need a separate class TestTarget?
|
# Do we need a separate class TestTarget?
|
||||||
class TrainingTarget(models.Model):
|
class TrainingTarget(models.Model):
|
||||||
rower = models.ForeignKey(Rower,related_name='targetathlete')
|
rower = models.ForeignKey(Rower,related_name='targetathlete',null=True)
|
||||||
|
rowers = models.ManyToManyField(Rower, related_name='targetathletes',
|
||||||
|
verbose_name='Athletes')
|
||||||
manager = models.ForeignKey(Rower,related_name='targetmanager',null=True)
|
manager = models.ForeignKey(Rower,related_name='targetmanager',null=True)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
date = models.DateField(
|
date = models.DateField(
|
||||||
@@ -944,8 +946,12 @@ class TrainingTarget(models.Model):
|
|||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
date = self.date
|
date = self.date
|
||||||
name = self.name
|
name = self.name
|
||||||
ownerfirst = self.rower.user.first_name
|
try:
|
||||||
ownerlast = self.rower.user.last_name
|
ownerfirst = self.manager.user.first_name
|
||||||
|
ownerlast = self.manager.user.last_name
|
||||||
|
except AttributeError:
|
||||||
|
ownerfirst = ''
|
||||||
|
ownerlast = ''
|
||||||
|
|
||||||
stri = u'{ownerfirst} {ownerlast} {d} {n}'.format(
|
stri = u'{ownerfirst} {ownerlast} {d} {n}'.format(
|
||||||
ownerfirst = ownerfirst,
|
ownerfirst = ownerfirst,
|
||||||
@@ -959,12 +965,24 @@ class TrainingTarget(models.Model):
|
|||||||
class TrainingTargetForm(ModelForm):
|
class TrainingTargetForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TrainingTarget
|
model = TrainingTarget
|
||||||
fields = ['name','date','notes']
|
fields = ['name','date','notes','rowers']
|
||||||
|
|
||||||
widgets = {
|
widgets = {
|
||||||
'date': AdminDateWidget()
|
'date': AdminDateWidget()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __init__(self,*args, **kwargs):
|
||||||
|
super(TrainingTargetForm, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
try:
|
||||||
|
teams = Team.objects.filter(manager=self.instance.manager.user)
|
||||||
|
|
||||||
|
self.fields['rowers'].queryset = Rower.objects.filter(
|
||||||
|
team__in=teams
|
||||||
|
).distinct().order_by("user__last_name","user__first_name")
|
||||||
|
except AttributeError:
|
||||||
|
self.fields.pop('rowers')
|
||||||
|
|
||||||
|
|
||||||
# SportTracks has a TrainingGoal like this
|
# SportTracks has a TrainingGoal like this
|
||||||
#class TrainingGoal(models.Model):
|
#class TrainingGoal(models.Model):
|
||||||
@@ -991,10 +1009,11 @@ class TrainingPlan(models.Model):
|
|||||||
|
|
||||||
# rower field is obsolete. Use rowers
|
# rower field is obsolete. Use rowers
|
||||||
rower = models.ForeignKey(Rower,related_name='planathlete',null=True)
|
rower = models.ForeignKey(Rower,related_name='planathlete',null=True)
|
||||||
rowers = models.ManyToManyField(Rower,related_name='planathletes')
|
rowers = models.ManyToManyField(Rower,related_name='planathletes',
|
||||||
|
verbose_name='Athletes')
|
||||||
manager = models.ForeignKey(Rower,related_name='planmanager',null=True)
|
manager = models.ForeignKey(Rower,related_name='planmanager',null=True)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
status = models.CharField(max_length=150,default='active',choices=statuschoices)
|
status = models.BooleanField(default=True,verbose_name='Active')
|
||||||
target = models.ForeignKey(TrainingTarget,blank=True,null=True)
|
target = models.ForeignKey(TrainingTarget,blank=True,null=True)
|
||||||
startdate = models.DateField(default=timezone.now)
|
startdate = models.DateField(default=timezone.now)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
@@ -1024,16 +1043,23 @@ class TrainingPlan(models.Model):
|
|||||||
self.startdate = enddate
|
self.startdate = enddate
|
||||||
self.enddate = startdate
|
self.enddate = startdate
|
||||||
|
|
||||||
if self.status == 'active':
|
if self.status:
|
||||||
otherplans = TrainingPlan.objects.filter(
|
otherplans = TrainingPlan.objects.filter(
|
||||||
rower=self.rower,
|
status=True).exclude(
|
||||||
status='active').exclude(pk=self.pk).order_by("-startdate")
|
pk=self.pk).order_by(
|
||||||
|
"-startdate")
|
||||||
|
|
||||||
for otherplan in otherplans:
|
for otherplan in otherplans:
|
||||||
if otherplan.startdate <= self.enddate and otherplan.startdate >= self.startdate:
|
if otherplan.startdate <= self.enddate and otherplan.startdate >= self.startdate:
|
||||||
self.status = 'deactivated'
|
for rower in self.rowers.all():
|
||||||
|
if rower in otherplan.rowers.all():
|
||||||
|
print otherplan
|
||||||
|
self.status = False
|
||||||
if otherplan.enddate >= self.startdate and otherplan.enddate <= self.enddate:
|
if otherplan.enddate >= self.startdate and otherplan.enddate <= self.enddate:
|
||||||
self.status = 'deactivated'
|
for rower in self.rowers.all():
|
||||||
|
if rower in otherplan.rowers.all():
|
||||||
|
print otherplan
|
||||||
|
self.status = False
|
||||||
|
|
||||||
if not self.enddate <= self.startdate:
|
if not self.enddate <= self.startdate:
|
||||||
super(TrainingPlan,self).save(*args, **kwargs)
|
super(TrainingPlan,self).save(*args, **kwargs)
|
||||||
@@ -1061,7 +1087,7 @@ class TrainingPlan(models.Model):
|
|||||||
class TrainingPlanForm(ModelForm):
|
class TrainingPlanForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TrainingPlan
|
model = TrainingPlan
|
||||||
fields = ['name','target','startdate','enddate','status']
|
fields = ['name','target','startdate','enddate','status','rowers']
|
||||||
|
|
||||||
widgets = {
|
widgets = {
|
||||||
'startdate': AdminDateWidget(),
|
'startdate': AdminDateWidget(),
|
||||||
@@ -1076,8 +1102,16 @@ class TrainingPlanForm(ModelForm):
|
|||||||
targetchoices = [(x.id,x) for x in targets]
|
targetchoices = [(x.id,x) for x in targets]
|
||||||
targetchoices.append((None,'---'))
|
targetchoices.append((None,'---'))
|
||||||
self.fields['target'].choices = targetchoices
|
self.fields['target'].choices = targetchoices
|
||||||
|
|
||||||
|
try:
|
||||||
|
teams = Team.objects.filter(manager=self.instance.manager.user)
|
||||||
|
|
||||||
|
self.fields['rowers'].queryset = Rower.objects.filter(
|
||||||
|
team__in=teams
|
||||||
|
).distinct().order_by("user__last_name","user__first_name")
|
||||||
|
except AttributeError:
|
||||||
|
self.fields.pop('rowers')
|
||||||
|
|
||||||
|
|
||||||
cycletypechoices = (
|
cycletypechoices = (
|
||||||
('filler','System Defined'),
|
('filler','System Defined'),
|
||||||
('userdefined','User Defined')
|
('userdefined','User Defined')
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
<td> {{ plan.startdate }} </td>
|
<td> {{ plan.startdate }} </td>
|
||||||
<td> {{ plan.enddate }}</td>
|
<td> {{ plan.enddate }}</td>
|
||||||
<td><a href="/rowers/plan/{{ plan.id }}">{{ plan.name }}</a></td>
|
<td><a href="/rowers/plan/{{ plan.id }}">{{ plan.name }}</a></td>
|
||||||
<td> {{ plan.status }}</td>
|
<td> {% if plan.status %} active {% else %} inactive {% endif %}</td>
|
||||||
<td> <a href="/rowers/editplan/{{ plan.id }}">Edit</a></td>
|
<td> <a href="/rowers/editplan/{{ plan.id }}">Edit</a></td>
|
||||||
<td> <a href="/rowers/plan/{{ plan.id }}">Plan</a></td>
|
<td> <a href="/rowers/plan/{{ plan.id }}">Plan</a></td>
|
||||||
<td> <a href="/rowers/deleteplan/{{ plan.id }}">Delete</a></td>
|
<td> <a href="/rowers/deleteplan/{{ plan.id }}">Delete</a></td>
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ def team_members(user):
|
|||||||
members = Rower.objects.filter(
|
members = Rower.objects.filter(
|
||||||
team__in=teams
|
team__in=teams
|
||||||
).distinct().order_by(
|
).distinct().order_by(
|
||||||
"user__last_name","user__last_name"
|
"user__last_name","user__first_name"
|
||||||
)
|
)
|
||||||
return [rower.user for rower in members]
|
return [rower.user for rower in members]
|
||||||
except TypeError:
|
except TypeError:
|
||||||
@@ -397,7 +397,9 @@ def timeurl(path,timestring):
|
|||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def trainingplans(rower):
|
def trainingplans(rower):
|
||||||
plans = TrainingPlan.objects.filter(rower=rower).order_by("-startdate")
|
plans = TrainingPlan.objects.filter(
|
||||||
|
rowers=rower,
|
||||||
|
status=True).order_by("-startdate")
|
||||||
|
|
||||||
return plans
|
return plans
|
||||||
|
|
||||||
|
|||||||
@@ -16156,12 +16156,15 @@ def rower_create_trainingplan(request,userid=0):
|
|||||||
date = targetform.cleaned_data['date']
|
date = targetform.cleaned_data['date']
|
||||||
notes = targetform.cleaned_data['notes']
|
notes = targetform.cleaned_data['notes']
|
||||||
|
|
||||||
t = TrainingTarget(rowers=[therower],
|
t = TrainingTarget(
|
||||||
name=name,
|
name=name,
|
||||||
date=date,
|
date=date,
|
||||||
manager=themanager,
|
manager=themanager,
|
||||||
notes=notes)
|
notes=notes)
|
||||||
|
|
||||||
|
|
||||||
|
t.save()
|
||||||
|
t.rowers.add(therower)
|
||||||
t.save()
|
t.save()
|
||||||
|
|
||||||
elif request.method == 'POST' and 'startdate' in request.POST:
|
elif request.method == 'POST' and 'startdate' in request.POST:
|
||||||
@@ -16185,7 +16188,14 @@ def rower_create_trainingplan(request,userid=0):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
targets = TrainingTarget.objects.filter(rower=therower).order_by("date")
|
targets2 = TrainingTarget.objects.filter(rower=therower).order_by("date")
|
||||||
|
for target in targets2:
|
||||||
|
if target.rower is not None:
|
||||||
|
target.rowers.add(target.rower)
|
||||||
|
target.rower = None
|
||||||
|
target.save()
|
||||||
|
|
||||||
|
targets = TrainingTarget.objects.filter(rowers=therower).order_by("date")
|
||||||
targetform = TrainingTargetForm()
|
targetform = TrainingTargetForm()
|
||||||
|
|
||||||
plans = TrainingPlan.objects.filter(rower=therower).order_by("-startdate")
|
plans = TrainingPlan.objects.filter(rower=therower).order_by("-startdate")
|
||||||
@@ -16193,7 +16203,7 @@ def rower_create_trainingplan(request,userid=0):
|
|||||||
|
|
||||||
plans = plans | plans2
|
plans = plans | plans2
|
||||||
|
|
||||||
form = TrainingPlanForm(targets=targets)
|
form = TrainingPlanForm(targets=targets,initial={'status':False})
|
||||||
|
|
||||||
breadcrumbs = [
|
breadcrumbs = [
|
||||||
{
|
{
|
||||||
@@ -17022,22 +17032,53 @@ class TrainingTargetUpdate(UpdateView):
|
|||||||
template_name = 'trainingplan_edit.html'
|
template_name = 'trainingplan_edit.html'
|
||||||
form_class = TrainingTargetForm
|
form_class = TrainingTargetForm
|
||||||
|
|
||||||
|
# extra parameters
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(TrainingTargetUpdate, 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('trainingtarget_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)
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
form.instance.user = self.request.user
|
form.instance.user = self.request.user
|
||||||
form.instance.post_date = datetime.datetime.now()
|
form.instance.post_date = datetime.datetime.now()
|
||||||
plan = form.save()
|
target = form.save()
|
||||||
return super(TrainingTargetUpdate, self).form_valid(form)
|
return super(TrainingTargetUpdate, self).form_valid(form)
|
||||||
|
|
||||||
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.rower is not None:
|
||||||
|
obj.rowers.add(obj.rower)
|
||||||
|
obj.rower = None
|
||||||
|
obj.save()
|
||||||
if obj.manager is not None and self.request.user.rower != obj.manager:
|
if obj.manager is not None and self.request.user.rower != obj.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.rower):
|
|
||||||
raise PermissionDenied('You are not allowed to edit this training plan target')
|
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
def allsundays(startdate,enddate):
|
def allsundays(startdate,enddate):
|
||||||
|
|||||||
Reference in New Issue
Block a user