diff --git a/rowers/dataprep.py b/rowers/dataprep.py
index 24869490..d5c46c6b 100644
--- a/rowers/dataprep.py
+++ b/rowers/dataprep.py
@@ -34,6 +34,7 @@ from rowingdata import (
MysteryParser, BoatCoachOTWParser,QuiskeParser,
painsledDesktopParser, speedcoachParser, ErgStickParser,
SpeedCoach2Parser, FITParser, fitsummarydata,
+ RitmoTimeParser,
make_cumvalues,cumcpdata,ExcelTemplate,
summarydata, get_file_type,
)
@@ -1088,77 +1089,37 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
return (w.id, message)
+parsers = {
+ 'xls': ExcelTemplate,
+ 'rp': RowProParser,
+ 'tcx':TCXParser,
+ 'mystery':MysteryParser,
+ 'ritmotime':RitmoTimeParser,
+ 'quiske': QuiskeParser,
+ 'rowperfect3': RowPerfectParser,
+ 'coxmate': CoxMateParser,
+ 'bcmike': BoatCoachAdvancedParser,
+ 'boatcoach': BoatCoachParser,
+ 'boatcoachotw': BoatCoachOTWParser,
+ 'painsleddesktop': painsledDesktopParser,
+ 'speedcoach': speedcoachParser,
+ 'speedcoach2': SpeedCoach2Parser,
+ 'ergstick': ErgStickParser,
+ 'fit': FITParser,
+ 'ergdata': ErgDataParser,
+ }
+
def parsenonpainsled(fileformat,f2,summary):
- # handle RowPro:
- if (fileformat == 'xls'):
- row = ExcelTemplate(f2)
- hasrecognized = True
-
-
- if (fileformat == 'rp'):
- row = RowProParser(f2)
- hasrecognized = True
- # handle TCX
- if (fileformat == 'tcx'):
- row = TCXParser(f2)
- hasrecognized = True
-
- # handle Mystery
- if (fileformat == 'mystery'):
- row = MysteryParser(f2)
+ try:
+ row = parsers[fileformat](f2)
hasrecognized = True
+ except KeyError:
+ hasrecognized = False
- # handle Quiske
- if (fileformat == 'quiske'):
- row = QuiskeParser(f2)
- hasrecognized = True
-
- # handle RowPerfect
- if (fileformat == 'rowperfect3'):
- row = RowPerfectParser(f2)
- hasrecognized = True
-
- # handle ErgData
- if (fileformat == 'ergdata'):
- row = ErgDataParser(f2)
- hasrecognized = True
-
- # handle CoxMate
- if (fileformat == 'coxmate'):
- row = CoxMateParser(f2)
- hasrecognized = True
-
- # handle Mike
- if (fileformat == 'bcmike'):
- row = BoatCoachAdvancedParser(f2)
- hasrecognized = True
-
- # handle BoatCoach
- if (fileformat == 'boatcoach'):
- row = BoatCoachParser(f2)
- hasrecognized = True
-
- # handle BoatCoach OTW
- if (fileformat == 'boatcoachotw'):
- row = BoatCoachOTWParser(f2)
- hasrecognized = True
-
- # handle painsled desktop
- if (fileformat == 'painsleddesktop'):
- row = painsledDesktopParser(f2)
- hasrecognized = True
-
- # handle speed coach GPS
- if (fileformat == 'speedcoach'):
- row = speedcoachParser(f2)
- hasrecognized = True
# handle speed coach GPS 2
if (fileformat == 'speedcoach2'):
- row = SpeedCoach2Parser(f2)
- hasrecognized = True
-
oarlength, inboard = get_empower_rigging(f2)
empowerfirmware = get_empower_firmware(f2)
if empowerfirmware != '':
@@ -1168,15 +1129,8 @@ def parsenonpainsled(fileformat,f2,summary):
summary = row.allstats()
- # handle ErgStick
- if (fileformat == 'ergstick'):
- row = ErgStickParser(f2)
- hasrecognized = True
-
# handle FIT
if (fileformat == 'fit'):
- row = FITParser(f2)
- hasrecognized = True
try:
s = fitsummarydata(f2)
s.setsummary()
@@ -1317,7 +1271,6 @@ def new_workout_from_file(r, f2,
return (0, message, '')
except Exception as e:
errorstring = str(sys.exc_info()[0])
- print e.message
message = 'Something went wrong: ' + e.message
return (0, message, '')
diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py
index 7f59ef89..0f5e4594 100644
--- a/rowers/interactiveplots.py
+++ b/rowers/interactiveplots.py
@@ -2114,7 +2114,7 @@ def interactive_streamchart(id=0,promember=0):
return [script,div]
-def interactive_chart(id=0,promember=0):
+def interactive_chart(id=0,promember=0,intervaldata = {}):
# Add hover to this comma-separated string and see what changes
if (promember==1):
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
@@ -2219,6 +2219,26 @@ def interactive_chart(id=0,promember=0):
plot.add_layout(LinearAxis(y_range_name="spmax",axis_label="SPM"),'right')
plot.legend.location = "bottom_right"
+
+
+ # add shaded bar chart areas
+ if intervaldata:
+ intervaldf = pd.DataFrame(intervaldata)
+ intervaldf['itime'] = intervaldf['itime']*1.e3
+ intervaldf['time'] = intervaldf['itime'].cumsum()
+ intervaldf['time_r'] = intervaldf['time'] +intervaldf['itime'].shift(-1)
+ intervaldf['value'] = 10
+ mask = intervaldf['itype'] == 3
+ intervaldf.loc[mask,'value'] = 45
+ intervaldf['bottom'] = 10
+
+ intervalsource = ColumnDataSource(
+ intervaldf
+ )
+
+ plot.quad(left='time',top='value',bottom='bottom',
+ right='time_r',source=intervalsource,color='pink',
+ y_range_name='spmax',fill_alpha=0.2,line_alpha=0.2)
script, div = components(plot)
@@ -3398,7 +3418,7 @@ def thumbnail_flex_chart(rowdata,id=0,promember=0,
try:
tseconds = rowdata.ix[:,'time']
except KeyError:
- return '','No time data - cannot make flex plot','',''
+ return '','No time data - cannot make flex plot'
try:
diff --git a/rowers/models.py b/rowers/models.py
index b2f26e18..9278e80b 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -1641,12 +1641,23 @@ class VirtualRaceResult(models.Model):
u1 = rr.user.first_name,
u2 = rr.user.last_name,
)
- return u'Entry for {n} for "{r}" in {c} {d}'.format(
- n = name,
- r = self.race,
- d = self.boattype,
- c = self.boatclass,
+ if self.teamname:
+ return u'Entry for {n} for "{r}" in {c} {d} with {t} ({s})'.format(
+ n = name,
+ r = self.race,
+ d = self.boattype,
+ c = self.boatclass,
+ t = self.teamname,
+ s = self.sex,
)
+ else:
+ return u'Entry for {n} for "{r}" in {c} {d} ({s})'.format(
+ n = name,
+ r = self.race,
+ d = self.boattype,
+ c = self.boatclass,
+ s = self.sex,
+ )
class CourseTestResult(models.Model):
diff --git a/rowers/templates/summary_edit.html b/rowers/templates/summary_edit.html
index 3419f077..3a399ebe 100644
--- a/rowers/templates/summary_edit.html
+++ b/rowers/templates/summary_edit.html
@@ -164,9 +164,11 @@
{% csrf_token %}
+ {% localize off %}
{% for key,value in formvalues.items %}
{% endfor %}
+ {% endlocalize %}
{% for field in detailform %}
{{ field.as_hidden }}
{% endfor %}
diff --git a/rowers/views.py b/rowers/views.py
index d968cae2..7948a933 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -11286,13 +11286,6 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
return HttpResponse("Error: CSV Data File Not Found")
nrintervals = len(idist)
- # create interactive plot
- try:
- res = interactive_chart(id,promember=1)
- script = res[0]
- div = res[1]
- except ValueError:
- pass
savebutton = 'nosavebutton'
formvalues = {}
@@ -11305,13 +11298,21 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
try:
avpace = datetime.timedelta(seconds=int(500./normv))
except:
- avpage = datetime.timedelta(seconds=130)
+ avpace = datetime.timedelta(seconds=130)
data = {
'power': int(normp),
'pace': avpace,
- 'selector': normp,
+ 'selector': 'power',
}
+
+ powerorpace = 'power'
+
+ if normp == 0:
+ data['selector'] = 'pace'
+ powerorpace = 'pace'
+
+
powerupdateform = PowerIntervalUpdateForm(initial=data)
@@ -11568,6 +11569,22 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
detailform = IntervalUpdateForm(aantal=nrintervals,initial=initial)
+ # create interactive plot
+ try:
+ intervaldata = {
+ 'itime':itime,
+ 'idist':idist,
+ 'itype':itype,
+ 'selector': powerorpace,
+ 'normp': normp,
+ 'normv': normv,
+ }
+ res = interactive_chart(id,promember=1,intervaldata=intervaldata)
+ script = res[0]
+ div = res[1]
+ except ValueError:
+ pass
+
# render page
return render(request, 'summary_edit.html',