diff --git a/people/templates/people/organisation/detail.html b/people/templates/people/organisation/detail.html
index 5833c4a..c8d62b2 100644
--- a/people/templates/people/organisation/detail.html
+++ b/people/templates/people/organisation/detail.html
@@ -56,22 +56,12 @@
| HQ Country | {{ answer_set.hq_country.name }} |
{% endif %}
- {% if request.user.is_superuser %}
- {% for answer in answer_set.question_answers.all %}
-
- | {{ answer.question }} |
- {{ answer }} |
-
- {% endfor %}
-
- {% else %}
- {% for answer in answer_set.public_answers.all %}
-
- | {{ answer.question }} |
- {{ answer }} |
-
- {% endfor %}
- {% endif %}
+ {% for question, answers in question_answers.items %}
+
+ | {{ question }} |
+ {{ answers }} |
+
+ {% endfor %}
diff --git a/people/templates/people/person/includes/answer_set_full.html b/people/templates/people/person/includes/answer_set_full.html
index 6b2c90d..c879aa6 100644
--- a/people/templates/people/person/includes/answer_set_full.html
+++ b/people/templates/people/person/includes/answer_set_full.html
@@ -31,15 +31,10 @@
| Job Title | {{ answer_set.job_title }} |
{% endif %}
- {% for answer in answer_set.question_answers.all %}
+ {% for question, answers in question_answers.items %}
- | {{ answer.question }} |
- {{ answer }} |
-
-
- {% empty %}
-
- | No records |
+ {{ question }} |
+ {{ answers }} |
{% endfor %}
diff --git a/people/templates/people/person/includes/answer_set_partial.html b/people/templates/people/person/includes/answer_set_partial.html
index 2e96e5f..6802f07 100644
--- a/people/templates/people/person/includes/answer_set_partial.html
+++ b/people/templates/people/person/includes/answer_set_partial.html
@@ -15,15 +15,10 @@
| Organisation | {{ answer_set.organisation }} |
{% endif %}
- {% for answer in answer_set.public_answers.all %}
+ {% for question, answers in question_answers.items %}
- | {{ answer.question }} |
- {{ answer }} |
-
-
- {% empty %}
-
- | No records |
+ {{ question }} |
+ {{ answers }} |
{% endfor %}
diff --git a/people/views/organisation.py b/people/views/organisation.py
index 9f1df88..0a52b56 100644
--- a/people/views/organisation.py
+++ b/people/views/organisation.py
@@ -106,6 +106,20 @@ class OrganisationDetailView(LoginRequiredMixin, DetailView):
context_object_name = 'organisation'
template_name = 'people/organisation/detail.html'
+ def build_question_answers(self, answer_set: models.OrganisationAnswerSet) -> typing.Dict[str, str]:
+ """Collect answers to dynamic questions and join with commas."""
+ show_all = self.request.user.is_superuser
+ questions = models.OrganisationQuestion.objects.all()
+ if not show_all:
+ questions = questions.filter(answer_is_public=True)
+
+ question_answers = {}
+ for question in models.OrganisationQuestion.objects.all():
+ answers = answer_set.question_answers.filter(question=question)
+ question_answers[str(question)] = ', '.join(map(str, answers))
+
+ return question_answers
+
def get_context_data(self,
**kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
"""Add map marker to context."""
@@ -113,6 +127,7 @@ class OrganisationDetailView(LoginRequiredMixin, DetailView):
answerset = self.object.current_answers
context['answer_set'] = answerset
+ context['question_answers'] = self.build_question_answers(answerset)
context['map_markers'] = [{
'name': self.object.name,
'lat': getattr(answerset, 'latitude', None),
diff --git a/people/views/person.py b/people/views/person.py
index 7d20bb2..46ab8f6 100644
--- a/people/views/person.py
+++ b/people/views/person.py
@@ -71,12 +71,28 @@ class ProfileView(LoginRequiredMixin, DetailView):
# pk was not provided in URL
return self.request.user.person
+ def build_question_answers(self, answer_set: models.PersonAnswerSet) -> typing.Dict[str, str]:
+ """Collect answers to dynamic questions and join with commas."""
+ show_all = (self.object.user == self.request.user) or self.request.user.is_superuser
+ questions = models.PersonQuestion.objects.all()
+ if not show_all:
+ questions = questions.filter(answer_is_public=True)
+
+ question_answers = {}
+ for question in models.PersonQuestion.objects.all():
+ answers = answer_set.question_answers.filter(question=question)
+ question_answers[str(question)] = ', '.join(map(str, answers))
+
+ return question_answers
+
def get_context_data(self,
**kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
"""Add current :class:`PersonAnswerSet` to context."""
context = super().get_context_data(**kwargs)
- context['answer_set'] = self.object.current_answers
+ answer_set = self.object.current_answers
+ context['answer_set'] = answer_set
+ context['question_answers'] = self.build_question_answers(answer_set)
context['map_markers'] = [get_map_data(self.object)]
return context