some form checks on race creation
This commit is contained in:
1
rowers/.#plannedsessions.py
Normal file
1
rowers/.#plannedsessions.py
Normal file
@@ -0,0 +1 @@
|
||||
e408191@CZ27LT9RCGN72.63076:1525965015
|
||||
@@ -29,6 +29,7 @@ import datetime
|
||||
from django.core.exceptions import ValidationError
|
||||
from rowers.rows import validate_file_extension
|
||||
from collections import OrderedDict
|
||||
from timezonefinder import TimezoneFinder
|
||||
|
||||
import types
|
||||
|
||||
@@ -1104,6 +1105,35 @@ class VirtualRace(PlannedSession):
|
||||
|
||||
return stri
|
||||
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# test race window logic
|
||||
|
||||
start_time = self.start_time
|
||||
start_date = self.startdate
|
||||
startdatetime = datetime.datetime.combine(start_date,start_time)
|
||||
startdatetime = pytz.timezone(self.timezone).localize(
|
||||
startdatetime
|
||||
)
|
||||
|
||||
end_time = self.end_time
|
||||
end_date = self.enddate
|
||||
enddatetime = datetime.datetime.combine(end_date,end_time)
|
||||
enddatetime = pytz.timezone(self.timezone).localize(
|
||||
enddatetime
|
||||
)
|
||||
|
||||
if startdatetime > enddatetime:
|
||||
self.start_time = end_time
|
||||
self.startdate = end_date
|
||||
self.end_time = start_time
|
||||
self.enddate = start_date
|
||||
enddatetime = startdatetime
|
||||
|
||||
if self.evaluation_closure < enddatetime:
|
||||
self.evaluation_closure = enddatetime + timezone.timedelta(days=1)
|
||||
|
||||
super(VirtualRace,self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# Date input utility
|
||||
@@ -1142,7 +1172,27 @@ class PlannedSessionForm(ModelForm):
|
||||
def __init__(self,*args,**kwargs):
|
||||
super(PlannedSessionForm, self).__init__(*args, **kwargs)
|
||||
self.fields['course'].queryset = GeoCourse.objects.all().order_by("country","name")
|
||||
|
||||
|
||||
def get_course_timezone(course):
|
||||
polygons = GeoPolygon.objects.filter(course = course)
|
||||
points = GeoPoint.objects.filter(polygon = polygons[0])
|
||||
lat = points[0].latitude
|
||||
lon = points[0].longitude
|
||||
|
||||
tf = TimezoneFinder()
|
||||
try:
|
||||
timezone_str = tf.timezone_at(lng=lon,lat=lat)
|
||||
except ValueError:
|
||||
timezone_str = 'UTC'
|
||||
|
||||
if timezone_str is None:
|
||||
timezone_str = tf.closest_timezone_at(lng=lon,lat=lat)
|
||||
if timezone_str is None:
|
||||
timezone_str = 'UTC'
|
||||
|
||||
return timezone_str
|
||||
|
||||
|
||||
class VirtualRaceForm(ModelForm):
|
||||
course = forms.ModelChoiceField(queryset = GeoCourse.objects, empty_label=None)
|
||||
registration_closure = forms.SplitDateTimeField(widget=AdminSplitDateTime(),required=False)
|
||||
@@ -1187,6 +1237,38 @@ class VirtualRaceForm(ModelForm):
|
||||
self.fields['course'].queryset = GeoCourse.objects.all().order_by("country","name")
|
||||
|
||||
|
||||
def clean(self):
|
||||
cd = self.cleaned_data
|
||||
course = cd['course']
|
||||
geocourse = GeoCourse.objects.get(id=course.id)
|
||||
timezone_str = get_course_timezone(geocourse)
|
||||
|
||||
start_time = cd['start_time']
|
||||
start_date = cd['startdate']
|
||||
startdatetime = datetime.datetime.combine(start_date,start_time)
|
||||
startdatetime = pytz.timezone(timezone_str).localize(
|
||||
startdatetime
|
||||
)
|
||||
|
||||
end_time = cd['end_time']
|
||||
end_date = cd['enddate']
|
||||
enddatetime = datetime.datetime.combine(end_date,end_time)
|
||||
enddatetime = pytz.timezone(timezone_str).localize(
|
||||
enddatetime
|
||||
)
|
||||
|
||||
|
||||
if startdatetime > enddatetime:
|
||||
raise forms.ValidationError("The Start of the Race Window should be before the End of the Race Window")
|
||||
|
||||
if cd['evaluation_closure'] <= enddatetime:
|
||||
raise forms.ValidationError("Evaluation closure deadline should be after the Race Window closes")
|
||||
|
||||
if cd['evaluation_closure'] <= timezone.now():
|
||||
raise forms.ValidationError("Evaluation closure cannot be in the past")
|
||||
|
||||
|
||||
return cleaned_data
|
||||
|
||||
class PlannedSessionFormSmall(ModelForm):
|
||||
|
||||
|
||||
@@ -13588,7 +13588,6 @@ def virtualevent_create_view(request):
|
||||
startdatetime = datetime.datetime.combine(startdate,start_time)
|
||||
enddatetime = datetime.datetime.combine(enddate,end_time)
|
||||
|
||||
print enddatetime
|
||||
|
||||
startdatetime = pytz.timezone(timezone_str).localize(
|
||||
startdatetime
|
||||
|
||||
Reference in New Issue
Block a user