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 django.core.exceptions import ValidationError
|
||||||
from rowers.rows import validate_file_extension
|
from rowers.rows import validate_file_extension
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
from timezonefinder import TimezoneFinder
|
||||||
|
|
||||||
import types
|
import types
|
||||||
|
|
||||||
@@ -1104,6 +1105,35 @@ class VirtualRace(PlannedSession):
|
|||||||
|
|
||||||
return stri
|
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
|
# Date input utility
|
||||||
@@ -1142,7 +1172,27 @@ class PlannedSessionForm(ModelForm):
|
|||||||
def __init__(self,*args,**kwargs):
|
def __init__(self,*args,**kwargs):
|
||||||
super(PlannedSessionForm, self).__init__(*args, **kwargs)
|
super(PlannedSessionForm, self).__init__(*args, **kwargs)
|
||||||
self.fields['course'].queryset = GeoCourse.objects.all().order_by("country","name")
|
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):
|
class VirtualRaceForm(ModelForm):
|
||||||
course = forms.ModelChoiceField(queryset = GeoCourse.objects, empty_label=None)
|
course = forms.ModelChoiceField(queryset = GeoCourse.objects, empty_label=None)
|
||||||
registration_closure = forms.SplitDateTimeField(widget=AdminSplitDateTime(),required=False)
|
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")
|
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):
|
class PlannedSessionFormSmall(ModelForm):
|
||||||
|
|
||||||
|
|||||||
@@ -13588,7 +13588,6 @@ def virtualevent_create_view(request):
|
|||||||
startdatetime = datetime.datetime.combine(startdate,start_time)
|
startdatetime = datetime.datetime.combine(startdate,start_time)
|
||||||
enddatetime = datetime.datetime.combine(enddate,end_time)
|
enddatetime = datetime.datetime.combine(enddate,end_time)
|
||||||
|
|
||||||
print enddatetime
|
|
||||||
|
|
||||||
startdatetime = pytz.timezone(timezone_str).localize(
|
startdatetime = pytz.timezone(timezone_str).localize(
|
||||||
startdatetime
|
startdatetime
|
||||||
|
|||||||
Reference in New Issue
Block a user