Private
Public Access
1
0

adding async sessions creation, adding link to plan

This commit is contained in:
2024-12-12 18:35:01 +01:00
parent e8c4f836c8
commit 9a7ecfeebc
4 changed files with 87 additions and 30 deletions

View File

@@ -2797,6 +2797,7 @@ class PlannedSession(models.Model):
manager = models.ForeignKey(User, on_delete=models.PROTECT) manager = models.ForeignKey(User, on_delete=models.PROTECT)
rojabo_id = models.BigIntegerField(default=0,blank=True) rojabo_id = models.BigIntegerField(default=0,blank=True)
intervals_icu_id = models.CharField(default=None, blank=True, null=True, max_length=50)
course = models.ForeignKey(GeoCourse, blank=True, null=True, course = models.ForeignKey(GeoCourse, blank=True, null=True,
verbose_name='OTW Course', on_delete=models.SET_NULL) verbose_name='OTW Course', on_delete=models.SET_NULL)
@@ -2875,6 +2876,8 @@ class PlannedSession(models.Model):
garmin_schedule_id = models.BigIntegerField(default=0) garmin_schedule_id = models.BigIntegerField(default=0)
tags = TaggableManager(blank=True) tags = TaggableManager(blank=True)
from_plan = models.ForeignKey(TrainingPlan, on_delete=models.SET_NULL, null=True, blank=True)
def __str__(self): def __str__(self):

View File

@@ -9,7 +9,7 @@ from rowers.models import (
from rowers.tasks import ( from rowers.tasks import (
handle_sendemail_raceregistration, handle_sendemail_racesubmission handle_sendemail_raceregistration, handle_sendemail_racesubmission
) )
from rowers.tasks import handle_check_race_course from rowers.tasks import handle_check_race_course, create_sessions_from_json_async
from iso8601 import ParseError from iso8601 import ParseError
import iso8601 import iso8601
import rowers.courses as courses import rowers.courses as courses
@@ -1068,40 +1068,48 @@ def get_workouts_session(r, ps):
return ws return ws
def create_sessions_from_json(plansteps, rower, startdate, manager, planbyrscore=False): def create_sessions_from_json(plansteps, rower, startdate, manager, planbyrscore=False, plan=None,
asynchronous=False, queue=queue):
trainingdays = plansteps['trainingDays'] trainingdays = plansteps['trainingDays']
planstartdate = startdate planstartdate = startdate
for day in trainingdays: if not asynchronous:
for workout in day['workouts']: for day in trainingdays:
sessionsport = 'water' for workout in day['workouts']:
try: sessionsport = 'water'
sessionsport = mytypes.fitmappinginv[workout['sport'].lower()] try:
except KeyError: sessionsport = mytypes.fitmappinginv[workout['sport'].lower()]
pass except KeyError:
pass
preferreddate = planstartdate+timedelta(days=day['order']) preferreddate = planstartdate+timedelta(days=day['order'])
sessionmode = 'time' sessionmode = 'time'
if planbyrscore: if planbyrscore:
sessionmode = 'rScore' sessionmode = 'rScore'
ps = PlannedSession( ps = PlannedSession(
startdate=preferreddate - startdate=preferreddate -
timedelta(days=preferreddate.weekday()), timedelta(days=preferreddate.weekday()),
enddate=preferreddate + enddate=preferreddate +
timedelta(days=-preferreddate.weekday()-1, weeks=1), timedelta(days=-preferreddate.weekday()-1, weeks=1),
preferreddate=preferreddate, preferreddate=preferreddate,
sessionsport=sessionsport, # change this sessionsport=sessionsport, # change this
name=workout['workoutName'], name=workout['workoutName'],
steps=workout, steps=workout,
manager=manager, manager=manager,
sessionmode=sessionmode, sessionmode=sessionmode,
comment=workout['description'] comment=workout['description'],
) from_plan=plan,
)
ps.save() ps.save()
add_rower_session(rower, ps) add_rower_session(rower, ps)
return
# async version
_ = myqueue(queue, create_sessions_from_json_async, plansteps, rower, startdate, manager, planbyrscore, plan)
def update_plannedsession(ps, cd): def update_plannedsession(ps, cd):

View File

@@ -15,7 +15,7 @@ application = get_wsgi_application()
from rowers.models import ( from rowers.models import (
Workout, GeoPolygon, GeoPoint, GeoCourse, Workout, GeoPolygon, GeoPoint, GeoCourse,
VirtualRaceResult, CourseTestResult, Rower, VirtualRaceResult, CourseTestResult, Rower,
GraphImage GraphImage, Team, PlannedSession
) )
from rowers.session_utils import is_session_complete from rowers.session_utils import is_session_complete
import math import math
@@ -373,6 +373,52 @@ def handle_assignworkouts(workouts, rowers, remove_workout, debug=False, **kwarg
return 1 return 1
@app.task
def create_sessions_from_json_async(plansteps, rower, startdate, manager, planbyrscore, plan, debug=False, **kwargs):
trainingdays = plansteps['trainingDays']
planstartdate = startdate
for day in trainingdays:
for workout in day['workouts']:
sessionsport = 'water'
try:
sessionsport = mytypes.fitmappinginv[workout['sport'].lower()]
except KeyError:
pass
preferreddate = planstartdate+timedelta(days=day['order'])
sessionmode = 'time'
if planbyrscore:
sessionmode = 'rScore'
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=workout,
manager=manager,
sessionmode=sessionmode,
comment=workout['description'],
from_plan=plan,
)
ps.save()
teams = Team.objects.filter(manager=ps.manager)
members = Rower.objects.filter(team__in=teams).distinct()
if rower in members and rower.rowerplan != 'freecoach':
ps.rower.add(rower)
ps.save()
elif ps.manager.rower == rower and rower.rowerplan != 'freecoach':
ps.rower.add(rower)
ps.save()
return 1
@app.task @app.task
def handle_post_workout_api(uploadoptions, debug=False, **kwargs): # pragma: no cover def handle_post_workout_api(uploadoptions, debug=False, **kwargs): # pragma: no cover
session = requests.session() session = requests.session()

View File

@@ -2729,7 +2729,7 @@ def rower_view_instantplan(request, id='', userid=0):
p.save() p.save()
p.rowers.add(r) p.rowers.add(r)
create_sessions_from_json(plansteps, r, startdate, r.user, planbyrscore=byrscore) create_sessions_from_json(plansteps, r, startdate, r.user, planbyrscore=byrscore, plan=p, asynchronous=True)
messages.info(request, 'Your Sessions have been added') messages.info(request, 'Your Sessions have been added')