diff --git a/rowers/models.py b/rowers/models.py index 14aec8d2..93a1e9cd 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -945,6 +945,7 @@ class TrainingTarget(models.Model): def __unicode__(self): date = self.date name = self.name + id = self.pk try: ownerfirst = self.manager.user.first_name ownerlast = self.manager.user.last_name @@ -952,11 +953,12 @@ class TrainingTarget(models.Model): ownerfirst = '' ownerlast = '' - stri = u'{ownerfirst} {ownerlast} {d} {n}'.format( + stri = u'#{id}: {n} {d} {ownerfirst} {ownerlast}'.format( ownerfirst = ownerfirst, ownerlast = ownerlast, d = date.strftime('%Y-%m-%d'), - n = name + n = name, + id = id, ) return stri @@ -1099,6 +1101,12 @@ class TrainingPlanForm(ModelForm): targetchoices = [(x.id,x) for x in targets] targetchoices.append((None,'---')) self.fields['target'].choices = targetchoices + elif self.instance.pk is not None: + self.fields['target'].queryset = TrainingTarget.objects.filter( + manager=self.instance.manager, + date__gte=datetime.date.today()).order_by("date") + else: + self.fields.pop('target') try: teams = Team.objects.filter(manager=self.instance.manager.user) diff --git a/rowers/tasks.py b/rowers/tasks.py index 653c5513..fbe58f3f 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -580,19 +580,31 @@ def handle_calctrimp(id, df = rowdata.df df['deltat'] = df[' ElapsedTime (sec)'].diff().abs() - duration = df['TimeStamp (sec)'].max()-df['TimeStamp (sec)'].min() - df[' Power (watts)'] = df[' Power (watts)'].abs() + df2 = df.copy() - df['pwr4'] = df[' Power (watts)']**(4.0) - pwr4mean = wavg(df,'pwr4','deltat') - pwrmean = wavg(df,' Power (watts)','deltat') + df2['time'] = df2[' ElapsedTime (sec)'] + df2['time'] = df2['time'].apply( + lambda x:timedelta(seconds=x) + ) + + duration = df['TimeStamp (sec)'].max()-df['TimeStamp (sec)'].min() + df2 = df2.resample('1s',on='time').mean() + df2.fillna(method='ffill',inplace=True) + df2 = df2.rolling(30).mean() + + df2[' Power (watts)'] = df2[' Power (watts)'].abs() + + df2['pwr4'] = df2[' Power (watts)']**(4.0) + # pwr4mean = wavg(df,'pwr4','deltat') + pwr4mean = df2['pwr4'].mean() + pwrmean = df2[' Power (watts)'].mean() + # pwrmean = wavg(df,' Power (watts)','deltat') if pwr4mean > 0: normp = (pwr4mean)**(0.25) else: normp = pwrmean - - intensityfactor = pwrmean/float(ftp) + intensityfactor = normp/float(ftp) tss = 100.*((duration*normp*intensityfactor)/(3600.*ftp)) diff --git a/rowers/templates/trainingplan.html b/rowers/templates/trainingplan.html index 1d29b18e..8e2e57d0 100644 --- a/rowers/templates/trainingplan.html +++ b/rowers/templates/trainingplan.html @@ -70,6 +70,13 @@ {{ macrocycle.0.name }} ({{ macrocycle.0.startdate }} - {{ macrocycle.0.enddate }}) + {% if macrocycle.0.notes %} + + + {{ macrocycle.0.notes|linebreaks }} + + + {% endif %} {% if macrocycle.0.type == 'userdefined' and macrocycle.0.plan.status %} @@ -180,6 +187,13 @@ Meso {{ mesocycle.0.name }} ({{ mesocycle.0.startdate }} - {{ mesocycle.0.enddate }}) + {% if mesocycle.0.notes %} + + + {{ mesocycle.0.notes|linebreaks }} + + + {% endif %} {% if mesocycle.0.type == 'userdefined' and mesocycle.0.plan.plan.status %} @@ -299,6 +313,13 @@ Micro {{ microcycle.name }} ({{ microcycle.startdate }} - {{ microcycle.enddate }}) + {% if microcycle.notes %} + + + {{ microcycle.notes|linebreaks }} + + + {% endif %} {% if microcycle.plan.plan.plan.status %} diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index 1707661d..7f4334eb 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -397,9 +397,12 @@ def timeurl(path,timestring): @register.filter def trainingplans(rower): + today = datetime.date.today() plans = TrainingPlan.objects.filter( rowers=rower, - status=True).order_by("-startdate") + status=True, + startdate__lte=today, + enddate__gte=today).order_by("-startdate") return plans diff --git a/rowers/urls.py b/rowers/urls.py index 489b093f..0807ffef 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -170,7 +170,7 @@ urlpatterns = [ url(r'^team-compare-select/workout/(?P\d+)/user/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/team/(?P\d+)/user/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/workout/(?P\d+)/$',views.team_comparison_select), - url(r'^team-compare-select/team/(?P\d+)$',views.team_comparison_select), + url(r'^team-compare-select/team/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/$',views.team_comparison_select), url(r'^workouts-join-select/team/(?P\d+)/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)$',views.workouts_join_select), url(r'^workouts-join$',views.workouts_join_view), diff --git a/rowers/views.py b/rowers/views.py index 96d76a03..f5077146 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -16188,7 +16188,10 @@ def rower_create_trainingplan(request,userid=0): p.rowers.add(therower) - targets = TrainingTarget.objects.filter(rowers=therower).order_by("date") + targets = TrainingTarget.objects.filter( + rowers=therower, + date__gte=datetime.date.today(), + ).order_by("date") targetform = TrainingTargetForm() plans = TrainingPlan.objects.filter(rowers=therower).order_by("-startdate") @@ -17008,6 +17011,8 @@ class TrainingPlanUpdate(UpdateView): obj = super(TrainingPlanUpdate, self).get_object(*args, **kwargs) 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') + if obj.manager.rowerplan not in ['coach','plan']: + raise PermissionDenied('You are not allowed to edit this training plan') return obj