From 353f0f7223ea4dd04b8b99402da92e97b02ef10a Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Thu, 23 Aug 2018 14:29:06 +0100
Subject: [PATCH] Make sure that we can access the comments on the reviews

Adds some improvements to the way we access the data stored on the
objects, always use the definitive id regardless of required or not
---
 opentech/apply/funds/models/mixins.py         | 34 ++++++++-----------
 opentech/apply/review/models.py               |  3 ++
 .../templates/review/review_detail.html       |  2 ++
 opentech/apply/review/views.py                |  2 ++
 4 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/opentech/apply/funds/models/mixins.py b/opentech/apply/funds/models/mixins.py
index 50c3c0ccd..fbc9a879d 100644
--- a/opentech/apply/funds/models/mixins.py
+++ b/opentech/apply/funds/models/mixins.py
@@ -22,33 +22,27 @@ class AccessFormData:
         # values
         data = self.form_data.copy()
         for field_name, field_id in self.must_include.items():
-            response = data.pop(field_name)
-            data[field_id] = response
+            if field_id not in data:
+                response = data[field_name]
+                data[field_id] = response
         return data
 
+    def get_definitive_id(self, id):
+        if id in self.must_include:
+            return self.must_include[id]
+        return id
+
     def field(self, id):
-        try:
-            return self.fields[id]
-        except KeyError as e:
-            try:
-                actual_id = self.must_include[id]
-            except KeyError:
-                raise e
-            else:
-                return self.fields[actual_id]
+        definitive_id = self.get_definitive_id(id)
+        return self.raw_fields[definitive_id]
 
     def data(self, id):
+        definitive_id = self.get_definitive_id(id)
         try:
-            return self.form_data[id]
+            return self.raw_data[definitive_id]
         except KeyError as e:
-            try:
-                transposed_must_include = {v: k for k, v in self.must_include.items()}
-                actual_id = transposed_must_include[id]
-            except KeyError:
-                # We have most likely progressed application forms so the data isnt in form_data
-                return None
-            else:
-                return self.form_data[actual_id]
+            # We have most likely progressed application forms so the data isnt in form_data
+            return None
 
     @property
     def question_field_ids(self):
diff --git a/opentech/apply/review/models.py b/opentech/apply/review/models.py
index e038f2a94..aca752079 100644
--- a/opentech/apply/review/models.py
+++ b/opentech/apply/review/models.py
@@ -127,6 +127,9 @@ class Review(ReviewFormFieldsMixin, BaseStreamForm, AccessFormData, models.Model
     def outcome(self):
         return self.get_recommendation_display()
 
+    def get_comments_display(self, include_question=True):
+        return self.render_answer(self.comment_field.id, include_question=include_question)
+
     def get_absolute_url(self):
         return reverse('apply:reviews:review', args=(self.id,))
 
diff --git a/opentech/apply/review/templates/review/review_detail.html b/opentech/apply/review/templates/review/review_detail.html
index 94182ff8f..8581f9d77 100644
--- a/opentech/apply/review/templates/review/review_detail.html
+++ b/opentech/apply/review/templates/review/review_detail.html
@@ -29,6 +29,8 @@
 </div>
 
 <div class="rich-text rich-text--answers">
+    {{ object.get_comments_display }}
+
     {{ object.output_answers }}
 </div>
 {% endblock %}
diff --git a/opentech/apply/review/views.py b/opentech/apply/review/views.py
index cff082171..a287d9159 100644
--- a/opentech/apply/review/views.py
+++ b/opentech/apply/review/views.py
@@ -130,6 +130,7 @@ class ReviewListView(ListView):
         review_data['score'] = {'question': 'Overall Score', 'answers': list()}
         review_data['recommendation'] = {'question': 'Recommendation', 'answers': list()}
         review_data['revision'] = {'question': 'Revision', 'answers': list()}
+        review_data['comments'] = {'question': 'Comments', 'answers': list()}
 
         responses = self.object_list.count()
 
@@ -137,6 +138,7 @@ class ReviewListView(ListView):
             review_data['title']['answers'].append(str(review.author))
             review_data['score']['answers'].append(str(review.score))
             review_data['recommendation']['answers'].append(review.get_recommendation_display())
+            review_data['comments']['answers'].append(review.get_comments_display(include_question=False))
             if review.for_latest:
                 revision = 'Current'
             else:
-- 
GitLab