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