diff --git a/rowers/admin.py b/rowers/admin.py index 14599dc5..b6e9bbbe 100644 --- a/rowers/admin.py +++ b/rowers/admin.py @@ -6,7 +6,7 @@ from .models import ( Rower, Workout,GraphImage,FavoriteChart,SiteAnnouncement, Team,TeamInvite,TeamRequest, WorkoutComment,C2WorldClassAgePerformance,PlannedSession, - GeoCourse,GeoPolygon,GeoPoint, + GeoCourse,GeoPolygon,GeoPoint,VirtualRace, ) # Register your models here so you can use them in the Admin module @@ -60,6 +60,8 @@ class GeoCourseAdmin(admin.ModelAdmin): inlines = (GeoPolygonInline,) +class VirtualRaceAdmin(admin.ModelAdmin): + list_display = ('manager','name','startdate','country') admin.site.unregister(User) admin.site.register(User,UserAdmin) @@ -75,3 +77,4 @@ admin.site.register(C2WorldClassAgePerformance, C2WorldClassAgePerformanceAdmin) admin.site.register(PlannedSession,PlannedSessionAdmin) admin.site.register(GeoCourse, GeoCourseAdmin) +admin.site.register(VirtualRace, VirtualRaceAdmin) diff --git a/rowers/forms.py b/rowers/forms.py index cfde1fa4..54450443 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -721,7 +721,7 @@ from rowers.models import VirtualRace,GeoCourse def get_countries(): countries = VirtualRace.objects.order_by('country').values_list('country').distinct() - # countries = GeoCourse.objects.order_by('country').values_list('country').distinct() + countries = tuple([(c[0],c[0]) for c in countries]) return countries class VirtualRaceSelectForm(forms.Form): diff --git a/rowers/models.py b/rowers/models.py index 56ce044a..131a4ce7 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -10,7 +10,7 @@ from django.dispatch import receiver from django.forms.widgets import SplitDateTimeWidget from django.forms.extras.widgets import SelectDateWidget from django.forms.formsets import BaseFormSet -from django.contrib.admin.widgets import AdminDateWidget +from django.contrib.admin.widgets import AdminDateWidget,AdminTimeWidget,AdminSplitDateTime from datetimewidget.widgets import DateTimeWidget from django.core.validators import validate_email import os @@ -1073,7 +1073,7 @@ class VirtualRace(PlannedSession): contact_phone = models.CharField(validators=[phone_regex], max_length=17, blank=True) - contact_email = models.EmailField(max_length=254,blank=True, + contact_email = models.EmailField(max_length=254, validators=[validate_email]) # Date input utility @@ -1113,6 +1113,49 @@ class PlannedSessionForm(ModelForm): super(PlannedSessionForm, self).__init__(*args, **kwargs) self.fields['course'].queryset = GeoCourse.objects.all().order_by("country","name") +class VirtualRaceForm(ModelForm): + course = forms.ModelChoiceField(queryset = GeoCourse.objects, empty_label=None) + registration_closure = forms.SplitDateTimeField(widget=AdminSplitDateTime(),required=False) + evaluation_closure = forms.SplitDateTimeField(widget=AdminSplitDateTime(),required=False) + + class Meta: + model = VirtualRace + fields = [ + 'name', + 'startdate', + 'start_time', + 'enddate', + 'end_time', + 'has_registration', + 'registration_closure', + 'evaluation_closure', + 'course', + 'comment', + 'contact_phone', + 'contact_email', + ] + + dateTimeOptions = { + 'format': 'yyyy-mm-dd', + 'autoclose': True, + } + + widgets = { + 'comment': forms.Textarea, + 'startdate': AdminDateWidget(), + 'enddate': AdminDateWidget(), + 'start_time': AdminTimeWidget(), + 'end_time': AdminTimeWidget(), + 'registration_closure':AdminSplitDateTime(), + 'evaluation_closure':AdminSplitDateTime(), + } + + def __init__(self,*args,**kwargs): + super(VirtualRaceForm, self).__init__(*args, **kwargs) + self.fields['course'].queryset = GeoCourse.objects.all().order_by("country","name") + + + class PlannedSessionFormSmall(ModelForm): class Meta: diff --git a/rowers/templates/virtualeventcreate.html b/rowers/templates/virtualeventcreate.html new file mode 100644 index 00000000..e325c146 --- /dev/null +++ b/rowers/templates/virtualeventcreate.html @@ -0,0 +1,38 @@ +{% extends "base.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}New Virtual Race{% endblock %} + +{% block content %} + +
+ + + +
+

