diff --git a/rowers/models.py b/rowers/models.py index de1946fa..c2cd5004 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -934,7 +934,9 @@ def a_week_from_now(): # models related to training planning - draft # Do we need a separate class TestTarget? 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) name = models.CharField(max_length=150,blank=True) date = models.DateField( @@ -944,8 +946,12 @@ class TrainingTarget(models.Model): def __unicode__(self): date = self.date name = self.name - ownerfirst = self.rower.user.first_name - ownerlast = self.rower.user.last_name + try: + ownerfirst = self.manager.user.first_name + ownerlast = self.manager.user.last_name + except AttributeError: + ownerfirst = '' + ownerlast = '' stri = u'{ownerfirst} {ownerlast} {d} {n}'.format( ownerfirst = ownerfirst, @@ -959,12 +965,24 @@ class TrainingTarget(models.Model): class TrainingTargetForm(ModelForm): class Meta: model = TrainingTarget - fields = ['name','date','notes'] + fields = ['name','date','notes','rowers'] widgets = { '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 #class TrainingGoal(models.Model): @@ -991,10 +1009,11 @@ class TrainingPlan(models.Model): # rower field is obsolete. Use rowers 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) 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) startdate = models.DateField(default=timezone.now) enddate = models.DateField( @@ -1024,16 +1043,23 @@ class TrainingPlan(models.Model): self.startdate = enddate self.enddate = startdate - if self.status == 'active': + if self.status: otherplans = TrainingPlan.objects.filter( - rower=self.rower, - status='active').exclude(pk=self.pk).order_by("-startdate") + status=True).exclude( + pk=self.pk).order_by( + "-startdate") for otherplan in otherplans: 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: - 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: super(TrainingPlan,self).save(*args, **kwargs) @@ -1061,7 +1087,7 @@ class TrainingPlan(models.Model): class TrainingPlanForm(ModelForm): class Meta: model = TrainingPlan - fields = ['name','target','startdate','enddate','status'] + fields = ['name','target','startdate','enddate','status','rowers'] widgets = { 'startdate': AdminDateWidget(), @@ -1076,8 +1102,16 @@ class TrainingPlanForm(ModelForm): targetchoices = [(x.id,x) for x in targets] targetchoices.append((None,'---')) 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 = ( ('filler','System Defined'), ('userdefined','User Defined') diff --git a/rowers/templates/trainingplan_create.html b/rowers/templates/trainingplan_create.html index 013ada82..2ec6d3d1 100644 --- a/rowers/templates/trainingplan_create.html +++ b/rowers/templates/trainingplan_create.html @@ -71,7 +71,7 @@