From 57c77e452bfeb9eaa5ffe43de01aa4e36b489304 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 23 Oct 2018 13:21:58 +0530 Subject: [PATCH] LMS: Course Activity Co-authored-by: Chinmay Pai --- .../course_activity/course_activity.json | 41 ++++++++++-- .../doctype/quiz_activity/quiz_activity.json | 16 ++--- erpnext/education/utils.py | 63 ++++++------------- 3 files changed, 63 insertions(+), 57 deletions(-) diff --git a/erpnext/education/doctype/course_activity/course_activity.json b/erpnext/education/doctype/course_activity/course_activity.json index 27089748bb..76c82b50ce 100644 --- a/erpnext/education/doctype/course_activity/course_activity.json +++ b/erpnext/education/doctype/course_activity/course_activity.json @@ -45,7 +45,7 @@ "search_index": 0, "set_only_once": 1, "translatable": 0, - "unique": 1 + "unique": 0 }, { "allow_bulk_edit": 0, @@ -115,6 +115,39 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "content_type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Content Type", + "length": 0, + "no_copy": 0, + "options": "\nArticle\nVideo", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -123,7 +156,7 @@ "collapsible": 0, "columns": 0, "fieldname": "content", - "fieldtype": "Link", + "fieldtype": "Dynamic Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -134,7 +167,7 @@ "label": "Content", "length": 0, "no_copy": 0, - "options": "Content", + "options": "content_type", "permlevel": 0, "precision": "", "print_hide": 0, @@ -191,7 +224,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-10-15 17:49:09.157437", + "modified": "2018-10-23 11:53:35.054871", "modified_by": "Administrator", "module": "Education", "name": "Course Activity", diff --git a/erpnext/education/doctype/quiz_activity/quiz_activity.json b/erpnext/education/doctype/quiz_activity/quiz_activity.json index 29086f1562..b618cf59e9 100644 --- a/erpnext/education/doctype/quiz_activity/quiz_activity.json +++ b/erpnext/education/doctype/quiz_activity/quiz_activity.json @@ -43,7 +43,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 0, + "set_only_once": 1, "translatable": 0, "unique": 0 }, @@ -62,7 +62,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Student", "length": 0, @@ -72,7 +72,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -137,7 +137,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -191,7 +191,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Quiz", "length": 0, @@ -304,7 +304,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 0, + "set_only_once": 1, "translatable": 0, "unique": 0 }, @@ -322,7 +322,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Score", "length": 0, @@ -351,7 +351,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-10-19 16:27:05.321554", + "modified": "2018-10-23 11:06:31.779929", "modified_by": "Administrator", "module": "Education", "name": "Quiz Activity", diff --git a/erpnext/education/utils.py b/erpnext/education/utils.py index 3962758b86..c6ca6ef3c1 100644 --- a/erpnext/education/utils.py +++ b/erpnext/education/utils.py @@ -98,55 +98,28 @@ def add_quiz_activity(enrollment, quiz, score, answers, quiz_response): frappe.db.commit() @frappe.whitelist() -def add_activity(content_type, **kwargs): - activity_does_not_exists, activity = check_entry_exists(kwargs.get('program')) - if activity_does_not_exists: - current_activity = frappe.get_doc({ - "doctype": "Course Activity", - "student_id": get_student_id(frappe.session.user), - "program_name": kwargs.get('program'), - "lms_activity": [{ - "course_name": kwargs.get('course'), - "content_name": kwargs.get('content'), - "status": "Completed" - }] - }) - if content_type == "Quiz": - activity = current_activity.lms_activity[-1] - activity.quiz_score = kwargs.get('score') - activity.selected_options = ", ".join(kwargs.get('selected_options')) - activity.result = ", ".join([str(item) for item in kwargs.get('result')]), - activity.status = "Passed" - current_activity.save() - frappe.db.commit() +def add_activity(content_type, content, course, program): + enrollment = get_course_enrollment(course, frappe.session.user) + if check_activity_exists(enrollment['name'], content_type, content): + pass else: - if content_type in ("Article", "Video"): - lms_activity_list = [[data.course_name, data.content_name] for data in activity.lms_activity] - if not [kwargs.get('course'), kwargs.get('content')] in lms_activity_list: - activity.append("lms_activity", { - "course_name": kwargs.get('course'), - "content_name": kwargs.get('content'), - "status": "Completed" - }) - else: - activity.append("lms_activity", { - "course_name": kwargs.get('course'), - "content_name": kwargs.get('content'), - "status": "Passed", - "quiz_score": kwargs.get('score'), - "selected_options": ", ".join(kwargs.get('selected_options')), - "result": ", ".join([str(item) for item in kwargs.get('result')]) + course_actvity = frappe.get_doc({ + "doctype": "Course Activity", + "enrollment": enrollment['name'], + "content_type": content_type, + "content": content, + "date": frappe.utils.datetime.datetime.now() }) - activity.save() + course_actvity.save() frappe.db.commit() -def check_entry_exists(program): - try: - activity_name = frappe.get_all("Course Activity", filters={"student_id": get_student_id(frappe.session.user), "program_name": program})[0] - except IndexError: - return True, None +def check_activity_exists(enrollment, content_type, content): + activity = frappe.get_list("Course Activity", filters={"enrollment": enrollment, "content_type": content_type, "content": content}) + if activity: + return True else: - return None, frappe.get_doc("Course Activity", activity_name) + return False + def get_program(): program_list = frappe.get_list("Program", filters={"is_published": is_published}) @@ -182,6 +155,7 @@ def get_course_enrollment(course, email): try: return frappe.get_list("Course Enrollment", filters={'course':course, 'student':student_id})[0] except IndexError: + frappe.throw("The user is not enrolled for the course {course}".format(course=course)) return None def get_student_id(email=None): @@ -190,7 +164,6 @@ def get_student_id(email=None): :param user: a user email address """ try: - print("email is",email) return frappe.get_all('Student', filters={'student_email_id': email}, fields=['name'])[0].name except IndexError: frappe.throw("Student with email {0} does not exist".format(email))