summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--postgresqleu/confreg/views.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/postgresqleu/confreg/views.py b/postgresqleu/confreg/views.py
index f0b19810..17b04033 100644
--- a/postgresqleu/confreg/views.py
+++ b/postgresqleu/confreg/views.py
@@ -10,7 +10,7 @@ from django.contrib.auth.models import User
from django.contrib import messages
from django.conf import settings
from django.db import transaction, connection
-from django.db.models import Q, Count, Avg, Prefetch
+from django.db.models import Q, Count, Avg, Sum, Min, Max, Prefetch
from django.db.models.expressions import F
from django.forms import ValidationError
from django.utils import timezone
@@ -3020,7 +3020,19 @@ def talkvote_vote(request, confname):
ConferenceSessionVote.objects.filter(session=session, voter=request.user).delete()
# Re-calculate the average
- avg = session.conferencesessionvote_set.filter(vote__gt=0).aggregate(Avg('vote'))['vote__avg']
+ if conference.scoring_method == 0:
+ # Normal average
+ avg = session.conferencesessionvote_set.filter(vote__gt=0).aggregate(Avg('vote'))['vote__avg']
+ elif conference.scoring_method == 1:
+ # Olympic average
+ vals = session.conferencesessionvote_set.filter(vote__gt=0).aggregate(Avg('vote'), Min('vote'), Max('vote'), Sum('vote'), Count('vote'))
+ if vals['vote__count'] > 2:
+ avg = (vals['vote__sum'] - vals['vote__min'] - vals['vote__max']) / (vals['vote__count'] - 2)
+ else:
+ avg = vals['vote__avg']
+ else:
+ return HttpResponse("Invalid scoring method", status=500)
+
if avg is None:
return HttpResponse("", content_type='text/plain')
return HttpResponse("{0:.2f}".format(avg), content_type='text/plain')