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')