From 807f77755ed6983d25ee3f1a9237707948405537 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 24 Nov 2022 18:57:45 +0530 Subject: [PATCH] feat: activity details in class --- lms/hooks.py | 1 + lms/lms/doctype/lms_quiz/lms_quiz.py | 6 +- .../lms_quiz_result/lms_quiz_result.json | 26 ++--- lms/patches.txt | 1 + lms/patches/v0_0/quiz_submission_result.py | 10 ++ lms/public/css/style.css | 1 + lms/public/js/html2canvas.js | 2 +- lms/www/assignments/assignment.html | 98 +++++++++++-------- lms/www/assignments/assignment.js | 11 ++- lms/www/assignments/assignment.py | 4 +- lms/www/batch/learn.js | 1 + lms/www/classes/class.py | 1 + lms/www/classes/progress.html | 20 ++-- lms/www/quiz_result/quiz_result.html | 33 +++++++ lms/www/quiz_result/quiz_result.py | 17 ++++ 15 files changed, 162 insertions(+), 70 deletions(-) create mode 100644 lms/patches/v0_0/quiz_submission_result.py create mode 100644 lms/www/quiz_result/quiz_result.html create mode 100644 lms/www/quiz_result/quiz_result.py diff --git a/lms/hooks.py b/lms/hooks.py index 52a1a34f..6786785d 100644 --- a/lms/hooks.py +++ b/lms/hooks.py @@ -172,6 +172,7 @@ website_route_rules = [ "to_route": "/classes/progress", }, {"from_route": "/assignments/", "to_route": "assignments/assignment"}, + {"from_route": "/quiz-result/", "to_route": "quiz_result/quiz_result"}, ] website_redirects = [ diff --git a/lms/lms/doctype/lms_quiz/lms_quiz.py b/lms/lms/doctype/lms_quiz/lms_quiz.py index 6d5b4a47..6ae83f8c 100644 --- a/lms/lms/doctype/lms_quiz/lms_quiz.py +++ b/lms/lms/doctype/lms_quiz/lms_quiz.py @@ -77,14 +77,12 @@ def quiz_summary(quiz, results): result["question"] = frappe.db.get_value( "LMS Quiz Question", {"parent": quiz, "idx": result["question_index"]}, ["question"] ) - + print(result) 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..1c932ed9 --- /dev/null +++ b/lms/patches/v0_0/quiz_submission_result.py @@ -0,0 +1,10 @@ +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/public/js/html2canvas.js b/lms/public/js/html2canvas.js index e48005c7..d953dc83 100644 --- a/lms/public/js/html2canvas.js +++ b/lms/public/js/html2canvas.js @@ -6012,7 +6012,7 @@ if (isSelectElement(element)) { return new SelectElementContainer(context, element); } - if (isTextareaElement(element)) { + if (isElement(element)) { return new TextareaElementContainer(context, element); } if (isIFrameElement(element)) { diff --git a/lms/www/assignments/assignment.html b/lms/www/assignments/assignment.html index f56cb38a..5f682847 100644 --- a/lms/www/assignments/assignment.html +++ b/lms/www/assignments/assignment.html @@ -7,57 +7,69 @@ {% block content %}
-
+
{{ _("Assignment Grading") }}
-
- - {{ _("Open Attachment") }} - - + {% set course_title = frappe.db.get_value("LMS Course", assignment.course, "title") %} + {% set lesson_title = frappe.db.get_value("Course Lesson", assignment.lesson, "title") %} -
- - {{ _("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") }} +
+ + {{ _("Open Attachment") }} + +
-
+
+ {% endblock %} diff --git a/lms/www/assignments/assignment.js b/lms/www/assignments/assignment.js index aba82d71..232c66d8 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/assignments/assignment.py b/lms/www/assignments/assignment.py index dbbd5509..b7c8094c 100644 --- a/lms/www/assignments/assignment.py +++ b/lms/www/assignments/assignment.py @@ -6,7 +6,8 @@ from frappe import _ def get_context(context): context.no_cache = 1 assignment = frappe.form_dict["assignment"] - + print("assignment") + print(assignment) if not has_course_moderator_role(): message = "Only Moderators have access to this page." if frappe.session.user == "Guest": @@ -20,3 +21,4 @@ def get_context(context): ["assignment", "comments", "status", "name", "member_name", "course", "lesson"], as_dict=True, ) + print("call twice") diff --git a/lms/www/batch/learn.js b/lms/www/batch/learn.js index dc79ee5b..ff158611 100644 --- a/lms/www/batch/learn.js +++ b/lms/www/batch/learn.js @@ -247,6 +247,7 @@ const parse_options = () => { : add_icon(element, "minus-circle"); } }); + console.log(answer, is_correct) 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..77e32f57 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..21b437dd --- /dev/null +++ b/lms/www/quiz_result/quiz_result.py @@ -0,0 +1,17 @@ +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