From 691499351603805c65ae82900bc84c5be41474be Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Thu, 28 May 2020 06:49:13 +0200
Subject: [PATCH] filter form
---
rowers/forms.py | 21 +++++++++++++++++
rowers/models.py | 27 ++++++++++++++++++++++
rowers/templates/virtualeventregister.html | 2 +-
rowers/views/racesviews.py | 12 ++++++++--
4 files changed, 59 insertions(+), 3 deletions(-)
diff --git a/rowers/forms.py b/rowers/forms.py
index f6305846..7110da87 100644
--- a/rowers/forms.py
+++ b/rowers/forms.py
@@ -1230,6 +1230,12 @@ class RaceResultFilterForm(forms.Form):
initial=['None','PR1','PR2','PR3','FES'],
widget=forms.CheckboxSelectMultiple())
+ entrycategory = forms.MultipleChoiceField(
+ choices = [],
+ label = 'Groups',
+ widget=forms.CheckboxSelectMultiple()
+ )
+
def __init__(self, *args, **kwargs):
if 'records' in kwargs:
records = kwargs.pop('records',None)
@@ -1237,6 +1243,21 @@ class RaceResultFilterForm(forms.Form):
super(RaceResultFilterForm,self).__init__(*args,**kwargs)
if records:
+ # group
+ thecategories = [record.entrycategory for record in records]
+ thecategories = list(set(thecategories))
+ if len(thecategories) <= 1:
+ del self.fields['entrycategory']
+ else:
+ categorychoices = []
+ for category in thecategories:
+ if category is not None:
+ categorychoices.append(
+ (category.id,category)
+ )
+ self.fields['entrycategory'].choices = categorychoices
+ self.fields['entrycategory'].initial = [cat[0] for cat in categorychoices]
+
# sex
thesexes = [record.sex for record in records]
thesexes = list(set(thesexes))
diff --git a/rowers/models.py b/rowers/models.py
index 715e37c3..9f0e8d46 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -2969,6 +2969,14 @@ class VirtualRaceResult(models.Model):
u2 = rr.user.last_name,
)
if self.teamname:
+ if self.entrycategory:
+ return u'Entry for {n} for "{r}" in {g} with {t}'.format(
+ n = name,
+ r = self.race,
+ g = self.entrycategory,
+ t = self.teamname,
+ )
+
return u'Entry for {n} for "{r}" in {c} {d} with {t} ({s})'.format(
n = name,
r = self.race,
@@ -2978,6 +2986,12 @@ class VirtualRaceResult(models.Model):
s = self.sex,
)
else:
+ if self.entrycategory:
+ return u'Entry for {n} for "{r}" in {g}'.format(
+ n = name,
+ r = self.race,
+ g = self.entrycategory,
+ )
return u'Entry for {n} for "{r}" in {c} {d} ({s})'.format(
n = name,
r = self.race,
@@ -3031,6 +3045,13 @@ class IndoorVirtualRaceResult(models.Model):
u2 = rr.user.last_name,
)
if self.teamname:
+ if self.entrycategory:
+ return u'Entry for {n} for "{r}" in {g} with {t}'.format(
+ n = name,
+ r = self.race,
+ g = self.entrycategory,
+ t = self.teamname,
+ )
return u'Entry for {n} for "{r}" on {c} with {t} ({s})'.format(
n = name,
r = self.race,
@@ -3039,6 +3060,12 @@ class IndoorVirtualRaceResult(models.Model):
s = self.sex,
)
else:
+ if self.entrycategory:
+ return u'Entry for {n} for "{r}" in {g}'.format(
+ n = name,
+ r = self.race,
+ g = self.entrycategory,
+ )
return u'Entry for {n} for "{r}" on {c} ({s})'.format(
n = name,
r = self.race,
diff --git a/rowers/templates/virtualeventregister.html b/rowers/templates/virtualeventregister.html
index 20159a4e..6a925ac7 100644
--- a/rowers/templates/virtualeventregister.html
+++ b/rowers/templates/virtualeventregister.html
@@ -37,7 +37,7 @@
{% if race.coursestandards %}
This race uses standard times and limits the race groups to those where
- standard times exist. The "Field" form choice will overrule other selections you
+ standard times exist. The "Group" form choice will overrule other selections you
make in the form (boat type, weight, etc) and your entry will be rejected
if the age and gender doesn't match.
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index 2c0ac70c..cbb09087 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -1127,6 +1127,11 @@ def virtualevent_view(request,id=0):
except KeyError:
adaptiveclass = ['None','PR1','PR2','PR3','FES']
+ try:
+ entrycategory = cd['entrycategory']
+ except KeyError:
+ entrycategory = None
+
if race.sessiontype == 'race':
results = resultobj.objects.filter(
race=race,
@@ -1137,7 +1142,7 @@ def virtualevent_view(request,id=0):
weightcategory__in=weightcategory,
adaptiveclass__in=adaptiveclass,
age__gte=age_min,
- age__lte=age_max
+ age__lte=age_max,
).order_by("duration")
else:
results = resultobj.objects.filter(
@@ -1148,9 +1153,12 @@ def virtualevent_view(request,id=0):
weightcategory__in=weightcategory,
adaptiveclass__in=adaptiveclass,
age__gte=age_min,
- age__lte=age_max
+ age__lte=age_max,
).order_by("duration","-distance")
+ if entrycategory is not None:
+ results = results.filter(entrycategory__in=entrycategory)
+
# to-do - add DNS
dns = []