diff --git a/rowers/alerts.py b/rowers/alerts.py index 0d43abb9..9226f517 100644 --- a/rowers/alerts.py +++ b/rowers/alerts.py @@ -155,7 +155,7 @@ def alert_get_stats(alert,nperiod=0): mask = df[alert.measured.metric] > alert.measured.value1 df2 = df[mask].copy() elif alert.measured.condition == '<': - mask = df[alert.measured.metric] > alert.measured.value1 + mask = df[alert.measured.metric] < alert.measured.value1 df2 = df[mask].copy() elif alert.measured.condition == 'between': mask = df[alert.measured.metric] > alert.measured.value1 diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 6101fcde..9e099622 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1123,7 +1123,6 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', inboard=inboard, oarlength=oarlength, timezone=timezone_str, privacy=privacy) - try: w.save() except ValidationError: @@ -1391,9 +1390,10 @@ def new_workout_from_file(r, f2, if workoutsource is None: workoutsource = fileformat - + id, message = save_workout_database( f2, r, + notes=notes, workouttype=workouttype, weightcategory=r.weightcategory, adaptiveclass=r.adaptiveclass, diff --git a/rowers/templates/document_form.html b/rowers/templates/document_form.html index f285de40..b5dd35ba 100644 --- a/rowers/templates/document_form.html +++ b/rowers/templates/document_form.html @@ -39,7 +39,9 @@ {{ form.as_table }} {% csrf_token %} - +

+   +

@@ -201,9 +203,15 @@ $('#id_workouttype').change(); if ($(this).attr('id') == 'id_file') { data.set("file",this.files[0]); } - console.log($(this).attr('name'),$(this).val()); + console.log($(this).attr('id'),$(this).attr('name'),$(this).val()); }; - });}); + });}); + + $('textarea').each(function( i ) { + $(this).change(function() { + data.set($(this).attr('name'),$(this).val()); + console.log($(this).attr('id'),$(this).attr('name'),$(this).val()); + });}); $('select').each(function( i ) { console.log($(this).attr('name'),$(this).val()); @@ -213,7 +221,7 @@ $('#id_workouttype').change(); }); }); - frm.submit(function() { + frm.submit(function() { console.log("Form submission"); $(data.values()).each(function(value) { console.log(value); diff --git a/rowers/urls.py b/rowers/urls.py index 1ad43ed7..d9ff16ef 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -111,7 +111,6 @@ def response_error_handler(request, exception=None): return HttpResponse('Error handler content', status=403) def filenotfound_handler(request, exception=None): - print('noot') return HttpResponse('Error handler content', status=404) handler403 = views.error403_view @@ -381,11 +380,11 @@ urlpatterns = [ re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/addstatic/(?P\d+)/$', views.workout_add_chart_view,name='workout_add_chart_view'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/addstatic/$',views.workout_add_chart_view,name='workout_add_chart_view'), - re_path(r'^workout/(?P\d+)/delete/$',login_required( + re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/delete/$',login_required( views.WorkoutDelete.as_view()), name='workout_delete'), - re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/delete/$',login_required( - views.workout_code_delete_view),name='workout_code_delete'), +# re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/delete/$',login_required( +# views.workout_code_delete_view),name='workout_code_delete'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/smoothenpace/$',views.workout_smoothenpace_view,name='workout_smoothenpace_view'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/undosmoothenpace/$',views.workout_undo_smoothenpace_view,name='workout_undo_smoothenpace_view'), re_path(r'^workout/c2import/$',views.workout_c2import_view,name='workout_c2import_view'), diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 06c33325..7b254a72 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -936,10 +936,10 @@ def rowhascoordinates(row): def rdata(file,rower=rrower()): try: res = rrdata(csvfile=file,rower=rower) - except (IOError, IndexError): + except (IOError, IndexError, EOFError): try: res = rrdata(csvfile=file+'.gz',rower=rower) - except (IOError, IndexError): + except (IOError, IndexError, EOFError): res = 0 return res diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 2e2da11d..55321bc6 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -3900,6 +3900,11 @@ def workout_upload_view(request, except KeyError: boattype = '1x' + try: + notes = docformoptions['notes'] + except KeyError: + notes = '' + try: workoutsource = uploadoptions['workoutsource'] except KeyError: @@ -4028,7 +4033,7 @@ def workout_upload_view(request, boattype=boattype, makeprivate=makeprivate, title = t, - notes='' + notes=notes, ) else: workoutsbox = Mailbox.objects.filter(name='workouts')[0] @@ -4317,8 +4322,20 @@ def team_workout_upload_view(request,message="", rowerform.fields['user'].queryset = User.objects.filter(rower__in=rowers).distinct() if form.is_valid(): - f = request.FILES['file'] - res = handle_uploaded_file(f) + f = request.FILES.get('file',False) + if f: + res = handle_uploaded_file(f) + else: + messages.error(request,'No file attached') + response = render(request, + 'team_document_form.html', + {'form':form, + 'teams':get_my_teams(request.user), + 'optionsform':optionsform, + 'rowerform':rowerform, + }) + return response + t = form.cleaned_data['title'] offline = form.cleaned_data['offline'] boattype = form.cleaned_data['boattype'] @@ -4847,9 +4864,14 @@ def workout_summary_edit_view(request,id,message="",successmessage="" formvalues = {} form = SummaryStringForm() - tss,normp = dataprep.workout_rscore(row) + tss = row.rscore + normp = row.normp + normv = row.normv + normw = row.normw - normv,normw = dataprep.workout_normv(row,pp=8.0) + if tss == -1: + tss,normp = dataprep.workout_rscore(row) + normv,normw = dataprep.workout_normv(row,pp=8.0) work = int(normw) power = int(normp) @@ -5277,7 +5299,11 @@ class GraphDelete(DeleteView): def workout_code_delete_view(request,id=0): pk = encoder.decode_hex(id) - url = reverse('workout_delete',kwargs={'pk':pk}) + try: + w = Workout.objects.get(pk=pk) + url = reverse('workout_delete',kwargs={'pk':pk}) + except Workout.DoesNotExist: + url = reverse('workout_delete',kwargs={'pk':id}) return HttpResponseRedirect(url) @@ -5329,7 +5355,16 @@ class WorkoutDelete(DeleteView): return reverse('workouts_view') def get_object(self, *args, **kwargs): - obj = super(WorkoutDelete, self).get_object(*args, **kwargs) + workout_pk = self.kwargs['pk'] + try: + obj = Workout.objects.get(pk=workout_pk) + except (ValueError,Workout.DoesNotExist): + workout_pk = encoder.decode_hex(workout_pk) + try: + obj = Workout.objects.get(pk=workout_pk) + except Workout.DoesNotExist: + raise Http404("One of the workouts doesn't exist") + # obj = super(WorkoutDelete, self).get_object(*args, **kwargs) if not checkaccessuser(self.request.user,obj.user): raise PermissionDenied('You are not allowed to delete this workout')