diff --git a/vendor/symposion/reviews/models.py b/vendor/symposion/reviews/models.py index 8b21bc58..13f76258 100644 --- a/vendor/symposion/reviews/models.py +++ b/vendor/symposion/reviews/models.py @@ -19,20 +19,6 @@ from symposion.proposals.models import ProposalBase from symposion.schedule.models import Presentation -def score_expression(): - score = ( - (Decimal(2) * F("plus_two") + F("plus_one")) - - (F("minus_one") + Decimal(2) * F("minus_two")) - ) / ( - F("vote_count") * Decimal(1) - ) - - return Case( - When(vote_count=0, then=Value("0")), # no divide by zero - default=score, - ) - - class Votes(object): ABSTAIN = "0" PLUS_TWO = "+2" @@ -196,7 +182,7 @@ class Review(models.Model): else: # self is not the latest review so we just need to decrement # the comment count - self.proposal.result.comment_count = models.F("comment_count") - 1 + self.proposal.result.comment_count = F("comment_count") - 1 self.proposal.result.save() # in all cases we need to delete the review; let's do it! super(Review, self).delete() @@ -274,6 +260,12 @@ class ProposalResult(models.Model): result, created = cls._default_manager.get_or_create(proposal=proposal) result.update_vote() + def calculate_score(self): + if self.vote_count == 0: + return 0 + else: + return ((2 * self.plus_two + self.plus_one) - (2 * self.minus_two + self.minus_one)) / self.vote_count + def update_vote(self, *a, **k): proposal = self.proposal self.comment_count = Review.objects.filter(proposal=proposal).count() @@ -296,9 +288,8 @@ class ProposalResult(models.Model): self.minus_one = vote_count[VOTES.MINUS_ONE] self.minus_two = vote_count[VOTES.MINUS_TWO] self.vote_count = sum(i[1] for i in vote_count.items()) - self.abstain + self.score = self.calculate_score() self.save() - model = self.__class__ - model._default_manager.filter(pk=self.pk).update(score=score_expression()) class Meta: verbose_name = _("proposal_result")