From f3bec5cd528bf40dafce738b2ebeb9da30cf54d7 Mon Sep 17 00:00:00 2001 From: Fredrik Jonsson <frjo@xdeb.org> Date: Mon, 19 Aug 2019 14:12:28 +0200 Subject: [PATCH] Count NA as 0 when calculating review score. --- opentech/apply/review/forms.py | 6 +- .../0020_review_score_calc_update.py | 62 +++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 opentech/apply/review/migrations/0020_review_score_calc_update.py diff --git a/opentech/apply/review/forms.py b/opentech/apply/review/forms.py index ba6e382d6..8cf02101b 100644 --- a/opentech/apply/review/forms.py +++ b/opentech/apply/review/forms.py @@ -84,8 +84,10 @@ class ReviewModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass) for field in self.instance.score_fields: score = data.get(field.id)[1] - if score != NA: - scores.append(score) + # Include NA answers as 0. + if score == NA: + score = 0 + scores.append(score) try: return sum(scores) / len(scores) diff --git a/opentech/apply/review/migrations/0020_review_score_calc_update.py b/opentech/apply/review/migrations/0020_review_score_calc_update.py new file mode 100644 index 000000000..a56907972 --- /dev/null +++ b/opentech/apply/review/migrations/0020_review_score_calc_update.py @@ -0,0 +1,62 @@ +# Generated by Django 2.0.13 on 2019-08-19 11:10 + +from django.db import migrations + +from opentech.apply.review.models import Review +from opentech.apply.review.options import NA + + +def review_score_update(apps, schema_editor): + for review in Review.objects.all(): + # Disable auto_now on "updated_at" field so date is not changed. + for field in review._meta.local_fields: + if field.name == 'updated_at': + field.auto_now = False + # Update the score and save. + scores = list() + for field in review.score_fields: + score = review.form_data.get(field.id)[1] + # Include NA answers as 0. + if score == NA: + score = 0 + scores.append(score) + + try: + review.score = sum(scores) / len(scores) + except ZeroDivisionError: + review.score = NA + + review.save() + + +def review_score_revert(apps, schema_editor): + for review in Review.objects.all(): + # Disable auto_now on "updated_at" field so date is not changed. + for field in review._meta.local_fields: + if field.name == 'updated_at': + field.auto_now = False + # Update the score and save. + scores = list() + for field in review.score_fields: + score = review.form_data.get(field.id)[1] + # Exclude NA answers. + if score != NA: + scores.append(score) + + try: + review.score = sum(scores) / len(scores) + except ZeroDivisionError: + review.score = NA + + review.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('review', '0019_replace_existing_author_field'), + ] + + operations = [ + migrations.RunPython(review_score_update, review_score_revert), + ] -- GitLab