Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 55 additions & 41 deletions survey/viewLogic.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -228,48 +240,50 @@ 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"]
+ " - "
+ _("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,
Expand Down
29 changes: 12 additions & 17 deletions templates/survey/questions.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{% extends 'survey/base.html' %}

{% load bootstrap4 %}
{% load apptags %}

{% load static %}

Expand Down Expand Up @@ -31,17 +32,21 @@
{% endif %}

<div class="m-2 p-3">
<div class="card-title">
<span data-bs-toggle="tooltip" title="{{ question_tooltip | safe }}">{{ question | safe }}</span>
</div>
<form action="{{ action }}" method="post" class="form" id="survey-question-form">
{% csrf_token %}

{% bootstrap_form form exclude="feedback" %}
{% for key, form in forms.items %}
<div class="card-title">
<span data-bs-toggle="tooltip" title="{{ questions_tooltips|get_item:key }}">{{ questions|get_item:key }}</span>
</div>
{% bootstrap_form form exclude="feedback" %}

<p class="select-multi-info text-muted pl-4 small" style="display: none;">
** {{ _('Multiple answers are possible.') }}
</p>

<p class="select-multi-info text-muted pl-4 small" style="display: none;">
** {{ _('Multiple answers are possible.') }}
</p>
<div class="border-bottom"></div>
{% endfor %}

{% buttons %}
<div class="form-group pt-4">
Expand Down Expand Up @@ -79,16 +84,6 @@
</div>
</div>
{% endbuttons %}

<div class="form-group pt-4">
{% bootstrap_field form.feedback label_class="feedback-label" %}
<p class="select-multi-info text-muted pl-4 mb-0 small">
* {{ _('This text field should not be used to answer the question.') }}
</p>
<p class="select-multi-info text-muted pl-4 mb-0 small">
** {{ _('Please do not provide any sensitive or confidential information referring to your identity.') }}
</p>
</div>
</form>
</div>

Expand Down