From 6f4ba95337ba697d3f40f4e0764b716cb456e248 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 7 Dec 2018 08:56:38 +0100 Subject: [PATCH] prevent users to use 0 as planned session value --- rowers/models.py | 11 +++++++++++ rowers/plannedsessions.py | 7 +++++-- rowers/views.py | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index 09a61c8b..0d06135a 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1764,6 +1764,9 @@ class PlannedSession(models.Model): return stri def save(self, *args, **kwargs): + if self.sessionvalue <= 0: + self.sessionvalue = 1 + # sort units if self.sessionmode == 'distance': if self.sessionunit not in ['m','km']: @@ -2005,6 +2008,14 @@ class IndoorVirtualRaceForm(ModelForm): cd = self.cleaned_data timezone_str = cd['timezone'] + value = cd['sessionvalue'] + if value <= 0: + raise forms.ValidationError('The Value must be a positive, non-zero value') + + unit = cd['sessionunit'] + if unit == 'm' and value < 100: + raise forms.ValidationError('Minimum distance is 100m') + start_time = cd['start_time'] if start_time is None: raise forms.ValidationError( diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index c152305c..7babb4f7 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -327,7 +327,10 @@ def is_session_complete_ws(ws,ps): if not completiondate and score>=cratiomin*value: completiondate = w.date - ratio = score/float(value) + try: + ratio = score/float(value) + except ZeroDivisionError: + ratio = 0 verdict = 'better than nothing' @@ -581,7 +584,7 @@ def get_sessions(r,startdate=date.today(), startdate__lte=enddate, enddate__gte=startdate, ).order_by("preferreddate","startdate","enddate").exclude( - sessiontype='race') + sessiontype='race').exclude(sessiontype='indoorrace') return sps diff --git a/rowers/views.py b/rowers/views.py index 9030caba..b00e6e38 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -15583,6 +15583,9 @@ def plannedsession_edit_view(request,id=0,userid=0): if ps.manager != request.user: raise PermissionDenied("You are not allowed to edit this planned session") + + if ps.sessiontype in ['race','indoorrace']: + raise PermissionDenied("You are not allowed to edit this planned session because it is a race") if ps.team.all() or len(ps.rower.all())>1: url = reverse(plannedsession_teamedit_view,