From e62e20a0918345ecb2f8fa96ee7ec2c0c53a2c55 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Tue, 17 Apr 2018 16:45:21 +0200
Subject: [PATCH] race edit form
---
rowers/models.py | 14 +++++++-
rowers/plannedsessions.py | 36 ++++++++++++++++++-
rowers/templates/virtualevent.html | 9 +++++
rowers/templates/virtualeventedit.html | 49 ++++++++++++++++++++++++++
rowers/urls.py | 1 +
rowers/views.py | 44 +++++++++++++++++++++++
6 files changed, 151 insertions(+), 2 deletions(-)
create mode 100644 rowers/templates/virtualeventedit.html
diff --git a/rowers/models.py b/rowers/models.py
index 1a53c612..dade1028 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -1075,7 +1075,19 @@ class VirtualRace(PlannedSession):
contact_email = models.EmailField(max_length=254,
validators=[validate_email],blank=True)
-
+
+ def __unicode__(self):
+
+ name = self.name
+ startdate = self.startdate
+ enddate = self.enddate
+
+ stri = u'Virtual Race {n}'.format(
+ n = name,
+ )
+
+ return stri
+
# Date input utility
class DateInput(forms.DateInput):
input_type = 'date'
diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py
index 998e846e..da5f4453 100644
--- a/rowers/plannedsessions.py
+++ b/rowers/plannedsessions.py
@@ -7,7 +7,7 @@ import time
from django.db import IntegrityError
import uuid
from django.conf import settings
-
+import pytz
from utils import myqueue
import django_rq
@@ -447,3 +447,37 @@ def update_plannedsession(ps,cd):
ps.save()
return 1,'Planned Session Updated'
+
+def update_virtualrace(ps,cd):
+ for attr, value in cd.items():
+ if attr == 'comment':
+ value.replace("\r\n", "
");
+ value.replace("\n", "
");
+ setattr(ps, attr, value)
+
+ # correct times
+
+ course = cd['course']
+ geocourse = GeoCourse.objects.get(id= course.id)
+ timezone_str = courses.get_course_timezone(geocourse)
+
+ startdatetime = datetime.combine(cd['startdate'],cd['start_time'])
+ enddatetime = datetime.combine(cd['enddate'],cd['end_time'])
+
+ startdatetime = pytz.timezone(timezone_str).localize(
+ startdatetime
+ )
+ enddatetime = pytz.timezone(timezone_str).localize(
+ enddatetime
+ )
+ ps.evaluation_closure = pytz.timezone(timezone_str).localize(
+ ps.evaluation_closure.replace(tzinfo=None)
+ )
+ ps.registration_closure = pytz.timezone(timezone_str).localize(
+ ps.registration_closure.replace(tzinfo=None)
+ )
+
+
+ ps.save()
+
+ return 1,'Virtual Race Updated'
diff --git a/rowers/templates/virtualevent.html b/rowers/templates/virtualevent.html
index 2f0ccb5f..5d090577 100644
--- a/rowers/templates/virtualevent.html
+++ b/rowers/templates/virtualevent.html
@@ -10,6 +10,12 @@
{{ race.name }}
+ {% if request.user == race.manager %}
+
@@ -40,6 +46,9 @@
| Contact Phone | {{ race.contact_phone }} |
+
+ | Comment | {{ race.comment }} |
+
diff --git a/rowers/templates/virtualeventedit.html b/rowers/templates/virtualeventedit.html
new file mode 100644
index 00000000..b12906a4
--- /dev/null
+++ b/rowers/templates/virtualeventedit.html
@@ -0,0 +1,49 @@
+{% extends "base.html" %}
+{% load staticfiles %}
+{% load rowerfilters %}
+
+{% block title %}Edit Virtual Race{% endblock %}
+
+{% block content %}
+
+
+
+
Edit Race {{ race.name }}
+
+
+
+
+
+
+ - All times are local times in the race course time zone
+ - Adding a contact phone number and email is not mandatory, but we
+ strongly recommend it.
+ - If your event has a registration closure deadline, participants
+ have to enter (and can withdraw) before the registration closure time.
+ - Participants can submit results until the evaluation closure time.
+
+
+
+
+
+
+{% endblock %}
+
+{% block scripts %}
+{% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 643088b9..8baf56d0 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -146,6 +146,7 @@ urlpatterns = [
url(r'^virtualevents$',views.virtualevents_view),
url(r'^virtualevent/create$',views.virtualevent_create_view),
url(r'^virtualevent/(?P\d+)$',views.virtualevent_view),
+ url(r'^virtualevent/(?P\d+)/edit$',views.virtualevent_edit_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 7713bf9f..ea2ec2bc 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -13392,6 +13392,7 @@ def virtualevent_view(request,id=0):
'rower':r
})
+@login_required()
def virtualevent_create_view(request):
r = getrower(request.user)
@@ -13471,3 +13472,46 @@ def virtualevent_create_view(request):
'rower':r,
})
+
+@login_required()
+def virtualevent_edit_view(request,id=0):
+ r = getrower(request.user)
+
+ try:
+ race = VirtualRace.objects.get(id=id)
+ if race.manager != request.user:
+ raise PermissionDenied("Access denied")
+ except VirtualRace.DoesNotExist:
+ raise Http404("Virtual Race does not exist")
+
+ if request.method == 'POST':
+ racecreateform = VirtualRaceForm(request.POST,instance=race)
+ if racecreateform.is_valid():
+ cd = racecreateform.cleaned_data
+
+ res, message = update_virtualrace(race,cd)
+
+ if res:
+ messages.info(request,message)
+ else:
+ messages.error(request,message)
+
+ url = reverse(virtualevent_view,
+ kwargs = {
+ 'id':race.id
+ })
+
+ return HttpResponseRedirect(url)
+
+ else:
+
+ racecreateform = VirtualRaceForm(instance=race)
+
+
+ return render(request,'virtualeventedit.html',
+ {
+ 'form':racecreateform,
+ 'rower':r,
+ 'race':race,
+
+ })