diff --git a/lms/lms/doctype/lms_quiz/lms_quiz.py b/lms/lms/doctype/lms_quiz/lms_quiz.py index 6d5b4a47..3b706ffd 100644 --- a/lms/lms/doctype/lms_quiz/lms_quiz.py +++ b/lms/lms/doctype/lms_quiz/lms_quiz.py @@ -81,10 +81,8 @@ def quiz_summary(quiz, results): for point in result["is_correct"]: correct = correct and point - result["result"] = "Right" if correct else "Wrong" + result["is_correct"] = correct score += correct - - del result["is_correct"] del result["question_index"] frappe.get_doc( diff --git a/lms/lms/doctype/lms_quiz_result/lms_quiz_result.json b/lms/lms/doctype/lms_quiz_result/lms_quiz_result.json index 113f0612..93487a38 100644 --- a/lms/lms/doctype/lms_quiz_result/lms_quiz_result.json +++ b/lms/lms/doctype/lms_quiz_result/lms_quiz_result.json @@ -7,33 +7,36 @@ "field_order": [ "question", "answer", - "result" + "is_correct" ], "fields": [ { "fieldname": "question", "fieldtype": "Text", "in_list_view": 1, - "label": "Question" - }, - { - "fieldname": "result", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Result", - "options": "Right\nWrong" + "label": "Question", + "read_only": 1 }, { "fieldname": "answer", "fieldtype": "Data", "in_list_view": 1, - "label": "Users Response" + "label": "Users Response", + "read_only": 1 + }, + { + "default": "0", + "fieldname": "is_correct", + "fieldtype": "Check", + "in_list_view": 1, + "label": "Is Correct", + "read_only": 1 } ], "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2021-10-12 10:32:45.139121", + "modified": "2022-11-24 11:15:45.931119", "modified_by": "Administrator", "module": "LMS", "name": "LMS Quiz Result", @@ -41,5 +44,6 @@ "permissions": [], "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/lms/patches.txt b/lms/patches.txt index 872f96c9..afbf07ed 100644 --- a/lms/patches.txt +++ b/lms/patches.txt @@ -38,3 +38,4 @@ lms.patches.v0_0.set_member_in_progress #09-11-2022 lms.patches.v0_0.convert_progress_to_float lms.patches.v0_0.add_pages_to_nav #11-11-2022 lms.patches.v0_0.change_role_names +lms.patches.v0_0.quiz_submission_result diff --git a/lms/patches/v0_0/quiz_submission_result.py b/lms/patches/v0_0/quiz_submission_result.py new file mode 100644 index 00000000..493144c7 --- /dev/null +++ b/lms/patches/v0_0/quiz_submission_result.py @@ -0,0 +1,11 @@ +import frappe + + +def execute(): + frappe.reload_doc("lms", "doctype", "lms_quiz_submission") + frappe.reload_doc("lms", "doctype", "lms_quiz_result") + results = frappe.get_all("LMS Quiz Result", fields=["name", "result"]) + + for result in results: + value = 1 if result.result == "Right" else 0 + frappe.db.set_value("LMS Quiz Result", result.name, "is_correct", value) diff --git a/lms/public/css/style.css b/lms/public/css/style.css index 23933d60..fdb0dc48 100644 --- a/lms/public/css/style.css +++ b/lms/public/css/style.css @@ -1874,6 +1874,7 @@ select { background-repeat: no-repeat; background-size: 0.75rem; padding-right: 2.5rem; + text-align: left; -webkit-print-color-adjust: exact; } diff --git a/lms/www/assignments/assignment.html b/lms/www/assignments/assignment.html index f56cb38a..f319ba61 100644 --- a/lms/www/assignments/assignment.html +++ b/lms/www/assignments/assignment.html @@ -7,57 +7,72 @@ {% block content %}
-
+
{{ _("Assignment Grading") }}
-
- - {{ _("Open Attachment") }} - - - -
- - {{ _("Member") }}: - - - {{ assignment.member_name }} - -
-
- {% set course_title = frappe.db.get_value("LMS Course", assignment.course, "title") %} - - {{ _("Course") }}: - - - {{ course_title }} - -
-
- {% set lesson_title = frappe.db.get_value("Course Lesson", assignment.lesson, "title") %} - {{ _("Lesson") }}: - - {{ lesson_title }} - -
- -
{{ _("Comments") }}:
-
-
- -
-
- -
- {{ _("Save") }} -
-
+ {{ AssignmentForm(assignment) }}
+ {% endblock %} + + +{% macro AssignmentForm(assignment) %} +{% set course_title = frappe.db.get_value("LMS Course", assignment.course, "title") %} +{% set lesson_title = frappe.db.get_value("Course Lesson", assignment.lesson, "title") %} + +
+ +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ + +
+ +
+ +
+ +
+ + + +
+
+
+
+ +
+ + +
+
+
+ +
+ + {{ _("Open Attachment") }} + + +
+
+{% endmacro %} diff --git a/lms/www/assignments/assignment.js b/lms/www/assignments/assignment.js index aba82d71..418e7567 100644 --- a/lms/www/assignments/assignment.js +++ b/lms/www/assignments/assignment.js @@ -29,11 +29,17 @@ const set_result = () => { }; const save_assignment = (e) => { + e.preventDefault(); + if (!["Pass", "Fail"].includes(this.result)) + frappe.throw({ + title: __("Not Graded"), + message: __("Please grade the assignment."), + }); frappe.call({ method: "lms.lms.doctype.lesson_assignment.lesson_assignment.grade_assignment", args: { name: $(e.currentTarget).data("assignment"), - result: self.result, + result: this.result, comments: $("#comments").val(), }, callback: (data) => { @@ -41,6 +47,9 @@ const save_assignment = (e) => { message: __("Saved"), indicator: "green", }); + setTimeout(() => { + window.history.go(-2); + }, 2000); }, }); }; diff --git a/lms/www/batch/learn.js b/lms/www/batch/learn.js index dc79ee5b..03686996 100644 --- a/lms/www/batch/learn.js +++ b/lms/www/batch/learn.js @@ -234,6 +234,7 @@ const check_answer = (e = undefined) => { const parse_options = () => { let answer = []; let is_correct = []; + $(".active-question input").each((i, element) => { let correct = parseInt($(element).attr("data-correct")); if ($(element).prop("checked")) { @@ -247,6 +248,7 @@ const parse_options = () => { : add_icon(element, "minus-circle"); } }); + return [answer, is_correct]; }; diff --git a/lms/www/classes/class.py b/lms/www/classes/class.py index 14f598db..7ff4337d 100644 --- a/lms/www/classes/class.py +++ b/lms/www/classes/class.py @@ -21,6 +21,7 @@ def get_context(context): ["name", "title", "start_date", "end_date", "description"], as_dict=True, ) + context.published_courses = frappe.get_all( "LMS Course", {"published": 1}, ["name", "title"] ) diff --git a/lms/www/classes/progress.html b/lms/www/classes/progress.html index 70d69d79..70f89eb4 100644 --- a/lms/www/classes/progress.html +++ b/lms/www/classes/progress.html @@ -79,8 +79,8 @@ {% set submission = frappe.db.get_value("LMS Quiz Submission", filters, ["score", "creation"], as_dict=True) %} {% set total_questions = frappe.db.count("LMS Quiz Question", {"parent": quiz.name}) %} - - + + @@ -108,26 +108,28 @@ {% set status = submission.status %} {% set color = "green" if status == "Pass" else "red" if status == "Fail" else "orange" %} - - + + - {{ _("Assignment") }} + {{ _("Assignment") }} + + {{ assignment.title }} + {% if has_submitted %} - {% if status == "Not Graded" %} - {{ _("Grade") }} - {% else %}
{{ status }}
- {% endif %} + {{ frappe.utils.format_date(submission.creation, "medium") }} + {% else %} - +
{{ _("Not Attempted") }} diff --git a/lms/www/quiz_result/quiz_result.html b/lms/www/quiz_result/quiz_result.html new file mode 100644 index 00000000..b992110c --- /dev/null +++ b/lms/www/quiz_result/quiz_result.html @@ -0,0 +1,33 @@ +{% extends "templates/base.html" %} +{% block title %} + {{ _("Quiz Submission") }} +{% endblock %} + + +{% block content %} +
+
+
+
+ {{ _("Quiz Submission") }} +
+ {% for question in questions %} +
+ {{ question.question }} +
+ {{ question.is_correct }} + {{ question.answer }} + {% for i in range(1,5) %} + {% set num = frappe.utils.cstr(i) %} + {% set option = question["option_" + num] %} + {% if question["option_" + num] %} +
+ {{ question["option_" + num] }} +
+ {% endif %} + {% endfor %} + {% endfor %} +
+
+
+{% endblock %} diff --git a/lms/www/quiz_result/quiz_result.py b/lms/www/quiz_result/quiz_result.py new file mode 100644 index 00000000..62e67400 --- /dev/null +++ b/lms/www/quiz_result/quiz_result.py @@ -0,0 +1,26 @@ +import frappe + + +def get_context(context): + context.no_cache = 1 + name = frappe.form_dict["subname"] + + context.submission = frappe.db.get_value( + "LMS Quiz Submission", name, ["name", "quiz"], as_dict=1 + ) + + questions = frappe.get_all( + "LMS Quiz Result", {"parent": name}, ["question", "is_correct", "answer"] + ) + + for question in questions: + options = frappe.db.get_value( + "LMS Quiz Question", + {"question": question.question}, + ["option_1", "option_2", "option_3", "option_4"], + as_dict=1, + ) + question.update(options) + question.answer = question.answer.split(",") + + context.questions = questions