Private
Public Access
1
0

Merge branch 'develop' into feature/coachreports

This commit is contained in:
Sander Roosendaal
2019-09-21 14:10:03 +02:00
6 changed files with 62 additions and 20 deletions

View File

@@ -155,7 +155,7 @@ def alert_get_stats(alert,nperiod=0):
mask = df[alert.measured.metric] > alert.measured.value1 mask = df[alert.measured.metric] > alert.measured.value1
df2 = df[mask].copy() df2 = df[mask].copy()
elif alert.measured.condition == '<': elif alert.measured.condition == '<':
mask = df[alert.measured.metric] > alert.measured.value1 mask = df[alert.measured.metric] < alert.measured.value1
df2 = df[mask].copy() df2 = df[mask].copy()
elif alert.measured.condition == 'between': elif alert.measured.condition == 'between':
mask = df[alert.measured.metric] > alert.measured.value1 mask = df[alert.measured.metric] > alert.measured.value1

View File

@@ -1123,7 +1123,6 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
inboard=inboard, oarlength=oarlength, inboard=inboard, oarlength=oarlength,
timezone=timezone_str, timezone=timezone_str,
privacy=privacy) privacy=privacy)
try: try:
w.save() w.save()
except ValidationError: except ValidationError:
@@ -1391,9 +1390,10 @@ def new_workout_from_file(r, f2,
if workoutsource is None: if workoutsource is None:
workoutsource = fileformat workoutsource = fileformat
id, message = save_workout_database( id, message = save_workout_database(
f2, r, f2, r,
notes=notes,
workouttype=workouttype, workouttype=workouttype,
weightcategory=r.weightcategory, weightcategory=r.weightcategory,
adaptiveclass=r.adaptiveclass, adaptiveclass=r.adaptiveclass,

View File

@@ -39,7 +39,9 @@
{{ form.as_table }} {{ form.as_table }}
</table> </table>
{% csrf_token %} {% csrf_token %}
<input class="button green" type="submit" value="Submit"> <p>
&nbsp;<input type="submit" value="Submit">
</p>
</div> </div>
</li> </li>
@@ -201,9 +203,15 @@ $('#id_workouttype').change();
if ($(this).attr('id') == 'id_file') { if ($(this).attr('id') == 'id_file') {
data.set("file",this.files[0]); 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 ) { $('select').each(function( i ) {
console.log($(this).attr('name'),$(this).val()); console.log($(this).attr('name'),$(this).val());
@@ -213,7 +221,7 @@ $('#id_workouttype').change();
}); });
}); });
frm.submit(function() { frm.submit(function() {
console.log("Form submission"); console.log("Form submission");
$(data.values()).each(function(value) { $(data.values()).each(function(value) {
console.log(value); console.log(value);

View File

@@ -111,7 +111,6 @@ def response_error_handler(request, exception=None):
return HttpResponse('Error handler content', status=403) return HttpResponse('Error handler content', status=403)
def filenotfound_handler(request, exception=None): def filenotfound_handler(request, exception=None):
print('noot')
return HttpResponse('Error handler content', status=404) return HttpResponse('Error handler content', status=404)
handler403 = views.error403_view handler403 = views.error403_view
@@ -381,11 +380,11 @@ urlpatterns = [
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/(?P<plotnr>\d+)/$', re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/(?P<plotnr>\d+)/$',
views.workout_add_chart_view,name='workout_add_chart_view'), views.workout_add_chart_view,name='workout_add_chart_view'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/$',views.workout_add_chart_view,name='workout_add_chart_view'), re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/$',views.workout_add_chart_view,name='workout_add_chart_view'),
re_path(r'^workout/(?P<pk>\d+)/delete/$',login_required( re_path(r'^workout/(?P<pk>\b[0-9A-Fa-f]+\b)/delete/$',login_required(
views.WorkoutDelete.as_view()), views.WorkoutDelete.as_view()),
name='workout_delete'), name='workout_delete'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/delete/$',login_required( # re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/delete/$',login_required(
views.workout_code_delete_view),name='workout_code_delete'), # views.workout_code_delete_view),name='workout_code_delete'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/smoothenpace/$',views.workout_smoothenpace_view,name='workout_smoothenpace_view'), re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/smoothenpace/$',views.workout_smoothenpace_view,name='workout_smoothenpace_view'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/undosmoothenpace/$',views.workout_undo_smoothenpace_view,name='workout_undo_smoothenpace_view'), re_path(r'^workout/(?P<id>\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'), re_path(r'^workout/c2import/$',views.workout_c2import_view,name='workout_c2import_view'),

View File

@@ -936,10 +936,10 @@ def rowhascoordinates(row):
def rdata(file,rower=rrower()): def rdata(file,rower=rrower()):
try: try:
res = rrdata(csvfile=file,rower=rower) res = rrdata(csvfile=file,rower=rower)
except (IOError, IndexError): except (IOError, IndexError, EOFError):
try: try:
res = rrdata(csvfile=file+'.gz',rower=rower) res = rrdata(csvfile=file+'.gz',rower=rower)
except (IOError, IndexError): except (IOError, IndexError, EOFError):
res = 0 res = 0
return res return res

View File

@@ -3900,6 +3900,11 @@ def workout_upload_view(request,
except KeyError: except KeyError:
boattype = '1x' boattype = '1x'
try:
notes = docformoptions['notes']
except KeyError:
notes = ''
try: try:
workoutsource = uploadoptions['workoutsource'] workoutsource = uploadoptions['workoutsource']
except KeyError: except KeyError:
@@ -4028,7 +4033,7 @@ def workout_upload_view(request,
boattype=boattype, boattype=boattype,
makeprivate=makeprivate, makeprivate=makeprivate,
title = t, title = t,
notes='' notes=notes,
) )
else: else:
workoutsbox = Mailbox.objects.filter(name='workouts')[0] 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() rowerform.fields['user'].queryset = User.objects.filter(rower__in=rowers).distinct()
if form.is_valid(): if form.is_valid():
f = request.FILES['file'] f = request.FILES.get('file',False)
res = handle_uploaded_file(f) 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'] t = form.cleaned_data['title']
offline = form.cleaned_data['offline'] offline = form.cleaned_data['offline']
boattype = form.cleaned_data['boattype'] boattype = form.cleaned_data['boattype']
@@ -4847,9 +4864,14 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
formvalues = {} formvalues = {}
form = SummaryStringForm() 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) work = int(normw)
power = int(normp) power = int(normp)
@@ -5277,7 +5299,11 @@ class GraphDelete(DeleteView):
def workout_code_delete_view(request,id=0): def workout_code_delete_view(request,id=0):
pk = encoder.decode_hex(id) 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) return HttpResponseRedirect(url)
@@ -5329,7 +5355,16 @@ class WorkoutDelete(DeleteView):
return reverse('workouts_view') return reverse('workouts_view')
def get_object(self, *args, **kwargs): 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): if not checkaccessuser(self.request.user,obj.user):
raise PermissionDenied('You are not allowed to delete this workout') raise PermissionDenied('You are not allowed to delete this workout')