Private
Public Access
1
0

instant plans proto page

attached workout notification using encoded workout id
This commit is contained in:
Sander Roosendaal
2021-03-10 06:35:15 +01:00
parent b6ef3a8072
commit b18d04e088
5 changed files with 77 additions and 2 deletions

View File

@@ -184,7 +184,7 @@ ratelim==0.1.6
redis==3.5.3 redis==3.5.3
requests==2.23.0 requests==2.23.0
requests-oauthlib==1.2.0 requests-oauthlib==1.2.0
rowingdata==3.1.8 rowingdata==3.2.7
rowingphysics==0.5.0 rowingphysics==0.5.0
rq==0.13.0 rq==0.13.0
rules==2.1 rules==2.1

View File

@@ -30,6 +30,8 @@ import pandas as pd
from rowingdata import rowingdata as rrdata from rowingdata import rowingdata as rrdata
from rowingdata import rower as rrower from rowingdata import rower as rrower
from rowers.opaque import encoder
def to_pace(pace): def to_pace(pace):
minutes, seconds = divmod(pace,60) minutes, seconds = divmod(pace,60)
seconds, rest = divmod(seconds, 1) seconds, rest = divmod(seconds, 1)
@@ -455,7 +457,7 @@ def add_workouts_plannedsession(ws,ps,r):
w.plannedsession = ps w.plannedsession = ps
w.save() w.save()
result += 1 result += 1
comments.append('Attached workout %i to session' % w.id) comments.append('Attached workout %s to session' % encoder.encode_hex(w.id))
if ps.sessiontype == 'coursetest': if ps.sessiontype == 'coursetest':
record = CourseTestResult( record = CourseTestResult(
userid=w.user.id, userid=w.user.id,

View File

@@ -0,0 +1,24 @@
{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Rowsandall Training Plans{% endblock %}
{% block main %}
<h1>Training Plans</h1>
<ul class="main-content">
{% for plan in trainingdict %}
<li>
<p><a href="/rowers/plans/{{ plan.ID }}">{{ plan.name }}</a></p>
<p>{{ plan.plan|lookup:"duration"}}</p>
</li>
{% endfor %}
</ul>
{% endblock %}
{% block sidebar %}
{% include 'menu_plan.html' %}
{% endblock %}

View File

@@ -740,6 +740,7 @@ urlpatterns = [
re_path(r'^test\_callback',views.rower_process_testcallback,name='rower_process_testcallback'), re_path(r'^test\_callback',views.rower_process_testcallback,name='rower_process_testcallback'),
re_path(r'^createplan/$',views.rower_create_trainingplan,name='rower_create_trainingplan'), re_path(r'^createplan/$',views.rower_create_trainingplan,name='rower_create_trainingplan'),
re_path(r'^createplan/user/(?P<id>\d+)/$',views.rower_create_trainingplan,name='rower_create_trainingplan'), re_path(r'^createplan/user/(?P<id>\d+)/$',views.rower_create_trainingplan,name='rower_create_trainingplan'),
re_path(r'^plans/$', views.rower_select_instantplan, name='rower_select_instantplan'),
re_path(r'^deleteplan/(?P<pk>\d+)/$',login_required( re_path(r'^deleteplan/(?P<pk>\d+)/$',login_required(
views.TrainingPlanDelete.as_view()),name='trainingplan_delete_view'), views.TrainingPlanDelete.as_view()),name='trainingplan_delete_view'),
re_path(r'^deletemicrocycle/(?P<pk>\d+)/$',login_required( re_path(r'^deletemicrocycle/(?P<pk>\d+)/$',login_required(

View File

@@ -2425,6 +2425,54 @@ class PlannedSessionDelete(DeleteView):
return obj return obj
@user_passes_test(can_plan,login_url="/rowers/paidplans",
message="This functionality requires a Coach or Self-Coach plan",
redirect_field_name=None)
def rower_select_instantplan(request,id=0):
r = getrequestrower(request,userid=id)
themanager = getrower(request.user)
# get and present available plans
authorizationstring = 'Bearer '+settings.WORKOUTS_FIT_TOKEN
url = settings.WORKOUTS_FIT_URL+"/trainingplan/"
headers = {'Authorization':authorizationstring}
trainingdict = {}
response = requests.get(url=url, headers=headers)
if response.status_code != 200:
messages.error(request,"Could not connect to the training plan server")
else:
trainingdict = response.json()['plans']
for plan in trainingdict:
print(plan['ID'],plan['name'],plan['plan']['duration'])
breadcrumbs = [
{
'url':reverse('plannedsessions_view'),
'name': 'Sessions'
},
{
'url':reverse(rower_create_trainingplan,
kwargs={'id':id}),
'name': 'Manage Plans and Targets'
},
{
'url':reverse('rower_select_instantplan'),
'name': 'Select Existing Plans'
}
]
return render(request,
'instantplans.html',
{
'rower':r,
'active':'nav-plan',
'trainingdict':trainingdict,
})
@user_passes_test(can_plan,login_url="/rowers/paidplans", @user_passes_test(can_plan,login_url="/rowers/paidplans",
message="This functionality requires a Coach or Self-Coach plan", message="This functionality requires a Coach or Self-Coach plan",