adding async sessions creation, adding link to plan
This commit is contained in:
@@ -2797,6 +2797,7 @@ class PlannedSession(models.Model):
|
||||
|
||||
manager = models.ForeignKey(User, on_delete=models.PROTECT)
|
||||
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,
|
||||
verbose_name='OTW Course', on_delete=models.SET_NULL)
|
||||
|
||||
@@ -2876,6 +2877,8 @@ class PlannedSession(models.Model):
|
||||
|
||||
tags = TaggableManager(blank=True)
|
||||
|
||||
from_plan = models.ForeignKey(TrainingPlan, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
|
||||
name = self.name
|
||||
|
||||
@@ -9,7 +9,7 @@ from rowers.models import (
|
||||
from rowers.tasks import (
|
||||
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
|
||||
import iso8601
|
||||
import rowers.courses as courses
|
||||
@@ -1068,40 +1068,48 @@ def get_workouts_session(r, ps):
|
||||
|
||||
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']
|
||||
planstartdate = startdate
|
||||
for day in trainingdays:
|
||||
for workout in day['workouts']:
|
||||
sessionsport = 'water'
|
||||
try:
|
||||
sessionsport = mytypes.fitmappinginv[workout['sport'].lower()]
|
||||
except KeyError:
|
||||
pass
|
||||
if not asynchronous:
|
||||
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'])
|
||||
preferreddate = planstartdate+timedelta(days=day['order'])
|
||||
|
||||
sessionmode = 'time'
|
||||
if planbyrscore:
|
||||
sessionmode = 'rScore'
|
||||
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']
|
||||
)
|
||||
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()
|
||||
ps.save()
|
||||
|
||||
add_rower_session(rower, ps)
|
||||
return
|
||||
|
||||
# async version
|
||||
_ = myqueue(queue, create_sessions_from_json_async, plansteps, rower, startdate, manager, planbyrscore, plan)
|
||||
|
||||
add_rower_session(rower, ps)
|
||||
|
||||
|
||||
def update_plannedsession(ps, cd):
|
||||
|
||||
@@ -15,7 +15,7 @@ application = get_wsgi_application()
|
||||
from rowers.models import (
|
||||
Workout, GeoPolygon, GeoPoint, GeoCourse,
|
||||
VirtualRaceResult, CourseTestResult, Rower,
|
||||
GraphImage
|
||||
GraphImage, Team, PlannedSession
|
||||
)
|
||||
from rowers.session_utils import is_session_complete
|
||||
import math
|
||||
@@ -373,6 +373,52 @@ def handle_assignworkouts(workouts, rowers, remove_workout, debug=False, **kwarg
|
||||
|
||||
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
|
||||
def handle_post_workout_api(uploadoptions, debug=False, **kwargs): # pragma: no cover
|
||||
session = requests.session()
|
||||
|
||||
@@ -2729,7 +2729,7 @@ def rower_view_instantplan(request, id='', userid=0):
|
||||
p.save()
|
||||
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')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user