Quiz eval utils
This commit is contained in:
parent
0d4135ec2b
commit
4f439ec4dd
@ -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
|
@ -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):
|
||||
|
@ -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):
|
||||
|
@ -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')
|
||||
},
|
||||
|
@ -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:
|
||||
|
@ -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 }}">
|
||||
|
Loading…
x
Reference in New Issue
Block a user