From 496f265908c626ffc349d35639210b12e78d443b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 26 May 2020 18:12:23 +0200 Subject: [PATCH] Course Times Standards CSV v1 working --- rowers/forms.py | 12 ++ rowers/scoring.py | 3 + rowers/templates/course_form.html | 29 +-- rowers/templates/standard_form.html | 265 ++++++++++++++++++++++++++++ rowers/urls.py | 1 + rowers/views/racesviews.py | 67 ++++++- rowers/views/statements.py | 2 +- 7 files changed, 362 insertions(+), 17 deletions(-) create mode 100644 rowers/templates/standard_form.html 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 %} - + {{ form.as_table }}
@@ -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('
'+files[0].name+'  X
'); 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

    +
    +
    +
    + {% if form.errors %} +

    + Please correct the error{{ form.errors|pluralize }} below. +

    + {% endif %} + + + {{ form.as_table }} +
    + {% csrf_token %} +

    + +

    +
    +
    +
  • +
+ + + + +{% 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,