diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 8197c6d8..35a7ec9f 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1076,7 +1076,7 @@ def checkbreakthrough(w, r): # Processes painsled CSV file to database def save_workout_database(f2, r, dosmooth=True, workouttype='rower', - boattype='1x', + boattype='static', adaptiveclass='None', weightcategory='hwt', dosummary=True, title='Workout', @@ -1366,7 +1366,7 @@ def new_workout_from_file(r, f2, workouttype='rower', workoutsource=None, title='Workout', - boattype='1x', + boattype='static', rpe=-1, makeprivate=False, startdatetime='', @@ -1552,7 +1552,7 @@ def new_workout_from_file(r, f2, def new_workout_from_df(r, df, title='New Workout', workoutsource='unknown', - boattype='1x', + boattype='static', workouttype='rower', parent=None, workoutid='', diff --git a/rowers/forms.py b/rowers/forms.py index 8dce9f6d..bb29caa2 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -1111,6 +1111,7 @@ class PowerIntervalUpdateForm(forms.Form): boattypes = mytypes.boattypes +ergtypes = mytypes.ergtypes workouttypes = mytypes.workouttypes ww = list(workouttypes) ww.append(tuple(('all', 'All'))) @@ -1119,7 +1120,7 @@ workouttypes = tuple(ww) class DataFrameColumnsForm(forms.Form): cols = ['ftime', 'cumdist', 'fpace', 'spm', - 'hr', 'power', 'driveenergy', 'drivelength', 'averageforce', + 'hr', 'grpower', 'driveenergy', 'drivelength', 'averageforce', 'peakforce', 'distance', 'drivespeed', 'workoutstate', 'catch', 'finish', 'peakforceangle', 'wash', 'slip', 'rhythm', 'effectiveangle', 'totalangle', 'distanceperstroke', 'velo'] @@ -1143,7 +1144,7 @@ class AnalysisOptionsForm(forms.Form): modality = forms.ChoiceField(choices=workouttypes, label='Workout Type', initial='all') - waterboattype = forms.MultipleChoiceField(choices=boattypes, + waterboattype = forms.MultipleChoiceField(choices=boattypes+ergtypes, label='Water Boat Type', initial=mytypes.waterboattype) @@ -1156,7 +1157,7 @@ class TrendFlexModalForm(forms.Form): modality = forms.ChoiceField(choices=workouttypes, label='Workout Type', initial='all') - waterboattype = forms.MultipleChoiceField(choices=boattypes, + waterboattype = forms.MultipleChoiceField(choices=boattypes+ergtypes, label='Water Boat Type', initial=mytypes.waterboattype) diff --git a/rowers/models.py b/rowers/models.py index 2aeb6ecb..20be9e6f 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3443,6 +3443,7 @@ class PlannedSessionFormSmall(ModelForm): boattypes = mytypes.boattypes +ergtypes = mytypes.ergtypes # Workout rpechoices = ( @@ -3481,9 +3482,9 @@ class Workout(models.Model): verbose_name='Exercise/Boat Class') workoutsource = models.CharField(max_length=100, default='unknown') - boattype = models.CharField(choices=boattypes, max_length=50, + boattype = models.CharField(choices=boattypes+ergtypes, max_length=50, default='1x', - verbose_name='Boat Type') + verbose_name='Boat/Rower Type') boatbrand = models.CharField(choices=boatbrands, max_length=50, default='', verbose_name='Boat Brand') adaptiveclass = models.CharField(choices=adaptivetypes, max_length=50, @@ -3568,6 +3569,11 @@ class Workout(models.Model): if self.timezone == 'tzutc()': self.timezone = 'UTC' # pragma: no cover + if self.workouttype in mytypes.otwtypes and self.boattype in mytypes.ergtypes: + self.boattype = '1x' + elif self.workouttype in mytypes.otetypes and self.boattype in mytypes.boattypes: + self.boattype = 'static' + super(Workout, self).save(*args, **kwargs) def __str__(self): @@ -3581,7 +3587,7 @@ class Workout(models.Model): boattype = self.boattype workouttype = self.workouttype - if workouttype != 'water': + if workouttype not in ['water','rower']: try: stri = u'{d} {n} {dist}m {duration} {workouttype} {ownerfirst} {ownerlast}'.format( d=date.strftime('%Y-%m-%d'), diff --git a/rowers/mytypes.py b/rowers/mytypes.py index 333c3a6a..fef3969d 100644 --- a/rowers/mytypes.py +++ b/rowers/mytypes.py @@ -8,8 +8,8 @@ workouttypes_ordered = collections.OrderedDict({ 'rower': 'Indoor Rower', 'skierg': 'Ski Erg', 'bikeerg': 'Bike Erg', - 'dynamic': 'Dynamic Indoor Rower', - 'slides': 'Indoor Rower on Slides', +# 'dynamic': 'Dynamic Indoor Rower', +# 'slides': 'Indoor Rower on Slides', 'paddle': 'Paddle Adapter', 'snow': 'On-snow', 'coastal': 'Coastal', @@ -340,8 +340,6 @@ otwtypes = ( otetypes = ( 'rower', - 'dynamic', - 'slides' ) rowtypes = ( @@ -432,6 +430,17 @@ boattypes = ( ('8x+', '8x+ (octuple scull)'), ) +ergtypes = ( + ('static','Concept2 static'), + ('dynamic','Concept2 dynamic'), + ('slides', 'Concept2 slides'), + ('rp3','RP3'), + ('waterrower','Water Rower'), + ('other','Other Indoor Rower'), +) + + + adaptivetypes = ( ('None', 'Open'), ('PR1', 'PR1 (Arms and Shoulders)'), diff --git a/rowers/sqlcode/boattypes.sql b/rowers/sqlcode/boattypes.sql new file mode 100644 index 00000000..69abb226 --- /dev/null +++ b/rowers/sqlcode/boattypes.sql @@ -0,0 +1,4 @@ +UPDATE rowers_workout +SET workouttype = 'rower', boattype = 'dynamic' +WHERE workouttype = 'dynamic'; + diff --git a/rowers/tasks.py b/rowers/tasks.py index 25f2a03d..f767a22e 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -3354,8 +3354,8 @@ def handle_rp3_async_workout(userid, rp3token, rp3id, startdatetime, max_attempt 'secret': UPLOAD_SERVICE_SECRET, 'user': userid, 'file': filename, - 'workouttype': 'dynamic', - 'boattype': '1x', + 'workouttype': 'rower', + 'boattype': 'rp3', 'rp3id': int(rp3id), 'startdatetime': startdatetime, 'timezone': timezone, @@ -3552,7 +3552,12 @@ def handle_c2_async_workout(alldata, userid, c2token, c2id, delaysec, # rest_time = 0 distance = distance+rest_distance c2id = data['id'] - workouttype = data['type'] + if data['type'] in ['rower','dynamic','slides']: + workouttype = 'rower' + boattype = data['type'] + else: + workouttype = data['type'] + boattype = '1x' # verified = data['verified'] # weightclass = data['weight_class'] @@ -3696,7 +3701,7 @@ def handle_c2_async_workout(alldata, userid, c2token, c2id, delaysec, 'file': csvfilename, 'title': title, 'workouttype': workouttype, - 'boattype': '1x', + 'boattype': boattype, 'c2id': c2id, 'startdatetime': startdatetime.isoformat(), 'timezone': str(timezone) diff --git a/rowers/templates/alert_create.html b/rowers/templates/alert_create.html index 9940fa8e..3cb0b5bd 100644 --- a/rowers/templates/alert_create.html +++ b/rowers/templates/alert_create.html @@ -65,26 +65,85 @@ deleteText: '

 

remove
' }); - + $('#id_workouttype').on('change', function(){ + if ( + $(this).val() == 'water' + || $(this).val() == 'coastal' + || $(this).val() == 'c-boat' + || $(this).val() == 'churchboat' + ) { + var $el = $('#id_boattype'); + $el.empty(); + $.each(boattypes, function(key,value) { + if ( key == '{{ workout.boattype }}') { + $el.append($("