Quiz eval utils

This commit is contained in:
scmmishra 2018-10-19 14:06:14 +05:30 committed by Aditya Hase
parent 0d4135ec2b
commit 4f439ec4dd
6 changed files with 37 additions and 21 deletions

View File

@ -7,4 +7,14 @@ import frappe
from frappe.model.document import Document
class Question(Document):
pass
def get_answer(self):
options = self.get_all_children()
answers = [item.option for item in options if item.is_correct == True]
if len(answers) == 0:
frappe.throw("No correct answer is set for {0}".format(self.name))
return None
elif len(answers) == 1:
return answers[0]
else:
return answers

View File

@ -13,8 +13,13 @@ class Quiz(Document):
pass
def evaluate_quiz(self):
pass
def evaluate(self, response_dict):
self.get_questions()
answers = {q.name:q.get_answer() for q in self.get_questions()}
print(response_dict)
print(type(response_dict))
print(answers)
print(type(answers))
def get_questions(self):

View File

@ -72,19 +72,26 @@ def evaluate_quiz(quiz_response, **kwargs):
"""
import json
quiz_response = json.loads(quiz_response)
correct_answers = [frappe.get_value('Question', name, 'correct_options') for name in quiz_response.keys()]
selected_options = quiz_response.values()
result = [selected == correct for selected, correct in zip(selected_options, correct_answers)]
quiz_name = kwargs.get('quiz')
try:
score = int((result.count(True)/len(selected_options))*100)
except ZeroDivisionError:
score = 0
quiz = frappe.get_doc("Quiz", quiz_name)
result = quiz.evaluate(quiz_response)
return "Hello"
except frappe.DoesNotExistError:
frappe.throw("Quiz {0} does not exist".format(quiz_name))
# correct_answers = [frappe.get_value('Question', name, 'correct_options') for name in quiz_response.keys()]
# selected_options = quiz_response.values()
# result = [selected == correct for selected, correct in zip(selected_options, correct_answers)]
# try:
# score = int((result.count(True)/len(selected_options))*100)
# except ZeroDivisionError:
# score = 0
kwargs['selected_options'] = selected_options
kwargs['result'] = result
kwargs['score'] = score
add_activity('Quiz', **kwargs)
return score
# kwargs['selected_options'] = selected_options
# kwargs['result'] = result
# kwargs['score'] = score
# add_activity('Quiz', **kwargs)
# return score
@frappe.whitelist()
def add_activity(content_type, **kwargs):

View File

@ -8,7 +8,7 @@ function submitQuiz() {
method: "erpnext.education.utils.evaluate_quiz",
args: {
"quiz_response": form_object,
"content": $('#content-holder').data('content'),
"quiz": $('#content-holder').data('content'),
"course": $('#content-holder').data('course'),
"program": $('#content-holder').data('program')
},

View File

@ -24,9 +24,6 @@ def get_context(context):
context.next_content_type, context.next_content = get_next_content(content_name, content_type, current_course.get_content_info())
if content_type == "Quiz":
context.questions = current_content.get_questions()
print(content_type)
print(current_content.title)
print(context.questions)
def get_next_content(c_name, c_type, content_list):
try:

View File

@ -2,9 +2,6 @@
<div class="question mt-4" id="{{ question.question }}" data-question="{{ question.name }}">
<h5>{{ loop_index }}{{ question.question }}</h5>
<div class="options ml-2">
<div class="form-check pb-1 hidden">
<input class="form-check-input" type="radio" name="{{ question['id'] }}" value="0" checked>
</div>
{% for option in question.options %}
<div class="form-check pb-1">
<input class="form-check-input" type="radio" name="{{ question.name }}" id="{{loop_index}}-{{ option.option }}" value="{{ option.option }}">