diff --git a/rowers/dataprepnodjango.py b/rowers/dataprepnodjango.py index 8e830138..92dccaa2 100644 --- a/rowers/dataprepnodjango.py +++ b/rowers/dataprepnodjango.py @@ -1251,8 +1251,11 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, data.to_sql('strokedata',engine,if_exists='append',index=False) except: data.drop(columns=['rhythm'],inplace=True) - data.to_sql('strokedata',engine,if_exists='append',index=False) - + try: + data.to_sql('strokedata',engine,if_exists='append',index=False) + except: + pass + conn.close() engine.dispose() return data diff --git a/rowers/models.py b/rowers/models.py index a07bbc68..3962d056 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2452,7 +2452,7 @@ class WorkoutForm(ModelForm): # duration = forms.TimeInput(format='%H:%M:%S.%f') class Meta: model = Workout - fields = ['name','date','starttime','timezone','duration','distance','workouttype','boattype','weightcategory','notes','rankingpiece','duplicate'] + fields = ['name','date','starttime','timezone','duration','distance','workouttype','boattype','weightcategory','notes','rankingpiece','duplicate','plannedsession'] widgets = { 'date': AdminDateWidget(), 'notes': forms.Textarea, @@ -2474,6 +2474,21 @@ class WorkoutForm(ModelForm): self.fields['private'].initial = False else: self.fields['private'].initial = True + + workout = self.instance + sps = PlannedSession.objects.filter( + rower__in=[workout.user], + startdate__lte=workout.date, + enddate__gte=workout.date, + ).order_by("preferreddate","startdate","enddate").exclude( + sessiontype='race') + + if not sps: + del self.fields['plannedsession'] + else: + self.fields['plannedsession'].queryset = sps + else: + del self.fields['plannedsession'] # Used for the rowing physics calculations class AdvancedWorkoutForm(ModelForm): diff --git a/rowers/tasks.py b/rowers/tasks.py index c7219c3d..ef36460c 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -610,6 +610,7 @@ def handle_calctrimp(id, intensityfactor = normp/float(ftp) tss = 100.*((duration*normp*intensityfactor)/(3600.*ftp)) + if sex == 'male': f = 1.92 else: @@ -646,6 +647,24 @@ def handle_calctrimp(id, if not np.isfinite(normw): normw = 0 + try: + dum = int(tss) + except ValueError: + tss = 0 + + try: + dum = int(normp) + except ValueError: + normp = 0 + try: + dump = int(trimp) + except ValueError: + trimp = 0 + try: + dump = int(hrtss) + except ValueError: + hrtss = 0 + query = 'UPDATE rowers_workout SET rscore = {tss}, normp = {normp}, trimp={trimp}, hrtss={hrtss}, normv={normv}, normw={normw} WHERE id={id}'.format( tss = int(tss), normp = int(normp), diff --git a/rowers/templates/workout_form.html b/rowers/templates/workout_form.html index d0f82594..ce0e29e6 100644 --- a/rowers/templates/workout_form.html +++ b/rowers/templates/workout_form.html @@ -105,7 +105,7 @@ $('#id_workouttype').change(); {{ form.as_table }} {% csrf_token %} - +
  • diff --git a/rowers/views.py b/rowers/views.py index 086f4ff2..578d5c20 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -208,6 +208,7 @@ from django.core.cache import cache from django_mailbox.models import Message,Mailbox,MessageAttachment + # Utility to get stroke data in a JSON response class JSONResponse(HttpResponse): def __init__(self, data, **kwargs): @@ -3369,6 +3370,11 @@ def addmanual_view(request): avghr = metricsform.cleaned_data['avghr'] avgpwr = metricsform.cleaned_data['avgpwr'] avgspm = metricsform.cleaned_data['avgspm'] + try: + ps = form.cleaned_data['plannedsession'] + except KeyError: + ps = None + try: boattype = request.POST['boattype'] except KeyError: @@ -3426,10 +3432,14 @@ def addmanual_view(request): w.privacy = privacy w.weightcategory = weightcategory w.notes = notes + w.plannedsession = ps w.name = name w.workouttype = workouttype w.boattype = boattype w.save() + if ps: + add_workouts_plannedsession([w],ps,w.user) + messages.info(request,'New workout created') else: return render(request,'manualadd.html', @@ -9969,7 +9979,12 @@ def workout_edit_view(request,id=0,message="",successmessage=""): private = form.cleaned_data['private'] notes = form.cleaned_data['notes'] thetimezone = form.cleaned_data['timezone'] - + + try: + ps = form.cleaned_data['plannedsession'] + except KeyError: + ps = None + try: boattype = request.POST['boattype'] except KeyError: @@ -10031,10 +10046,17 @@ def workout_edit_view(request,id=0,message="",successmessage=""): row.privacy = privacy row.rankingpiece = rankingpiece row.timezone = thetimezone + row.plannedsession = ps + try: row.save() except IntegrityError: pass + + if ps: + add_workouts_plannedsession([row],ps,row.user) + + # change data in csv file r = rdata(row.csvfilename)