diff --git a/rowers/integrations/intervals.py b/rowers/integrations/intervals.py
index ce3ae480..5e51049a 100644
--- a/rowers/integrations/intervals.py
+++ b/rowers/integrations/intervals.py
@@ -324,7 +324,10 @@ class IntervalsIntegration(SyncIntegration):
}
# first get the folders - we need the folder id for the next call
- url = self.oauth_data['base_url'] + 'athlete/0/events?category=WORKOUT'
+ oldest = (timezone.now() - timedelta(days=30)).strftime('%Y-%m-%d')
+ newest = (timezone.now() + timedelta(days=30)).strftime('%Y-%m-%d')
+ url = self.oauth_data['base_url'] + 'athlete/0/events' #'?category=WORKOUT'
+ url += '?oldest=' + oldest + '&newest=' + newest
response = requests.get(url, headers=headers)
if response.status_code != 200:
return []
@@ -350,17 +353,20 @@ class IntervalsIntegration(SyncIntegration):
data = response.json()
# get file from athlete/0/events/{id}/downloadfit
- url = self.oauth_data['base_url'] + 'athlete/0/events/' + str(id) + '/downloadfit'
- response = requests.get(url, headers=headers)
- if response.status_code != 200:
- dologging('intervals.icu.log', response.text)
- return 0
+ if data['category'] == 'WORKOUT':
+ url = self.oauth_data['base_url'] + 'athlete/0/events/' + str(id) + '/downloadfit'
+ response = requests.get(url, headers=headers)
+ if response.status_code != 200:
+ dologging('intervals.icu.log', response.text)
+ return 0
- filename = 'media/planned_' + str(id) + '.fit'
- with open(filename, 'wb') as f:
- f.write(response.content)
+ filename = 'planned_' + str(id) + '.fit'
+ filename2 = 'media/planned_' + str(id) + '.fit'
+ with open(filename2, 'wb') as f:
+ f.write(response.content)
+
+ data['fitfile'] = filename
- data['fitfile'] = filename
return data
diff --git a/rowers/models.py b/rowers/models.py
index 51e90d7a..71560594 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -2688,9 +2688,15 @@ class PlannedSessionStep(models.Model):
targettypes = (
("Speed", "Speed"),
+ ("SpeedLap", "SpeedLap"),
("HeartRate", "HeartRate"),
+ ("HeartRateLap", "HeartRateLap"),
("Cadence", "Cadence"),
- ("Power", "Power")
+ ("CadenceLap", "CadenceLap"),
+ ("Power", "Power"),
+ ("PowerLap", "PowerLap"),
+ ("Distance", "Distance"),
+ ("Duration", "Duration"),
)
manager = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
diff --git a/rowers/templates/intervals_list_import.html b/rowers/templates/intervals_list_import.html
index 7ecad750..6f1a8a12 100644
--- a/rowers/templates/intervals_list_import.html
+++ b/rowers/templates/intervals_list_import.html
@@ -17,6 +17,7 @@
| Import |
Date |
+ Name |
Description |
Type |
Training Load |
@@ -29,6 +30,7 @@
{{ session.start_date_local }} |
+ {{ session.name }} |
{{ session.description }} |
{{ session.type }} |
{{ session.icu_training_load }} |
diff --git a/rowers/templates/menu_plan.html b/rowers/templates/menu_plan.html
index 4ff3f5bf..89b67a4e 100644
--- a/rowers/templates/menu_plan.html
+++ b/rowers/templates/menu_plan.html
@@ -71,6 +71,11 @@
Import from Rojabo
+
+
+ Import from Intervals
+
+
Plan Microcycle
diff --git a/rowers/utils.py b/rowers/utils.py
index f403630c..f8f37440 100644
--- a/rowers/utils.py
+++ b/rowers/utils.py
@@ -774,7 +774,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
rscoreperhour = 100.*veloratio
rscore = rscoreperhour*seconds/3600.
- if targettype == 'Power':
+ if targettype in ['Power','PowerLap']:
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0)
@@ -798,7 +798,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
rscore = 100.*(avgpower/ftp)*seconds/3600.
- if targettype == 'Cadence':
+ if targettype in ['Cadence','CadenceLap']:
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0)
@@ -820,7 +820,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
seconds = distance/avgspeed
rscore = 60.*float(seconds)/3600.
- if targettype == 'Speed': # pragma: no cover
+ if targettype in ['Speed', 'SpeedLap']: # pragma: no cover
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0)
@@ -839,7 +839,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
if velomid > 0:
seconds = distance/velomid
- if targettype == 'Power': # pragma: no cover
+ if targettype in ['Power','PowerLap']: # pragma: no cover
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0)
@@ -856,12 +856,20 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
avgpower = targetpower
if valuelow != 0 and valuehigh != 0:
avgpower = (valuelow+valuehigh)/2.
- avgspeed = ftv*(avgpower/ftp)**(1./3.)
+ if avgpower < 10 and avgpower > 0:
+ targetpower = ftp*0.6
+ elif avgpower > 10 and avgpower < 1000:
+ targetpower = avgpower*ftp/100.
+ elif avgpower > 1000:
+ targetpower = avgpower-1000
+
+ avgspeed = ftv*(targetpower/ftp)**(1./3.)
seconds = distance/avgspeed
+
rscore = 100.*(avgpower/ftp)*seconds/3600.
- if targettype == 'Cadence': # pragma: no cover
+ if targettype in ['Cadence','CadenceLap']: # pragma: no cover
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0)
@@ -1189,7 +1197,7 @@ def step_to_string(step, short=False):
except KeyError:
targettype = None
- if targettype == 'HeartRate': # pragma: no cover
+ if targettype in ['HeartRate','HeartRateLap']: # pragma: no cover
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0)
@@ -1207,7 +1215,7 @@ def step_to_string(step, short=False):
l=valuelow - 100,
h=valuehigh - 100,
)
- elif targettype == 'Power': # pragma: no cover
+ elif targettype in ['Power', 'PowerLap']: # pragma: no cover
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0)
@@ -1229,7 +1237,7 @@ def step_to_string(step, short=False):
l=valuelow-1000,
h=valuehigh-1000,
)
- elif targettype == 'Speed': # pragma: no cover
+ elif targettype in ['Speed', 'SpeedLap']: # pragma: no cover
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
@@ -1264,7 +1272,7 @@ def step_to_string(step, short=False):
pl=pacestringlow,
ph=pacestringhigh,
)
- elif targettype == 'Cadence': # pragma: no cover
+ elif targettype in ['Cadence','CadenceLap']: # pragma: no cover
value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0)
diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py
index f4eec10b..63e49742 100644
--- a/rowers/views/importviews.py
+++ b/rowers/views/importviews.py
@@ -703,10 +703,20 @@ def plannedsession_intervalsimport_view(request, message="", userid=0):
sessionids = [id for id in tdict['session']]
for sessionid in sessionids:
sessiondata = integration.get_plannedsession(sessionid)
+ if sessiondata['description'] is None:
+ sessiondata['description'] = ''
if sessiondata:
+ timetarget = sessiondata['time_target']
+ if timetarget is None:
+ timetarget = sessiondata['moving_time']
+ if timetarget is None:
+ timetarget = 3600
+ timetarget = int(timetarget)/60.
ps = PlannedSession(
name=sessiondata['name'],
comment=sessiondata['description'],
+ sessionmode='time',
+ sessionvalue=timetarget,
startdate=arrow.get(sessiondata['start_date_local']).datetime,
enddate=arrow.get(sessiondata['end_date_local']).datetime,
preferreddate=arrow.get(sessiondata['start_date_local']).datetime,
@@ -714,11 +724,18 @@ def plannedsession_intervalsimport_view(request, message="", userid=0):
sessiontype='session',
intervals_icu_id=sessiondata['id'],
manager=request.user,
- fitfile=sessiondata['fitfile'],
)
ps.save()
ps.rower.add(r)
- ps.update_steps()
+ if sessiondata['category'].lower() == 'workout':
+ ps.fitfile = sessiondata['fitfile']
+ ps.save()
+ ps.update_steps()
+ if sessiondata['category'].lower() == 'target':
+ ps.sessiontype = 'cycletarget'
+ ps.sessionvalue = int(sessiondata['time_target'])/60.
+ ps.enddate = ps.startdate + datetime.timedelta(days=6)
+ ps.save()
url = reverse('plannedsessions_view')
return HttpResponseRedirect(url)