diff --git a/rowers/forms.py b/rowers/forms.py
index bf7f79cd..f6305846 100644
--- a/rowers/forms.py
+++ b/rowers/forms.py
@@ -212,6 +212,18 @@ class CourseForm(forms.Form):
from django.forms.widgets import HiddenInput
super(CourseForm, self).__init__(*args, **kwargs)
+# The form used for uploading images
+class StandardsForm(forms.Form):
+ name = forms.CharField(max_length=150,label='Course Name')
+ file = forms.FileField(required=False,
+ validators=[must_be_csv])
+ notes = forms.CharField(required=False,
+ max_length=200,label='Course Notes',
+ widget=forms.Textarea)
+
+ def __init__(self, *args, **kwargs):
+ from django.forms.widgets import HiddenInput
+ super(StandardsForm, self).__init__(*args, **kwargs)
# The form used for uploading files
class DocumentsForm(forms.Form):
diff --git a/rowers/scoring.py b/rowers/scoring.py
index 13ee7098..f0093af6 100644
--- a/rowers/scoring.py
+++ b/rowers/scoring.py
@@ -5,6 +5,7 @@ import arrow
import datetime
def save_scoring(name,user,filename,id=0,notes=""):
+ print(notes)
if id==0:
collection = StandardCollection(name=name,manager=user,notes=notes)
collection.save()
@@ -102,3 +103,5 @@ def save_scoring(name,user,filename,id=0,notes=""):
)
standard.save()
+
+ return collection.id
diff --git a/rowers/templates/course_form.html b/rowers/templates/course_form.html
index fe6e1962..5a346104 100644
--- a/rowers/templates/course_form.html
+++ b/rowers/templates/course_form.html
@@ -30,7 +30,7 @@
Please correct the error{{ form.errors|pluralize }} below.
{% endif %}
-
+
@@ -71,13 +71,13 @@
if (!formdatasetok) {
$("#id_dropregion").remove();
}
-
+
if (formdatasetok) {
-
+
$(document).ready(function() {
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
console.log("CSRF token",csrftoken);
-
+
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
@@ -95,11 +95,11 @@
$(window).on('dragenter', function() {
$("#id_drop-files").css("background-color","#E9E9E4");
$("#id_dropregion").addClass("watermark").removeClass("invisible");})
-
+
$(window).on('dragleave', function() {
$("#id_drop-files").css("background-color","#FFFFFF");
$("#id_dropregion").removeClass("watermark").addClass("invisible");})
-
+
var frm = $("#file_form");
if( window.FormData === undefined ) {
@@ -108,7 +108,7 @@
} else {
console.log('we have formdata');
}
-
+
var data = new FormData(frm[0]);
@@ -144,7 +144,7 @@
}
}
-});
+});
$('input').each(function( i ) {
$(this).change(function() {
@@ -159,7 +159,14 @@
console.log($(this).attr('name'),$(this).val());
};
});});
-
+
+ $('textarea').each(function( i ) {
+ $(this).change(function() {
+ data.set($(this).attr('name'),$(this).val());
+ console.log($(this).attr('name'),$(this).val());
+ });
+ });
+
$('select').each(function( i ) {
console.log($(this).attr('name'),$(this).val());
$(this).change(function() {
@@ -200,7 +207,7 @@
console.log(result," reloading");
location.reload();
};
- }
+ }
});
return false;
});
@@ -236,7 +243,7 @@
$("#id_file").value = 0;
return false;
}
- data.set("file",f);
+ data.set("file",f);
// data.append("file",f);
$("#id_file").replaceWith('');
diff --git a/rowers/templates/standard_form.html b/rowers/templates/standard_form.html
new file mode 100644
index 00000000..777c1857
--- /dev/null
+++ b/rowers/templates/standard_form.html
@@ -0,0 +1,265 @@
+{% extends "newbase.html" %}
+{% load staticfiles %}
+{% load rowerfilters %}
+
+{% block title %}File loading{% endblock %}
+
+{% block meta %}
+
+
+
+{% endblock %}
+
+{% block main %}
+Upload Course Standard Times File
+
+
+ -
+
+
Drag and drop files here
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block sidebar %}
+{% include 'menu_racing.html' %}
+{% endblock %}
+
+
+{% block scripts %}
+
+
+
+ {% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index ea85a5ad..6304f2db 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -203,6 +203,7 @@ urlpatterns = [
re_path(r'^list-courses/$',views.courses_view,name='courses_view'),
re_path(r'^list-standards/$',views.standards_view,name='standards_view'),
re_path(r'^courses/upload/$',views.course_upload_view,name='course_upload_view'),
+ re_path(r'^standards/upload/$',views.standards_upload_view,name='standards_upload_view'),
re_path(r'^workout/addmanual/(?P\d+)$',views.addmanual_view,name='addmanual_view'),
re_path(r'^workout/addmanual/$',views.addmanual_view,name='addmanual_view'),
re_path(r'^team-compare-select/workout/(?P\d+)/team/(?P\d+)/user/(?P\d+)/$',views.team_comparison_select,name='team_comparison_select'),
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index 591458a5..27a98f43 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -5,6 +5,7 @@ from __future__ import unicode_literals
from rowers.views.statements import *
from rowsandall_app.settings import SITE_URL
+from rowers.scoring import *
# List Courses
def courses_view(request):
@@ -40,7 +41,6 @@ def standards_view(request):
r = getrower(request.user)
standards = StandardCollection.objects.all().order_by("name")
- print(standards)
# add search processing
query = request.GET.get('q')
@@ -49,8 +49,6 @@ def standards_view(request):
standards = StandardCollection.objects.filter(
reduce(operator.and_,
(Q(name__icontains=q) for q in query_list)) |
- reduce(operator.and_,
- (Q(country__icontains=q) for q in query_list)) |
reduce(operator.and_,
(Q(notes__icontains=q) for q in query_list))
)
@@ -58,7 +56,6 @@ def standards_view(request):
else:
searchform = SearchForm()
- print(standards)
return render(request,'list_standards.html',
{'standards':standards,
@@ -464,7 +461,7 @@ def virtualevent_uploadimage_view(request,id=0):
})
-# Image upload
+# Course upload
@login_required()
def course_upload_view(request):
is_ajax = False
@@ -524,6 +521,66 @@ def course_upload_view(request):
else:
return {'result':0}
+# Standards upload
+@login_required()
+def standards_upload_view(request,id=0):
+ is_ajax = False
+ if request.is_ajax():
+ is_ajax = True
+ r = getrower(request.user)
+
+
+ if request.method == 'POST':
+ print(request.POST)
+ form = StandardsForm(request.POST,request.FILES)
+
+ if form.is_valid():
+ f = form.cleaned_data['file']
+ name = form.cleaned_data['name']
+ notes = form.cleaned_data['notes']
+ if f is not None:
+ filename,path_and_filename = handle_uploaded_file(f)
+
+ id = save_scoring(name,request.user,path_and_filename,notes=notes,id=id)
+ print(notes)
+
+ os.remove(path_and_filename)
+
+
+
+ if id==0:
+ url = reverse(standards_view)
+ else:
+ url = reverse(standard_view,kwargs={'id':id})
+
+ if is_ajax:
+ return JSONResponse({'result':1,'url':url})
+
+ return HttpResponseRedirect(url)
+
+ else:
+ messages.error(request,'Something went wrong - no file attached')
+ url = reverse(standards_upload_view)
+ if is_ajax:
+ return JSONResponse({'result':0,'url':0})
+
+ return HttpResponseRedirect(url)
+ else:
+ messages.error(request,'Form is not valid')
+ print(form.errors)
+ return render(request,'standard_form.html',
+ {'form':form,
+ })
+
+ else:
+ if not is_ajax:
+ form = StandardsForm()
+ return render(request,'standard_form.html',
+ {'form':form,
+ 'active':'nav-racing',
+ })
+ return {'result':0}
+
def virtualevents_view(request):
is_ajax = False
diff --git a/rowers/views/statements.py b/rowers/views/statements.py
index 29a68349..2d6f0761 100644
--- a/rowers/views/statements.py
+++ b/rowers/views/statements.py
@@ -93,7 +93,7 @@ from rowers.forms import (
FitnessMetricForm,PredictedPieceFormNoDistance,
EmailForm, RegistrationForm, RegistrationFormTermsOfService,
RegistrationFormUniqueEmail,RegistrationFormSex,
- CNsummaryForm,UpdateWindForm,
+ CNsummaryForm,UpdateWindForm,StandardsForm,
UpdateStreamForm,WorkoutMultipleCompareForm,ChartParamChoiceForm,
FusionMetricChoiceForm,BoxPlotChoiceForm,MultiFlexChoiceForm,
TrendFlexModalForm,WorkoutSplitForm,WorkoutJoinParamForm,