Quiz eval utils
This commit is contained in:
parent
0d4135ec2b
commit
4f439ec4dd
@ -7,4 +7,14 @@ import frappe
|
|||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
|
|
||||||
class Question(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
|
pass
|
||||||
|
|
||||||
|
|
||||||
def evaluate_quiz(self):
|
def evaluate(self, response_dict):
|
||||||
pass
|
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):
|
def get_questions(self):
|
||||||
|
@ -72,19 +72,26 @@ def evaluate_quiz(quiz_response, **kwargs):
|
|||||||
"""
|
"""
|
||||||
import json
|
import json
|
||||||
quiz_response = json.loads(quiz_response)
|
quiz_response = json.loads(quiz_response)
|
||||||
correct_answers = [frappe.get_value('Question', name, 'correct_options') for name in quiz_response.keys()]
|
quiz_name = kwargs.get('quiz')
|
||||||
selected_options = quiz_response.values()
|
|
||||||
result = [selected == correct for selected, correct in zip(selected_options, correct_answers)]
|
|
||||||
try:
|
try:
|
||||||
score = int((result.count(True)/len(selected_options))*100)
|
quiz = frappe.get_doc("Quiz", quiz_name)
|
||||||
except ZeroDivisionError:
|
result = quiz.evaluate(quiz_response)
|
||||||
score = 0
|
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['selected_options'] = selected_options
|
||||||
kwargs['result'] = result
|
# kwargs['result'] = result
|
||||||
kwargs['score'] = score
|
# kwargs['score'] = score
|
||||||
add_activity('Quiz', **kwargs)
|
# add_activity('Quiz', **kwargs)
|
||||||
return score
|
# return score
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def add_activity(content_type, **kwargs):
|
def add_activity(content_type, **kwargs):
|
||||||
|
@ -8,7 +8,7 @@ function submitQuiz() {
|
|||||||
method: "erpnext.education.utils.evaluate_quiz",
|
method: "erpnext.education.utils.evaluate_quiz",
|
||||||
args: {
|
args: {
|
||||||
"quiz_response": form_object,
|
"quiz_response": form_object,
|
||||||
"content": $('#content-holder').data('content'),
|
"quiz": $('#content-holder').data('content'),
|
||||||
"course": $('#content-holder').data('course'),
|
"course": $('#content-holder').data('course'),
|
||||||
"program": $('#content-holder').data('program')
|
"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())
|
context.next_content_type, context.next_content = get_next_content(content_name, content_type, current_course.get_content_info())
|
||||||
if content_type == "Quiz":
|
if content_type == "Quiz":
|
||||||
context.questions = current_content.get_questions()
|
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):
|
def get_next_content(c_name, c_type, content_list):
|
||||||
try:
|
try:
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
<div class="question mt-4" id="{{ question.question }}" data-question="{{ question.name }}">
|
<div class="question mt-4" id="{{ question.question }}" data-question="{{ question.name }}">
|
||||||
<h5>{{ loop_index }}{{ question.question }}</h5>
|
<h5>{{ loop_index }}{{ question.question }}</h5>
|
||||||
<div class="options ml-2">
|
<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 %}
|
{% for option in question.options %}
|
||||||
<div class="form-check pb-1">
|
<div class="form-check pb-1">
|
||||||
<input class="form-check-input" type="radio" name="{{ question.name }}" id="{{loop_index}}-{{ option.option }}" value="{{ option.option }}">
|
<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