New Virtual Race

+
+ {% if form.errors %} +

+ Please correct the error{{ form.errors|pluralize }} below. +

+ {% endif %} + + + {{ form.as_table }} +
+ {% csrf_token %} +
+ +
+
+
+
+
+ +
+{% endblock %} + +{% block scripts %} +{% endblock %} diff --git a/rowers/templates/virtualevents.html b/rowers/templates/virtualevents.html index bc1f2bf0..22446832 100644 --- a/rowers/templates/virtualevents.html +++ b/rowers/templates/virtualevents.html @@ -10,7 +10,15 @@ {% block content %} -
+
+
+

+ Add Race +

+
+
+ +
{{ form.as_table }}
diff --git a/rowers/urls.py b/rowers/urls.py index 35f059bd..252e4af5 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -144,6 +144,7 @@ urlpatterns = [ url(r'^u/(?P\d+)/list-workouts/(?P\w+.*)/(?P\w+.*)$',views.workouts_view), url(r'^list-workouts/(?P\w+.*)/(?P\w+.*)$',views.workouts_view), url(r'^virtualevents$',views.virtualevents_view), + url(r'^virtualevent/create$',views.virtualevent_create_view), url(r'^list-workouts/$',views.workouts_view), url(r'^list-courses/$',views.courses_view), url(r'^courses/upload$',views.course_upload_view), diff --git a/rowers/views.py b/rowers/views.py index 7595043d..06600dbd 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -34,7 +34,7 @@ from rowers.forms import ( WorkFlowLeftPanelElement,WorkFlowMiddlePanelElement, LandingPageForm,PlannedSessionSelectForm,WorkoutSessionSelectForm, PlannedSessionTeamForm,PlannedSessionTeamMemberForm, - VirtualRaceSelectForm, + VirtualRaceSelectForm ) from django.core.urlresolvers import reverse from django.core.exceptions import PermissionDenied @@ -67,6 +67,7 @@ from rowers.models import ( WorkoutComment,WorkoutCommentForm,RowerExportForm, CalcAgePerformance,PowerTimeFitnessMetric,PlannedSessionForm, PlannedSessionFormSmall,GeoCourseEditForm,VirtualRace, + VirtualRaceForm, ) from rowers.models import ( FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet @@ -13302,3 +13303,62 @@ def virtualevents_view(request): 'form':form, } ) + +def virtualevent_create_view(request): + r = getrower(request.user) + + if request.method == 'POST': + racecreateform = VirtualRaceForm(request.POST) + if racecreateform.is_valid(): + cd = racecreateform.cleaned_data + startdate = cd['startdate'] + start_time = cd['start_time'] + enddate = cd['enddate'] + end_time = cd['end_time'] + comment = cd['comment'] + course = cd['course'] + name = cd['name'] + has_registration = cd['has_registration'] + registration_closure = cd['registration_closure'] + evaluation_closure = cd['evaluation_closure'] + contact_phone = cd['contact_phone'] + contact_email = cd['contact_email'] + + geocourse = GeoCourse.objects.get(id= course.id) + + vs = VirtualRace( + name=name, + startdate=startdate, + preferreddate = startdate, + start_time = start_time, + enddate=enddate, + end_time=end_time, + course=geocourse, + comment=comment, + sessiontype = 'coursetest', + has_registration=has_registration, + evaluation_closure=evaluation_closure, + registration_closure=registration_closure, + contact_phone=contact_phone, + contact_email=contact_email, + country = course.country, + manager=request.user, + ) + + vs.save() + + + + url = reverse(virtualevents_view) + return HttpResponseRedirect(url) + else: + + racecreateform = VirtualRaceForm() + + + return render(request,'virtualeventcreate.html', + { + 'form':racecreateform, + 'rower':r, + + }) diff --git a/templates/base.html b/templates/base.html index 2131c6de..f52c55bc 100644 --- a/templates/base.html +++ b/templates/base.html @@ -40,7 +40,7 @@ {% endblock %} {% block challenges %} - Racing + Racing {% endblock %} {% block content %} diff --git a/templates/basefront.html b/templates/basefront.html index 232daafe..4fb155e1 100644 --- a/templates/basefront.html +++ b/templates/basefront.html @@ -63,7 +63,7 @@ {% endblock %} {% block challenges %} - Racing + Racing {% endblock %}