Added methods to saving Quiz attempts
This commit is contained in:
parent
76222f7acc
commit
0187b18c06
@ -27,8 +27,19 @@ class Quiz(Document):
|
|||||||
# self.validate_quiz_attempts(enrollment, quiz_name)
|
# self.validate_quiz_attempts(enrollment, quiz_name)
|
||||||
self.get_questions()
|
self.get_questions()
|
||||||
answers = {q.name:q.get_answer() for q in self.get_questions()}
|
answers = {q.name:q.get_answer() for q in self.get_questions()}
|
||||||
correct_answers = {question: (answers[question] == response_dict[question]) for question in response_dict.keys()}
|
correct_answers = {}
|
||||||
return correct_answers, (sum(correct_answers.values()) * 100 ) / len(answers)
|
for key in answers:
|
||||||
|
try:
|
||||||
|
result = (response_dict[key] == answers[key])
|
||||||
|
except:
|
||||||
|
result = False
|
||||||
|
correct_answers[key] = result
|
||||||
|
score = (sum(correct_answers.values()) * 100 ) / len(answers)
|
||||||
|
if score >= self.passing_score:
|
||||||
|
status = "Pass"
|
||||||
|
else:
|
||||||
|
status = "Fail"
|
||||||
|
return correct_answers, score, status
|
||||||
|
|
||||||
|
|
||||||
def get_questions(self):
|
def get_questions(self):
|
||||||
|
@ -72,6 +72,7 @@ export default {
|
|||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.www.academy.evaluate_quiz",
|
method: "erpnext.www.academy.evaluate_quiz",
|
||||||
args: {
|
args: {
|
||||||
|
enrollment: this.$root.$data.enrolledCourses[this.$route.params.course],
|
||||||
quiz_response: this.quizResponse,
|
quiz_response: this.quizResponse,
|
||||||
quiz_name: this.content
|
quiz_name: this.content
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ def get_quiz_without_answers(quiz_name):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def evaluate_quiz(quiz_response, quiz_name):
|
def evaluate_quiz(enrollment, quiz_response, quiz_name):
|
||||||
"""LMS Function: Evaluates a simple multiple choice quiz.
|
"""LMS Function: Evaluates a simple multiple choice quiz.
|
||||||
|
|
||||||
|
|
||||||
@ -89,20 +89,27 @@ def evaluate_quiz(quiz_response, quiz_name):
|
|||||||
"""
|
"""
|
||||||
import json
|
import json
|
||||||
quiz_response = json.loads(quiz_response)
|
quiz_response = json.loads(quiz_response)
|
||||||
|
print(quiz_response)
|
||||||
quiz = frappe.get_doc("Quiz", quiz_name)
|
quiz = frappe.get_doc("Quiz", quiz_name)
|
||||||
answers, score = quiz.evaluate(quiz_response, quiz_name)
|
answers, score, status = quiz.evaluate(quiz_response, quiz_name)
|
||||||
|
print("-----------------")
|
||||||
|
print(answers)
|
||||||
|
|
||||||
|
result = {k: ('Correct' if v else 'Wrong') for k,v in answers.items()}
|
||||||
|
result_data = []
|
||||||
|
for key in answers:
|
||||||
|
item = {}
|
||||||
|
item['question'] = key
|
||||||
|
item['quiz_result'] = result[key]
|
||||||
|
try:
|
||||||
|
item['selected_option'] = frappe.get_value('Options', quiz_response[key], 'option')
|
||||||
|
except:
|
||||||
|
item['selected_option'] = "Unattempted"
|
||||||
|
result_data.append(item)
|
||||||
|
# result_data = [{'question': key, 'selected_option': frappe.get_value('Options', quiz_response[key], 'option'), 'quiz_result': result[key]} for key in answers]
|
||||||
|
|
||||||
|
add_quiz_activity(enrollment, quiz_name, result_data, score, status)
|
||||||
return(score)
|
return(score)
|
||||||
# quiz_name = kwargs.get('quiz')
|
|
||||||
# course_name = kwargs.get('course')
|
|
||||||
# enrollment = get_course_enrollment(course_name, frappe.session.user)
|
|
||||||
# try:
|
|
||||||
# quiz = frappe.get_doc("Quiz", quiz_name)
|
|
||||||
# answers, score = quiz.evaluate(quiz_response, enrollment, quiz_name)
|
|
||||||
# add_quiz_activity(enrollment, quiz_name, score, answers, quiz_response)
|
|
||||||
# return score
|
|
||||||
# except frappe.DoesNotExistError:
|
|
||||||
# frappe.throw("Quiz {0} does not exist".format(quiz_name))
|
|
||||||
# return None
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_completed_courses(email=frappe.session.user):
|
def get_completed_courses(email=frappe.session.user):
|
||||||
@ -189,11 +196,17 @@ def add_activity(enrollment, content_type, content):
|
|||||||
|
|
||||||
def check_activity_exists(enrollment, content_type, content):
|
def check_activity_exists(enrollment, content_type, content):
|
||||||
activity = frappe.get_all("Course Activity", filters={'enrollment': enrollment, 'content_type': content_type, 'content': content})
|
activity = frappe.get_all("Course Activity", filters={'enrollment': enrollment, 'content_type': content_type, 'content': content})
|
||||||
if activity:
|
return bool(activity)
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
def add_quiz_activity(enrollment, quiz_name, result_data, score, status):
|
||||||
def add_quiz_activity(enrollment, quiz, score, answers):
|
quiz_activity = frappe.get_doc({
|
||||||
pass
|
"doctype": "Quiz Activity",
|
||||||
|
"enrollment": enrollment,
|
||||||
|
"quiz": quiz_name,
|
||||||
|
"result": result_data,
|
||||||
|
"score": score,
|
||||||
|
"status": status
|
||||||
|
})
|
||||||
|
quiz_activity.save()
|
||||||
|
print(quiz_activity)
|
||||||
|
frappe.db.commit()
|
Loading…
x
Reference in New Issue
Block a user