Merge branch 'release/v8.48'
This commit is contained in:
+43
-17
@@ -219,14 +219,25 @@ def get_session_metrics(ps):
|
|||||||
|
|
||||||
return thedict
|
return thedict
|
||||||
|
|
||||||
|
cratiocolors = {
|
||||||
|
'better than nothing': "lightgreen",
|
||||||
|
'partial': "mediumgreen",
|
||||||
|
'on target': "green",
|
||||||
|
'over target': "purple",
|
||||||
|
'way over target': "violet",
|
||||||
|
'missed': "black",
|
||||||
|
'not assigned': "",
|
||||||
|
'not done': "white",
|
||||||
|
}
|
||||||
|
|
||||||
def is_session_complete_ws(ws,ps):
|
def is_session_complete_ws(ws,ps):
|
||||||
ws = ws.order_by("date")
|
ws = ws.order_by("date")
|
||||||
if len(ws)==0:
|
if len(ws)==0:
|
||||||
today = date.today()
|
today = date.today()
|
||||||
if today > ps.enddate:
|
if today > ps.enddate:
|
||||||
status = 'missed'
|
verdict = 'missed'
|
||||||
ratio = 0
|
ratio = 0
|
||||||
return ratio,status,None
|
return ratio,verdict,None
|
||||||
else:
|
else:
|
||||||
return 0,'not done',None
|
return 0,'not done',None
|
||||||
|
|
||||||
@@ -238,11 +249,23 @@ def is_session_complete_ws(ws,ps):
|
|||||||
|
|
||||||
cratiomin = 1
|
cratiomin = 1
|
||||||
cratiomax = 1
|
cratiomax = 1
|
||||||
|
|
||||||
|
cratios = {
|
||||||
|
'better than nothing':0,
|
||||||
|
'partial':0.6,
|
||||||
|
'on target':0.8,
|
||||||
|
'over target':1.2,
|
||||||
|
'way over target': 1.5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if ps.criterium == 'none':
|
if ps.criterium == 'none':
|
||||||
if ps.sessiontype == 'session':
|
if ps.sessiontype == 'session':
|
||||||
cratiomin = 0.8
|
cratiomin = 0.8
|
||||||
cratiomax = 1.2
|
cratiomax = 1.2
|
||||||
else:
|
else:
|
||||||
|
cratios['on target'] = 0.9167
|
||||||
|
cratios['over target'] = 1.0833
|
||||||
cratiomin = 0.9167
|
cratiomin = 0.9167
|
||||||
cratiomax = 1.0833
|
cratiomax = 1.0833
|
||||||
|
|
||||||
@@ -271,44 +294,47 @@ def is_session_complete_ws(ws,ps):
|
|||||||
|
|
||||||
ratio = score/float(value)
|
ratio = score/float(value)
|
||||||
|
|
||||||
status = 'partial'
|
verdict = 'better than nothing'
|
||||||
|
|
||||||
if ps.sessiontype in ['session','cycletarget']:
|
if ps.sessiontype in ['session','cycletarget']:
|
||||||
if ps.criterium == 'exact':
|
if ps.criterium == 'exact':
|
||||||
if ratio == 1.0:
|
if ratio == 1.0:
|
||||||
return ratio,'completed',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
if not completiondate:
|
if not completiondate:
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
elif ps.criterium == 'minimum':
|
elif ps.criterium == 'minimum':
|
||||||
if ratio >= 1.0:
|
if ratio >= 1.0:
|
||||||
return ratio,'completed',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
if not completiondate:
|
if not completiondate:
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
|
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
else:
|
else:
|
||||||
if ratio>cratiomin and ratio<cratiomax:
|
thevalue = 0
|
||||||
return ratio,'completed',completiondate
|
for key,value in cratios.iteritems():
|
||||||
else:
|
if ratio>value and value>thevalue:
|
||||||
completiondate = ws.reverse()[0].date
|
verdict = key
|
||||||
return ratio,'partial',completiondate
|
thevalue = value
|
||||||
|
|
||||||
|
completiondate = ws.reverse()[0].date
|
||||||
|
return ratio,verdict,completiondate
|
||||||
elif ps.sessiontype == 'test':
|
elif ps.sessiontype == 'test':
|
||||||
if ratio==1.0:
|
if ratio==1.0:
|
||||||
return ratio,'completed',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
elif ps.sessiontype == 'challenge':
|
elif ps.sessiontype == 'challenge':
|
||||||
if ps.criterium == 'exact':
|
if ps.criterium == 'exact':
|
||||||
if ratio == 1.0:
|
if ratio == 1.0:
|
||||||
return ratio,'completed',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
elif ps.criterium == 'minimum':
|
elif ps.criterium == 'minimum':
|
||||||
if ratio > 1.0:
|
if ratio > 1.0:
|
||||||
return ratio,'completed',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
if not completiondate:
|
if not completiondate:
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
@@ -324,7 +350,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
if record.workoutid in wids:
|
if record.workoutid in wids:
|
||||||
if record.coursecompleted:
|
if record.coursecompleted:
|
||||||
ratio = record.distance/ps.sessionvalue
|
ratio = record.distance/ps.sessionvalue
|
||||||
return ratio,'completed',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
ratio = record.distance/ps.sessionvalue
|
ratio = record.distance/ps.sessionvalue
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
@@ -336,7 +362,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
if record.workoutid in wids:
|
if record.workoutid in wids:
|
||||||
if record.coursecompleted:
|
if record.coursecompleted:
|
||||||
ratio = record.distance/float(ps.sessionvalue)
|
ratio = record.distance/float(ps.sessionvalue)
|
||||||
return ratio,'completed',completiondate
|
return ratio,'on target',completiondate
|
||||||
else:
|
else:
|
||||||
ratio = record.distance/float(ps.sessionvalue)
|
ratio = record.distance/float(ps.sessionvalue)
|
||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
@@ -361,11 +387,11 @@ def is_session_complete_ws(ws,ps):
|
|||||||
else:
|
else:
|
||||||
if not completiondate:
|
if not completiondate:
|
||||||
completiondate = ws.reverse()[0].date
|
completiondate = ws.reverse()[0].date
|
||||||
return ratio,status,completiondate
|
return ratio,verdict,completiondate
|
||||||
|
|
||||||
|
|
||||||
def is_session_complete(r,ps):
|
def is_session_complete(r,ps):
|
||||||
status = 'not done'
|
verdict = 'not done'
|
||||||
|
|
||||||
|
|
||||||
if r not in ps.rower.all():
|
if r not in ps.rower.all():
|
||||||
|
|||||||
+14
-2
@@ -248,7 +248,7 @@ def get_workout(user,stravaid):
|
|||||||
velojson = get_strava_stream(r,'velocity_smooth',stravaid)
|
velojson = get_strava_stream(r,'velocity_smooth',stravaid)
|
||||||
distancejson = get_strava_stream(r,'distance',stravaid)
|
distancejson = get_strava_stream(r,'distance',stravaid)
|
||||||
latlongjson = get_strava_stream(r,'latlng',stravaid)
|
latlongjson = get_strava_stream(r,'latlng',stravaid)
|
||||||
|
powerjson = get_strava_stream(r,'power',stravaid)
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -269,6 +269,11 @@ def get_workout(user,stravaid):
|
|||||||
except:
|
except:
|
||||||
spm = np.zeros(nr_rows)
|
spm = np.zeros(nr_rows)
|
||||||
|
|
||||||
|
try:
|
||||||
|
power = np.array(powerjson.json()[1]['data'])
|
||||||
|
except IndexError:
|
||||||
|
power = np.zeros(nr_rows)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
hr = np.array(hrjson.json()[1]['data'])
|
hr = np.array(hrjson.json()[1]['data'])
|
||||||
except IndexError:
|
except IndexError:
|
||||||
@@ -315,6 +320,7 @@ def get_workout(user,stravaid):
|
|||||||
'hr':hr,
|
'hr':hr,
|
||||||
'lat':lat,
|
'lat':lat,
|
||||||
'lon':lon,
|
'lon':lon,
|
||||||
|
'power':power,
|
||||||
'strokelength':strokelength,
|
'strokelength':strokelength,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -494,7 +500,13 @@ def add_workout_from_data(user,importid,data,strokedata,
|
|||||||
|
|
||||||
velo = 500./pace
|
velo = 500./pace
|
||||||
|
|
||||||
power = 2.8*velo**3
|
try:
|
||||||
|
power = strokedata.ix[:,'power']
|
||||||
|
except KeyError:
|
||||||
|
power = 2.8*velo**3
|
||||||
|
|
||||||
|
#if power.std() == 0 and power.mean() == 0:
|
||||||
|
# power = 2.8*velo**3
|
||||||
|
|
||||||
# save csv
|
# save csv
|
||||||
# Create data frame with all necessary data to write to csv
|
# Create data frame with all necessary data to write to csv
|
||||||
|
|||||||
@@ -46,35 +46,16 @@
|
|||||||
{% for ps in plannedsessions %}
|
{% for ps in plannedsessions %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{% if completeness|lookup:ps.id == 'not done' %}
|
|
||||||
{% if ps.sessiontype != 'race' %}
|
{% if ps.sessiontype != 'race' %}
|
||||||
<a class="white dot"
|
<a class="{{ sessioncolor|lookup:ps.id }} dot"
|
||||||
|
title="{{ completeness|lookup:ps.id }}"
|
||||||
href="/rowers/sessions/manage/session/{{ ps.id }}/user/{{ rower.user.id }}/?when={{ timeperiod }}">
|
href="/rowers/sessions/manage/session/{{ ps.id }}/user/{{ rower.user.id }}/?when={{ timeperiod }}">
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a class="white dot" href="/rowers/virtualevent/{{ ps.id }}/submit"> </a>
|
<a
|
||||||
{% endif %}
|
class="{{ sessioncolor|lookup:ps.id }} dot"
|
||||||
{% elif completeness|lookup:ps.id == 'completed' %}
|
title="{{ completeness|lookup:ps.id }}"
|
||||||
{% if ps.sessiontype != 'race' %}
|
href="/rowers/virtualevent/{{ ps.id }}/submit"> </a>
|
||||||
<a class="green dot"
|
|
||||||
href="/rowers/sessions/manage/session/{{ ps.id }}/user/{{ rower.user.id }}/?when={{ timeperiod }}"> </a>
|
|
||||||
{% else %}
|
|
||||||
<a class="green dot" href="/rowers/virtualevent/{{ ps.id }}/submit"> </a>
|
|
||||||
{% endif %}
|
|
||||||
{% elif completeness|lookup:ps.id == 'partial' %}
|
|
||||||
{% if ps.sessiontype != 'race' %}
|
|
||||||
<a class="orange dot"
|
|
||||||
href="/rowers/sessions/manage/session/{{ ps.id }}/user/{{ rower.user.id }}?when={{ timeperiod }}"> </a>
|
|
||||||
{% else %}
|
|
||||||
<a class="orange dot" href="/rowers/virtualevent/{{ ps.id }}/submit"> </a>
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
{% if ps.sessiontype != 'race' %}
|
|
||||||
<a class="red dot"
|
|
||||||
href="/rowers/sessions/manage/session/{{ ps.id }}/user/{{ rower.user.id }}?when={{ timeperiod }}"> </a>
|
|
||||||
{% else %}
|
|
||||||
<a class="red dot" href="/rowers/virtualevent/{{ ps.id }}/submit"> </a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td> {{ ps.startdate|date:"Y-m-d" }} </td>
|
<td> {{ ps.startdate|date:"Y-m-d" }} </td>
|
||||||
@@ -111,7 +92,7 @@
|
|||||||
<td> {{ ps.sessionvalue }} </td>
|
<td> {{ ps.sessionvalue }} </td>
|
||||||
<td> {{ actualvalue|lookup:ps.id }}</td>
|
<td> {{ actualvalue|lookup:ps.id }}</td>
|
||||||
<td> {{ ps.sessionunit }} </td>
|
<td> {{ ps.sessionunit }} </td>
|
||||||
{% if completeness|lookup:ps.id == 'partial' %}
|
{% if completeness|lookup:ps.id != 'on target' %}
|
||||||
<td style="color:darkgray"><em> {{ completiondate|lookup:ps.id|date:"Y-m-d" }}</em></td>
|
<td style="color:darkgray"><em> {{ completiondate|lookup:ps.id|date:"Y-m-d" }}</em></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td> {{ completiondate|lookup:ps.id|date:"Y-m-d" }}</td>
|
<td> {{ completiondate|lookup:ps.id|date:"Y-m-d" }}</td>
|
||||||
|
|||||||
@@ -58,20 +58,12 @@
|
|||||||
</td>
|
</td>
|
||||||
{% for r in rowers %}
|
{% for r in rowers %}
|
||||||
<td>
|
<td>
|
||||||
{% if thedict|lookup:'results'|lookup:r.id == 'completed' %}
|
{% if thedict|lookup:'results'|lookup:r.id != 'not assigned' %}
|
||||||
<a class="green dot"
|
<a class="{{ thedict|lookup:'color'|lookup:r.id }} dot"
|
||||||
|
title="{{ thedict|lookup:'results'|lookup:r.id }}"
|
||||||
href="{% url 'plannedsession_view' id=thedict|lookup:"id" userid=r.user.id %}"> </a>
|
href="{% url 'plannedsession_view' id=thedict|lookup:"id" userid=r.user.id %}"> </a>
|
||||||
{% elif thedict|lookup:'results'|lookup:r.id == 'partial' %}
|
|
||||||
<a class="orange dot"
|
|
||||||
href="{% url 'plannedsession_view' id=thedict|lookup:"id" userid=r.user.id %}"> </a>
|
|
||||||
{% elif thedict|lookup:'results'|lookup:r.id == 'not done' %}
|
|
||||||
<a class="white dot"
|
|
||||||
href="/rowers/sessions/manage/session/{{ thedict|lookup:"id" }}/user/{{ r.user.id }}/?when={{ timeperiod }}"> </a>
|
|
||||||
{% elif thedict|lookup:'results'|lookup:r.id == 'not assigned' %}
|
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<a class="red dot"
|
|
||||||
href="/rowers/sessions/manage/session/{{ thedict|lookup:"id" }}/user/{{ r.user.id }}/?when={{ timeperiod }}"> </a>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -25,8 +25,16 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="grid_2">
|
<li class="grid_2">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Team Type: A private team is invisible on the Teams Management page, except for its members. The only way to add members is for the manager to send an invitation. An open team is visible for all rowsandall.com users. In addition to the invitation mechanism, any user can request to be added to this team. The team manager will always have to approve membership.</li>
|
<li>Team Type: A private team is invisible on the Teams Management page,
|
||||||
<li>Sharing Behavior: When set to "All Members", all members of a team will see each other's workouts. This is the recommended setting. If te sharing bhavior is set to "Coach Only", team members only see their own workouts. The coach sees all team members' workouts.</li>
|
except for its members. The only way to add members is for the manager
|
||||||
|
to send an invitation. An open team is visible for all rowsandall.com users.
|
||||||
|
In addition to the invitation mechanism, any user can request to be added to
|
||||||
|
this team. The team manager will always have to approve membership.</li>
|
||||||
|
<li>Sharing Behavior: When set to "All Members", all members of a team will
|
||||||
|
see each other's workouts and planned sessions. This is the recommended
|
||||||
|
setting. If te sharing behavior is set to "Coach Only", team members
|
||||||
|
only see their own workouts and planned sessions.
|
||||||
|
The coach sees all team members' workouts.</li>
|
||||||
<li>These settings can be changed at any point in time through the Team Edit page
|
<li>These settings can be changed at any point in time through the Team Edit page
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
[{"data": [0, 0, 0, 0, 0, 0, 0, 0, 51, 53, 54, 56, 58, 60, 63, 65, 67, 69, 71, 73, 76, 78, 80, 82, 85, 87, 89, 91, 94, 96, 98, 100, 102, 105, 107, 109, 111, 113, 116, 118, 120, 122, 125, 127, 129, 131, 133, 136, 138, 140, 142, 145, 147, 149, 152, 154, 156, 158, 161, 163, 165, 167, 170, 172, 174, 176, 179, 181, 183, 185, 188, 190, 192, 194, 197, 199, 201, 203, 206, 208, 210, 212, 215, 217, 219, 221, 224, 226, 228, 231, 233, 235, 238, 240, 242, 244, 247, 249, 251, 253, 256, 258, 260, 263, 265, 267, 270, 272, 274, 277, 279, 281, 283, 286, 288, 290, 293, 295, 297, 299, 301, 304, 306, 308, 310, 313, 315, 317, 319, 322, 324, 326, 328, 331, 333, 335, 337, 339, 342, 344, 346, 349, 351, 353, 355, 357, 360, 362, 364, 367, 369, 371, 374, 376, 378, 380, 383, 385, 387, 389, 391, 394, 396, 398, 400, 403, 405, 407, 409, 411, 414, 416, 418, 420, 423, 425, 427, 429, 432, 434, 436, 438, 441, 443, 445, 447, 450, 452, 454, 456, 458, 461, 463, 465, 467, 469, 472, 474, 476, 478, 481, 483, 485, 487, 489, 491, 494, 496, 498, 500, 503, 505, 507, 509, 512, 514, 516, 518, 521, 523, 525, 527, 529, 532, 534, 536, 538, 541, 543, 545, 547, 549, 552, 554, 556, 558, 561, 563, 565, 567, 569, 572, 574, 576, 578, 581, 583, 585, 587, 589, 592, 594, 596, 598, 601, 603, 605, 607, 609, 611, 614, 616, 618, 620, 623, 625, 627, 629, 632, 634, 636, 638, 640, 643, 645, 647, 650, 652, 654, 656, 658, 661, 663, 665, 667, 669, 672, 674, 676, 678, 681, 683, 685, 687, 690, 692, 694, 696, 699, 701, 703, 705, 708, 710, 712, 714, 716, 719, 721, 723, 726, 728, 730, 733, 735, 737, 740, 742, 744, 747, 749, 751, 753, 756, 758, 760, 763, 765, 767, 769, 772, 774, 776, 779, 781, 783, 785, 788, 790, 792, 794, 796, 799, 801, 803, 805, 808, 810, 812, 814, 817, 819, 821, 823, 825, 828, 830, 832, 834, 837, 839, 841, 843, 845, 848, 850, 852, 854, 856, 858, 861, 863, 865, 867, 869, 872, 874, 876, 878, 881, 883, 885, 887, 890, 892, 894, 896, 898, 901, 903, 905, 907, 910, 912, 914, 916, 919, 921, 923, 925, 927, 930, 932, 934, 936, 939, 941, 943, 945, 948, 950, 952, 954, 956, 959, 961, 963, 965, 967, 970, 972, 974, 976, 979, 981, 983, 985, 988, 990, 992, 994, 997, 999, 1001, 1003, 1005, 1007, 1010, 1012, 1014, 1016, 1019, 1021, 1023, 1026, 1028, 1030, 1032, 1035, 1037, 1039, 1041, 1043, 1046, 1048, 1050, 1052, 1055, 1057, 1059, 1061, 1063, 1066, 1068, 1070, 1072, 1075, 1077, 1079, 1081, 1084, 1086, 1088, 1090, 1092, 1095, 1097, 1099, 1101, 1103, 1106, 1108, 1110, 1112, 1115, 1117, 1119, 1121, 1124, 1126, 1128, 1130, 1132, 1135, 1137, 1139, 1141, 1143, 1146, 1148, 1150, 1152, 1154, 1157, 1159, 1161, 1163, 1165, 1168, 1170, 1172, 1174, 1176, 1179, 1181, 1183, 1185, 1187, 1190, 1192, 1194, 1196, 1198, 1200, 1203, 1205, 1207, 1209, 1212, 1214, 1216, 1218, 1220, 1223, 1225, 1227, 1229, 1231, 1233, 1236, 1238, 1240, 1242, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1275, 1277, 1279, 1281, 1283, 1286, 1288, 1290, 1292, 1294, 1297, 1299, 1301, 1303, 1306, 1308, 1310, 1312, 1314, 1317, 1319, 1321, 1323, 1325, 1328, 1330, 1332, 1334, 1336, 1338, 1341, 1343, 1345, 1347, 1349, 1352, 1354, 1356, 1358, 1360, 1362, 1365, 1367, 1369, 1371, 1374, 1376, 1378, 1380, 1383, 1385, 1387, 1389, 1392, 1394, 1396, 1398, 1400, 1403, 1405, 1407, 1409, 1411, 1413, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1446, 1448, 1450, 1452, 1454, 1456, 1459, 1461, 1463, 1465, 1467, 1469, 1472, 1474, 1476, 1478, 1480, 1482, 1484, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1506, 1508, 1510, 1512, 1514, 1517, 1519, 1521, 1523, 1525, 1527, 1530, 1532, 1534, 1536, 1538, 1540, 1542, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1562, 1564, 1566, 1568, 1570, 1572, 1574, 1577, 1579, 1581, 1583, 1585, 1587, 1590, 1592, 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1611, 1613, 1615, 1617, 1619, 1621, 1623, 1625, 1627, 1629, 1631, 1633, 1635, 1637, 1639, 1641, 1643, 1645, 1647, 1649, 1651, 1653, 1655, 1657, 1659, 1661, 1663, 1665, 1667, 1669, 1671, 1672, 1674, 1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1695, 1698, 1698, 1698, 1698, 1710, 1713, 1716, 1719, 1719, 1719, 1726, 1733, 1737, 1737, 1737, 1737], "type": "time", "resolution": "high", "original_size": 772, "series_type": "time"}]
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
@@ -90,6 +90,9 @@ def mocked_requests(*args, **kwargs):
|
|||||||
|
|
||||||
stravatimejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
|
stravatimejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
|
||||||
stravavelojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r'))
|
stravavelojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r'))
|
||||||
|
|
||||||
|
stravapowerjson = json.load(open('rowers/testdata/stravapowertestdata.txt','r'))
|
||||||
|
|
||||||
stravadistancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r'))
|
stravadistancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r'))
|
||||||
stravalatlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
|
stravalatlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
|
||||||
stravahrjson = json.load(open('rowers/testdata/stravahrtestdata.txt','r'))
|
stravahrjson = json.load(open('rowers/testdata/stravahrtestdata.txt','r'))
|
||||||
@@ -106,6 +109,7 @@ def mocked_requests(*args, **kwargs):
|
|||||||
'latlng':stravalatlongjson,
|
'latlng':stravalatlongjson,
|
||||||
'heartrate':stravahrjson,
|
'heartrate':stravahrjson,
|
||||||
'cadence':stravaspmjson,
|
'cadence':stravaspmjson,
|
||||||
|
'power':stravapowerjson,
|
||||||
}
|
}
|
||||||
|
|
||||||
ststrokesjson = json.load(open('rowers/testdata/sporttracksstrokedata.txt','r'))
|
ststrokesjson = json.load(open('rowers/testdata/sporttracksstrokedata.txt','r'))
|
||||||
|
|||||||
+22
-8
@@ -14723,8 +14723,8 @@ def plannedsession_teamedit_view(request,
|
|||||||
'plannedsessions':sps,
|
'plannedsessions':sps,
|
||||||
})
|
})
|
||||||
|
|
||||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership/",
|
#@user_passes_test(iscoachmember,login_url="/rowers/promembership/",
|
||||||
redirect_field_name=None)
|
# redirect_field_name=None)
|
||||||
def plannedsessions_coach_view(request,
|
def plannedsessions_coach_view(request,
|
||||||
teamid=0,userid=0):
|
teamid=0,userid=0):
|
||||||
|
|
||||||
@@ -14732,7 +14732,6 @@ def plannedsessions_coach_view(request,
|
|||||||
therower = getrower(request.user)
|
therower = getrower(request.user)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
startdate,enddate = get_dates_timeperiod(request)
|
startdate,enddate = get_dates_timeperiod(request)
|
||||||
|
|
||||||
|
|
||||||
@@ -14746,13 +14745,20 @@ def plannedsessions_coach_view(request,
|
|||||||
else:
|
else:
|
||||||
theteam = False
|
theteam = False
|
||||||
|
|
||||||
sps = get_sessions_manager(request.user,teamid=teamid,
|
if request.user.rower.rowerplan == 'coach':
|
||||||
enddate=enddate,
|
sps = get_sessions_manager(request.user,teamid=teamid,
|
||||||
startdate=startdate)
|
enddate=enddate,
|
||||||
|
startdate=startdate)
|
||||||
|
else:
|
||||||
|
rteams = therower.team.filter(viewing='allmembers')
|
||||||
|
sps = get_sessions(therower,startdate=startdate,enddate=enddate)
|
||||||
|
|
||||||
rowers = []
|
rowers = [therower]
|
||||||
for ps in sps:
|
for ps in sps:
|
||||||
rowers += ps.rower.all()
|
if request.user.rower.rowerplan == 'coach':
|
||||||
|
rowers += ps.rower.all()
|
||||||
|
else:
|
||||||
|
rowers += ps.rower.filter(team__in=rteams)
|
||||||
|
|
||||||
rowers = list(set(rowers))
|
rowers = list(set(rowers))
|
||||||
|
|
||||||
@@ -14760,14 +14766,17 @@ def plannedsessions_coach_view(request,
|
|||||||
|
|
||||||
for ps in sps:
|
for ps in sps:
|
||||||
rowerstatus = {}
|
rowerstatus = {}
|
||||||
|
rowercolor = {}
|
||||||
for r in rowers:
|
for r in rowers:
|
||||||
ratio, status,completiondate = is_session_complete(r,ps)
|
ratio, status,completiondate = is_session_complete(r,ps)
|
||||||
rowerstatus[r.id] = status
|
rowerstatus[r.id] = status
|
||||||
|
rowercolor[r.id] = cratiocolors[status]
|
||||||
sessiondict = {
|
sessiondict = {
|
||||||
'id': ps.id,
|
'id': ps.id,
|
||||||
'results':rowerstatus,
|
'results':rowerstatus,
|
||||||
'name': ps.name,
|
'name': ps.name,
|
||||||
'startdate': ps.startdate,
|
'startdate': ps.startdate,
|
||||||
|
'color': rowercolor,
|
||||||
'preferreddate': ps.preferreddate,
|
'preferreddate': ps.preferreddate,
|
||||||
'enddate': ps.enddate,
|
'enddate': ps.enddate,
|
||||||
}
|
}
|
||||||
@@ -14818,6 +14827,8 @@ def plannedsessions_coach_view(request,
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from rowers.plannedsessions import cratiocolors
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
def plannedsessions_view(request,
|
def plannedsessions_view(request,
|
||||||
userid=0,startdatestring='',enddatestring=''):
|
userid=0,startdatestring='',enddatestring=''):
|
||||||
@@ -14857,6 +14868,7 @@ def plannedsessions_view(request,
|
|||||||
completeness = {}
|
completeness = {}
|
||||||
actualvalue = {}
|
actualvalue = {}
|
||||||
completiondate = {}
|
completiondate = {}
|
||||||
|
sessioncolor = {}
|
||||||
|
|
||||||
if not sps and request.user.rower.rowerplan == 'basic':
|
if not sps and request.user.rower.rowerplan == 'basic':
|
||||||
messages.error(request,
|
messages.error(request,
|
||||||
@@ -14866,6 +14878,7 @@ def plannedsessions_view(request,
|
|||||||
ratio,status,cdate = is_session_complete(r,ps)
|
ratio,status,cdate = is_session_complete(r,ps)
|
||||||
actualvalue[ps.id] = int(ps.sessionvalue*ratio)
|
actualvalue[ps.id] = int(ps.sessionvalue*ratio)
|
||||||
completeness[ps.id] = status
|
completeness[ps.id] = status
|
||||||
|
sessioncolor[ps.id] = cratiocolors[status]
|
||||||
ws = Workout.objects.filter(user=r,plannedsession=ps)
|
ws = Workout.objects.filter(user=r,plannedsession=ps)
|
||||||
completiondate[ps.id] = cdate
|
completiondate[ps.id] = cdate
|
||||||
|
|
||||||
@@ -14901,6 +14914,7 @@ def plannedsessions_view(request,
|
|||||||
'rower':r,
|
'rower':r,
|
||||||
'timeperiod':timeperiod,
|
'timeperiod':timeperiod,
|
||||||
'completeness':completeness,
|
'completeness':completeness,
|
||||||
|
'sessioncolor':sessioncolor,
|
||||||
'actualvalue':actualvalue,
|
'actualvalue':actualvalue,
|
||||||
'completiondate':completiondate,
|
'completiondate':completiondate,
|
||||||
'unmatchedworkouts':unmatchedworkouts,
|
'unmatchedworkouts':unmatchedworkouts,
|
||||||
|
|||||||
@@ -389,6 +389,62 @@ th.rotate > div > span {
|
|||||||
color: #a9c08c;
|
color: #a9c08c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lightgreen {
|
||||||
|
background: #e2f0da;
|
||||||
|
color: #fdffc;
|
||||||
|
border: solid 1px #b2bfaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lightgreen:active {
|
||||||
|
color: #f5faf2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lightgreen:hover {
|
||||||
|
background: #b2bfaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mediumgreen {
|
||||||
|
background: #aad090;
|
||||||
|
color: #fafff7;
|
||||||
|
border: solid 1px #8db374;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mediumgreen:active {
|
||||||
|
color: #d8e6cf;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mediumgreen:hover {
|
||||||
|
background: #8db374;
|
||||||
|
}
|
||||||
|
|
||||||
|
.purple {
|
||||||
|
background: #8c1ec1;
|
||||||
|
color: #e9ddf0;
|
||||||
|
border: solid 1px #6b0f99;
|
||||||
|
}
|
||||||
|
|
||||||
|
.purple:active {
|
||||||
|
color: #cfa160;
|
||||||
|
}
|
||||||
|
|
||||||
|
.purple:hover {
|
||||||
|
background: #6b0f99;
|
||||||
|
}
|
||||||
|
|
||||||
|
.violet {
|
||||||
|
background: #c20d60;
|
||||||
|
color: #f0dae5;
|
||||||
|
border: solid 1px #99034e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.violet:active {
|
||||||
|
color: #e595bd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.violet:hover {
|
||||||
|
background: #99034e;
|
||||||
|
}
|
||||||
|
|
||||||
.blue {
|
.blue {
|
||||||
color: #fae7e9;
|
color: #fae7e9;
|
||||||
border: solid 1px #27aae2;
|
border: solid 1px #27aae2;
|
||||||
|
|||||||
Reference in New Issue
Block a user