From b953d2714b413706fea0668deb3aafda518b58fd Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 26 May 2020 16:47:49 +0200 Subject: [PATCH] standards_view and standard_view --- rowers/models.py | 2 + rowers/scoring.py | 6 +- rowers/templates/list_standards.html | 84 ++++++++++++++++++++++++++++ rowers/templates/menu_racing.html | 5 ++ rowers/templates/standard_view.html | 72 ++++++++++++++++++++++++ rowers/urls.py | 2 + rowers/views/racesviews.py | 77 +++++++++++++++++++++++++ rowers/views/statements.py | 2 +- 8 files changed, 247 insertions(+), 3 deletions(-) create mode 100644 rowers/templates/list_standards.html create mode 100644 rowers/templates/standard_view.html diff --git a/rowers/models.py b/rowers/models.py index dcf75050..e57a9793 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2197,6 +2197,7 @@ from django.core.validators import RegexValidator,validate_email class StandardCollection(models.Model): name = models.CharField(max_length=150) manager = models.ForeignKey(User, null=True,on_delete=models.CASCADE) + notes = models.CharField(blank=True,null=True,max_length=1000) def __str__(self): return self.name @@ -2204,6 +2205,7 @@ class StandardCollection(models.Model): class CourseStandard(models.Model): name = models.CharField(max_length=150) coursedistance = models.IntegerField() + coursetime = models.CharField(max_length=100,default="") coursestandard = models.FloatField() # average boat speed agemin = models.IntegerField(default=0) agemax = models.IntegerField(default=120) diff --git a/rowers/scoring.py b/rowers/scoring.py index a4a6bd74..13ee7098 100644 --- a/rowers/scoring.py +++ b/rowers/scoring.py @@ -4,9 +4,9 @@ import pandas as pd import arrow import datetime -def save_scoring(name,user,filename,id=0): +def save_scoring(name,user,filename,id=0,notes=""): if id==0: - collection = StandardCollection(name=name,manager=user) + collection = StandardCollection(name=name,manager=user,notes=notes) collection.save() standards = CourseStandard.objects.filter(standardcollection=collection) for standard in standards: @@ -15,6 +15,7 @@ def save_scoring(name,user,filename,id=0): try: collection = StandardCollection.objects.get(id=id) collection.name = name + collection.notes = notes collection.save() except StandardCollection.DoesNotExist: @@ -88,6 +89,7 @@ def save_scoring(name,user,filename,id=0): name=name, coursedistance=coursedistance, coursestandard=coursestandard, + coursetime=coursetime, agemin=agemin, agemax=agemax, boatclass=boatclass, diff --git a/rowers/templates/list_standards.html b/rowers/templates/list_standards.html new file mode 100644 index 00000000..b99ac07f --- /dev/null +++ b/rowers/templates/list_standards.html @@ -0,0 +1,84 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Rowsandall Course Standards List{% endblock %} + +{% block scripts %} + +{% endblock %} + +{% block main %} + + + + +

Standards Collections

+ + + {% endblock %} + +{% block sidebar %} +{% include 'menu_racing.html' %} +{% endblock %} diff --git a/rowers/templates/menu_racing.html b/rowers/templates/menu_racing.html index c1eb9178..a0a5d76b 100644 --- a/rowers/templates/menu_racing.html +++ b/rowers/templates/menu_racing.html @@ -131,6 +131,11 @@ {% endif %} +
  • + +  Course Time Standards + +
  • {% include 'menuscript.html' %} diff --git a/rowers/templates/standard_view.html b/rowers/templates/standard_view.html new file mode 100644 index 00000000..2bc1a232 --- /dev/null +++ b/rowers/templates/standard_view.html @@ -0,0 +1,72 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} + +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} + +{% block title %}{{ standard.name }} {% endblock %} +{% block og_title %}{{ standard.name }} {% endblock %} +{% block main %} + +

    {{ standard.name }}

    + + + +{% endblock %} + +{% block sidebar %} +{% include 'menu_racing.html' %} +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index ad52fd3b..ea85a5ad 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -201,6 +201,7 @@ urlpatterns = [ views.virtualevent_results_download_view,name='virtualevent_results_download_view'), re_path(r'^list-workouts/$',views.workouts_view,name='workouts_view'), 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'^workout/addmanual/(?P\d+)$',views.addmanual_view,name='addmanual_view'), re_path(r'^workout/addmanual/$',views.addmanual_view,name='addmanual_view'), @@ -752,6 +753,7 @@ urlpatterns = [ re_path(r'^courses/(?P\d+)/replace/$',views.course_replace_view, name='course_replace_view'), re_path(r'^courses/(?P\d+)/$',views.course_view,name='course_view'), + re_path(r'^standards/(?P\d+)/$',views.standard_view,name='standard_view'), re_path(r'^courses/(?P\d+)/map/$',views.course_map_view,name='course_map_view'), # URLS to be created re_path(r'^help/$',TemplateView.as_view(template_name='help.html'), name='help'), diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index 606dbdb0..591458a5 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -35,6 +35,39 @@ def courses_view(request): 'rower':r, }) +# List Courses +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') + if query: + query_list = query.split() + 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)) + ) + searchform = SearchForm(initial={'q':query}) + else: + searchform = SearchForm() + + print(standards) + + return render(request,'list_standards.html', + {'standards':standards, + 'active':'nav-racing', + 'searchform':searchform, + 'rower':r, + }) + + # for ajax calls def course_map_view(request,id=0): @@ -249,6 +282,50 @@ def course_view(request,id=0): } ) +def standard_view(request,id=0): + try: + collection = StandardCollection.objects.get(id=id) + except StandardCollection.DoesNotExist: + return Http404("Standard Collection does not exist") + + r = getrower(request.user) + + orderby = request.GET.get('order_by') + + if orderby is not None: + standards = CourseStandard.objects.filter( + standardcollection=collection + ).order_by(orderby,"-coursestandard","agemax","agemin","sex","name") + else: + standards = CourseStandard.objects.filter( + standardcollection=collection + ).order_by("-coursestandard","agemax","agemin","sex","name") + + breadcrumbs = [ + { + 'url': reverse('virtualevents_view'), + 'name': 'Challenges' + }, + { + 'url': reverse(standards_view), + 'name': 'Standards' + }, + { + 'url': reverse(standard_view,kwargs={'id':collection.id}), + 'name': collection.name + }, + ] + + return render(request, 'standard_view.html', + { + 'active':'nav-racing', + 'breadcrumbs':breadcrumbs, + 'collection':collection, + 'standards':standards, + 'rower':r, + } + ) + @login_required() @permission_required('racelogo.delete_logo',fn=get_logo_by_pk,raise_exception=True) def logo_delete_view(request,id=0): diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 156919f9..29a68349 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -113,7 +113,7 @@ from rowers.models import ( RaceLogo,RowerBillingAddressForm,PaidPlan, AlertEditForm, ConditionEditForm, PlannedSessionComment,CoachRequest,CoachOffer, - VideoAnalysis,ShareKey, + VideoAnalysis,ShareKey,StandardCollection,CourseStandard, ) from rowers.models import ( RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,