From 4f439ec4dd3c3ff89dc900797379f6582b81a433 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Fri, 19 Oct 2018 14:06:14 +0530 Subject: [PATCH] Quiz eval utils --- .../education/doctype/question/question.py | 12 +++++++- erpnext/education/doctype/quiz/quiz.py | 9 ++++-- erpnext/education/utils.py | 29 ++++++++++++------- erpnext/www/lms/course.js | 2 +- erpnext/www/lms/course.py | 3 -- erpnext/www/lms/templates/includes/quiz.html | 3 -- 6 files changed, 37 insertions(+), 21 deletions(-) diff --git a/erpnext/education/doctype/question/question.py b/erpnext/education/doctype/question/question.py index 1608fddd8b..048a90b356 100644 --- a/erpnext/education/doctype/question/question.py +++ b/erpnext/education/doctype/question/question.py @@ -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 \ No newline at end of file diff --git a/erpnext/education/doctype/quiz/quiz.py b/erpnext/education/doctype/quiz/quiz.py index 2ecc4856ca..0c3dd30441 100644 --- a/erpnext/education/doctype/quiz/quiz.py +++ b/erpnext/education/doctype/quiz/quiz.py @@ -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): diff --git a/erpnext/education/utils.py b/erpnext/education/utils.py index 6d9c8e21c7..ba54c90fb0 100644 --- a/erpnext/education/utils.py +++ b/erpnext/education/utils.py @@ -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): diff --git a/erpnext/www/lms/course.js b/erpnext/www/lms/course.js index a25d00e471..d24c0247be 100644 --- a/erpnext/www/lms/course.js +++ b/erpnext/www/lms/course.js @@ -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') }, diff --git a/erpnext/www/lms/course.py b/erpnext/www/lms/course.py index 35c28793e7..76b873a2bf 100644 --- a/erpnext/www/lms/course.py +++ b/erpnext/www/lms/course.py @@ -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: diff --git a/erpnext/www/lms/templates/includes/quiz.html b/erpnext/www/lms/templates/includes/quiz.html index 83f598eb1c..1c7c6002cc 100644 --- a/erpnext/www/lms/templates/includes/quiz.html +++ b/erpnext/www/lms/templates/includes/quiz.html @@ -2,9 +2,6 @@
{{ loop_index }}{{ question.question }}
- {% for option in question.options %}