From fd8755ac93881e866ffdcb38502580102b74dbb3 Mon Sep 17 00:00:00 2001 From: Ruslan Baidan Date: Thu, 23 Nov 2023 11:20:41 +0100 Subject: [PATCH] Added an exaple of making multiple questions per page with use the section as the aggregator. --- survey/viewLogic.py | 96 +++++++++++++++++++-------------- templates/survey/questions.html | 29 +++++----- 2 files changed, 67 insertions(+), 58 deletions(-) diff --git a/survey/viewLogic.py b/survey/viewLogic.py index d90e36f4..b394f3ee 100644 --- a/survey/viewLogic.py +++ b/survey/viewLogic.py @@ -158,25 +158,37 @@ def handle_question_answers_request( ) -> Union[Dict, SurveyUser]: current_sequence = get_sequence_by_user_and_index(user, question_index) current_question = current_sequence.question + questions_group = SurveyQuestion.objects.filter( + section=current_question.section + ) does_map_exist = does_answers_questions_map_exist() + question_answers = {} + tuple_answers = {} + current_questions = {} + current_questions_tooltips = {} try: - question_answers = current_question.surveyquestionanswer_set.filter( - is_active=True - ) - tuple_answers = get_answer_choices(current_question, user.chosen_lang) + for question in questions_group: + current_questions[question.id] = _(question.label) + current_questions_tooltips[question.id] = _(question.tooltip) + question_answers[question.id] = question.surveyquestionanswer_set.filter( + is_active=True + ) + tuple_answers[question.id] = get_answer_choices(question, user.chosen_lang) except Exception as e: logger.error(e) raise e free_text_answer_id = 0 - for question_answer in question_answers: - if question_answer.atype == "T": - free_text_answer_id = question_answer.id + # TODO: adjust here.... + # for question_answer in question_answers: + # if question_answer.atype == "T": + # free_text_answer_id = question_answer.id translation.activate(user.chosen_lang) - + forms = {} if request.method == "POST": + # TODO: adjust here.... form = AnswerMChoice( tuple_answers, data=request.POST, @@ -228,38 +240,40 @@ def handle_question_answers_request( return user else: - form = AnswerMChoice( - tuple_answers, - lang=user.chosen_lang, - answers_field_type=current_question.qtype, - question_answers=question_answers, - ) + for question in questions_group: + forms[question.id] = AnswerMChoice( + tuple_answers[question.id], + lang=user.chosen_lang, + answers_field_type=question.qtype, + question_answers=question_answers[question.id], + ) - user_answers = SurveyUserAnswer.objects.filter( - user=user, answer__question=current_question + user_answers = SurveyUserAnswer.objects.filter( + user=user, answer__question=question + ) + selected_answers = [] + for user_answer in user_answers: + if user_answer.uvalue == "1": + selected_answers.append(user_answer.answer.id) + if user_answer.content: + forms[question.id].set_answer_content(user_answer.content) + + # user_feedback = SurveyUserFeedback.objects.filter( + # user=user, question=current_question + # )[:1] + + forms[question.id].set_answers(selected_answers) + # if user_feedback: + # forms[question.id].set_feedback(user_feedback[0].feedback) + + for question in questions_group: + unique_answers = SurveyQuestionAnswer.objects.filter( + question=question, uniqueAnswer=True ) - selected_answers = [] - for user_answer in user_answers: - if user_answer.uvalue == "1": - selected_answers.append(user_answer.answer.id) - if user_answer.content: - form.set_answer_content(user_answer.content) - - user_feedback = SurveyUserFeedback.objects.filter( - user=user, question=current_question - )[:1] - - form.set_answers(selected_answers) - if user_feedback: - form.set_feedback(user_feedback[0].feedback) - - uniqueAnswers = SurveyQuestionAnswer.objects.filter( - question=current_question, uniqueAnswer=True - ) - form.set_unique_answers( - ",".join(str(uniqueAnswer.id) for uniqueAnswer in uniqueAnswers) - ) - form.set_free_text_answer_id(free_text_answer_id) + forms[question.id].set_unique_answers( + ",".join(str(uniqueAnswer.id) for uniqueAnswer in unique_answers) + ) + forms[question.id].set_free_text_answer_id(free_text_answer_id) return { "title": CUSTOM["tool_name"] @@ -267,9 +281,9 @@ def handle_question_answers_request( + _("Question") + " " + str(question_index), - "question": _(current_question.label), - "question_tooltip": _(current_question.tooltip), - "form": form, + "questions": current_questions, + "questions_tooltips": current_questions_tooltips, + "forms": forms, "action": "/survey/question/" + str(question_index), "user": user, "current_question_index": question_index, diff --git a/templates/survey/questions.html b/templates/survey/questions.html index 23e25034..729aff79 100644 --- a/templates/survey/questions.html +++ b/templates/survey/questions.html @@ -1,6 +1,7 @@ {% extends 'survey/base.html' %} {% load bootstrap4 %} +{% load apptags %} {% load static %} @@ -31,17 +32,21 @@ {% endif %}
-
- {{ question | safe }} -
{% csrf_token %} - {% bootstrap_form form exclude="feedback" %} + {% for key, form in forms.items %} +
+ {{ questions|get_item:key }} +
+ {% bootstrap_form form exclude="feedback" %} + + - +
+ {% endfor %} {% buttons %}
@@ -79,16 +84,6 @@
{% endbuttons %} - -
- {% bootstrap_field form.feedback label_class="feedback-label" %} -

- * {{ _('This text field should not be used to answer the question.') }} -

-

- ** {{ _('Please do not provide any sensitive or confidential information referring to your identity.') }} -

-