Private
Public Access
1
0

adding poll for next week sessions

This commit is contained in:
2025-07-20 16:15:15 +02:00
parent 5b6e87fedd
commit 01d4cf659e
8 changed files with 253 additions and 2 deletions

View File

@@ -18,6 +18,7 @@ from rowers.models import (
GraphImage, Team, PlannedSession
)
from rowers.session_utils import is_session_complete
import math
from rowers.courseutils import (
coursetime_paths, coursetime_first, time_in_path,
@@ -333,6 +334,106 @@ def summaryfromsplitdata(splitdata, data, filename, sep='|', workouttype='rower'
return sums, sa, results
from rowers.utils import intensitymap
def strcapitalize(s):
if s is None:
return None
if isinstance(s, str):
return s[0].upper() + s[1:]
return s
def correct_intensity(workout):
# reads the steps and if the intensity is an integer, converts it to a string
steps = workout['steps']
for step in steps:
if 'intensity' in step:
if isinstance(step['intensity'], int):
step['intensity'] = intensitymap[step['intensity']]
step['durationType'] = strcapitalize(step['durationType'])
step['targetType'] = strcapitalize(step['targetType'])
step['intensity'] = strcapitalize(step['intensity'])
return workout
@app.task
def handle_loadnextweek(rower, debug=False, **kwargs):
plan = rower.training_plan_code
secret = rower.training_plan_secret
post_data = {
'fitness': rower.actualfit,
'fatigue': rower.actualfatigue,
'plan': plan,
'secret': secret,
}
url = "http://localhost:8898/next-week-plan/"
response = requests.post(url, data=post_data)
if response.status_code in [200, 201]:
data = response.json()
today = timezone.now()
startdate = today - timedelta(days=today.weekday())+timezone.timedelta(days=7)
enddate = startdate + timedelta(days=6)
sps = PlannedSession.objects.filter(
rower__in=[rower],
startdate__gte=startdate,
enddate__lte=enddate,
is_template=False,
)
for ps in sps:
ps.delete()
trainingdays = data['cycles']
# start date is the first day of the following week
ndays = 0
for day in trainingdays:
try:
workouts = day[0][1:]
except IndexError:
workouts =[]
for workout in workouts:
sessionsport = 'water'
try:
sessionsport = mytypes.fitmappinginv[workout['sport'].lower()]
except KeyError:
pass
preferreddate = startdate+timedelta(days=ndays)
sessionmode = 'time'
ps = PlannedSession(
startdate=preferreddate - timedelta(days=preferreddate.weekday()),
enddate=preferreddate + timedelta(days=-preferreddate.weekday()-1, weeks=1),
preferreddate=preferreddate,
sessionsport=sessionsport, # change this
name=workout['workoutName'],
steps=correct_intensity(workout),
manager=rower.user,
sessionmode=sessionmode,
comment=workout['description'],
from_plan=None,
)
ps.save()
ps.rower.add(rower)
ps.save()
if ps.fitfile:
ps.steps = {}
ps.save()
ndays += 1
return 1
return 0
@app.task
def handle_assignworkouts(workouts, rowers, remove_workout, debug=False, **kwargs):
for workout in workouts: