diff --git a/rowers/courses.py b/rowers/courses.py index 8a2b07df..58085405 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -16,6 +16,7 @@ import xml.etree.ElementTree as et import pandas as pd import numpy as np +from timezonefinder import TimezoneFinder import dataprep from rowers.utils import geo_distance @@ -38,6 +39,24 @@ class InvalidTrajectoryError(Exception): def __str__(self): return repr(self.value) +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 def polygon_to_path(polygon): points = GeoPoint.objects.filter(polygon=polygon).order_by("order_in_poly") diff --git a/rowers/models.py b/rowers/models.py index 131a4ce7..1a53c612 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1074,7 +1074,7 @@ class VirtualRace(PlannedSession): contact_phone = models.CharField(validators=[phone_regex], max_length=17, blank=True) contact_email = models.EmailField(max_length=254, - validators=[validate_email]) + validators=[validate_email],blank=True) # Date input utility class DateInput(forms.DateInput): diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index da26d0a5..76b4b8ec 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -86,6 +86,30 @@ def timefield_to_seconds_duration(t): return duration + +def get_virtualrace_times(virtualrace): + geocourse = GeoCourse.objects.get(id = virtualrace.course.id) + timezone_str = courses.get_course_timezone(geocourse) + + startdatetime = datetime.datetime.combine( + virtualrace.startdate,virtualrace.start_time) + enddatetime = datetime.datetime.combine( + virtualrace.enddate,virtualrace.end_time) + + startdatetime = pytz.timezone(timezone_str).localize( + startdatetime + ) + enddatetime = pytz.timezone(timezone_str).localize( + enddatetime + ) + + return { + 'startdatetime':startdatetime, + 'enddatetime':enddatetime, + 'evaluation_closure':virtualrace.evaluation_closure, + 'registration_closure':virtualrace.registration_closure, + } + def get_session_metrics(ps): rowers = ps.rower.all() rscore = [] diff --git a/rowers/templates/virtualeventcreate.html b/rowers/templates/virtualeventcreate.html index e325c146..d55afb53 100644 --- a/rowers/templates/virtualeventcreate.html +++ b/rowers/templates/virtualeventcreate.html @@ -8,10 +8,10 @@
+