diff --git a/lms/lms/doctype/lms_certification/__init__.py b/lms/lms/doctype/course_evaluator/__init__.py similarity index 100% rename from lms/lms/doctype/lms_certification/__init__.py rename to lms/lms/doctype/course_evaluator/__init__.py diff --git a/lms/lms/doctype/course_evaluator/course_evaluator.js b/lms/lms/doctype/course_evaluator/course_evaluator.js new file mode 100644 index 00000000..dd14d6e0 --- /dev/null +++ b/lms/lms/doctype/course_evaluator/course_evaluator.js @@ -0,0 +1,14 @@ +// Copyright (c) 2022, Frappe and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Course Evaluator', { + onload: (frm) => { + frm.set_query('evaluator', function(doc) { + return { + filters: { + "ignore_user_type": 1, + } + }; + }); + } +}); diff --git a/lms/lms/doctype/course_evaluator/course_evaluator.json b/lms/lms/doctype/course_evaluator/course_evaluator.json new file mode 100644 index 00000000..07cbcb20 --- /dev/null +++ b/lms/lms/doctype/course_evaluator/course_evaluator.json @@ -0,0 +1,53 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:evaluator", + "creation": "2022-03-29 10:51:47.667284", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "evaluator", + "schedule" + ], + "fields": [ + { + "fieldname": "evaluator", + "fieldtype": "Link", + "label": "Evaluator", + "options": "User", + "unique": 1 + }, + { + "fieldname": "schedule", + "fieldtype": "Table", + "label": "Schedule", + "options": "Evaluator Schedule" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2022-04-01 15:14:03.300260", + "modified_by": "Administrator", + "module": "LMS", + "name": "Course Evaluator", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/lms/lms/doctype/course_evaluator/course_evaluator.py b/lms/lms/doctype/course_evaluator/course_evaluator.py new file mode 100644 index 00000000..282881e4 --- /dev/null +++ b/lms/lms/doctype/course_evaluator/course_evaluator.py @@ -0,0 +1,38 @@ +# Copyright (c) 2022, Frappe and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +from frappe.model.document import Document + +class CourseEvaluator(Document): + + def validate(self): + self.validate_time_slots() + + def validate_time_slots(self): + for schedule in self.schedule: + if schedule.start_time >= schedule.end_time: + frappe.throw(_("Start Time cannot be greater than End Time")) + + self.validate_overlaps(schedule) + + def validate_overlaps(self, schedule): + same_day_slots = list(filter(lambda x: x.day == schedule.day and x.name != schedule.name , self.schedule)) + overlap = False + + for slot in same_day_slots: + if schedule.start_time <= slot.start_time < schedule.end_time: + overlap = True + if schedule.start_time < slot.end_time <= schedule.end_time: + overlap = True + if slot.start_time < schedule.start_time and schedule.end_time < slot.end_time: + overlap = True + + if overlap: + frappe.throw(_("Slot Times are overlapping for some schedules.")) + +@frappe.whitelist() +def get_schedule(course): + evaluator = frappe.db.get_value("LMS Course", course, "evaluator") + return frappe.get_all("Evaluator Schedule", filters={"parent": evaluator}, fields=["day", "start_time", "end_time"]) diff --git a/lms/lms/doctype/course_evaluator/test_course_evaluator.py b/lms/lms/doctype/course_evaluator/test_course_evaluator.py new file mode 100644 index 00000000..cde3cf75 --- /dev/null +++ b/lms/lms/doctype/course_evaluator/test_course_evaluator.py @@ -0,0 +1,9 @@ +# Copyright (c) 2022, Frappe and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestCourseEvaluator(FrappeTestCase): + pass diff --git a/lms/lms/doctype/evaluator_schedule/__init__.py b/lms/lms/doctype/evaluator_schedule/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lms/lms/doctype/evaluator_schedule/evaluator_schedule.json b/lms/lms/doctype/evaluator_schedule/evaluator_schedule.json new file mode 100644 index 00000000..9821c145 --- /dev/null +++ b/lms/lms/doctype/evaluator_schedule/evaluator_schedule.json @@ -0,0 +1,50 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2022-03-29 11:09:47.726629", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "day", + "start_time", + "end_time" + ], + "fields": [ + { + "fieldname": "day", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Day", + "options": "Sunday\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaturday", + "reqd": 1 + }, + { + "fieldname": "start_time", + "fieldtype": "Time", + "in_list_view": 1, + "label": "Start Time", + "reqd": 1 + }, + { + "fieldname": "end_time", + "fieldtype": "Time", + "in_list_view": 1, + "label": "End Time", + "reqd": 1 + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2022-03-29 12:58:22.229033", + "modified_by": "Administrator", + "module": "LMS", + "name": "Evaluator Schedule", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/lms/lms/doctype/evaluator_schedule/evaluator_schedule.py b/lms/lms/doctype/evaluator_schedule/evaluator_schedule.py new file mode 100644 index 00000000..894126db --- /dev/null +++ b/lms/lms/doctype/evaluator_schedule/evaluator_schedule.py @@ -0,0 +1,8 @@ +# Copyright (c) 2022, Frappe and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class EvaluatorSchedule(Document): + pass diff --git a/lms/lms/doctype/lms_batch_membership/lms_batch_membership.json b/lms/lms/doctype/lms_batch_membership/lms_batch_membership.json index 07061b24..7a8123f0 100644 --- a/lms/lms/doctype/lms_batch_membership/lms_batch_membership.json +++ b/lms/lms/doctype/lms_batch_membership/lms_batch_membership.json @@ -115,7 +115,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2022-03-09 15:17:15.386067", + "modified": "2022-03-29 09:47:05.007133", "modified_by": "Administrator", "module": "LMS", "name": "LMS Batch Membership", @@ -135,7 +135,9 @@ } ], "quick_entry": 1, + "show_title_field_in_link": 1, "sort_field": "modified", "sort_order": "DESC", - "states": [] + "states": [], + "title_field": "member" } \ No newline at end of file diff --git a/lms/lms/doctype/lms_certificate/__init__.py b/lms/lms/doctype/lms_certificate/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lms/lms/doctype/lms_certificate/lms_certificate.js b/lms/lms/doctype/lms_certificate/lms_certificate.js new file mode 100644 index 00000000..6a341a63 --- /dev/null +++ b/lms/lms/doctype/lms_certificate/lms_certificate.js @@ -0,0 +1,14 @@ +// Copyright (c) 2021, FOSS United and contributors +// For license information, please see license.txt + +frappe.ui.form.on('LMS Certificate', { + onload: function (frm) { + frm.set_query("member", function (doc) { + return { + filters: { + "ignore_user_type": 1, + } + }; + }); + } +}); diff --git a/lms/lms/doctype/lms_certification/lms_certification.json b/lms/lms/doctype/lms_certificate/lms_certificate.json similarity index 70% rename from lms/lms/doctype/lms_certification/lms_certification.json rename to lms/lms/doctype/lms_certificate/lms_certificate.json index fc6e58fa..91ec1085 100644 --- a/lms/lms/doctype/lms_certification/lms_certification.json +++ b/lms/lms/doctype/lms_certificate/lms_certificate.json @@ -5,25 +5,19 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "student", - "issue_date", - "column_break_3", "course", + "member", + "member_name", + "column_break_3", + "issue_date", "expiry_date" ], "fields": [ - { - "fieldname": "student", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Student", - "options": "User" - }, { "fieldname": "issue_date", "fieldtype": "Date", - "label": "Issue Date" + "label": "Issue Date", + "reqd": 1 }, { "fieldname": "column_break_3", @@ -35,20 +29,37 @@ "in_list_view": 1, "in_standard_filter": 1, "label": "Course", - "options": "LMS Course" + "options": "LMS Course", + "reqd": 1 }, { "fieldname": "expiry_date", "fieldtype": "Date", "label": "Expiry Date" + }, + { + "fieldname": "member", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Member", + "options": "User", + "reqd": 1 + }, + { + "fetch_from": "member.full_name", + "fieldname": "member_name", + "fieldtype": "Data", + "label": "Member Name", + "read_only": 1 } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2021-08-16 15:47:19.494055", + "modified": "2022-04-06 11:49:36.077370", "modified_by": "Administrator", "module": "LMS", - "name": "LMS Certification", + "name": "LMS Certificate", "owner": "Administrator", "permissions": [ { @@ -66,5 +77,7 @@ ], "sort_field": "modified", "sort_order": "DESC", + "states": [], + "title_field": "member_name", "track_changes": 1 } \ No newline at end of file diff --git a/lms/lms/doctype/lms_certification/lms_certification.py b/lms/lms/doctype/lms_certificate/lms_certificate.py similarity index 79% rename from lms/lms/doctype/lms_certification/lms_certification.py rename to lms/lms/doctype/lms_certificate/lms_certificate.py index 1c5d9f51..0a6e9b19 100644 --- a/lms/lms/doctype/lms_certification/lms_certification.py +++ b/lms/lms/doctype/lms_certificate/lms_certificate.py @@ -8,16 +8,16 @@ from frappe import _ from frappe.utils.pdf import get_pdf from lms.lms.utils import is_certified -class LMSCertification(Document): +class LMSCertificate(Document): def validate(self): - certificates = frappe.get_all("LMS Certification", { - "student": self.student, + certificates = frappe.get_all("LMS Certificate", { + "member": self.member, "course": self.course, "expiry_date": [">", nowdate()] }) if len(certificates): - full_name = frappe.db.get_value("User", self.student, "full_name") + full_name = frappe.db.get_value("User", self.member, "full_name") course_name = frappe.db.get_value("LMS Course", self.course, "title") frappe.throw(_("There is already a valid certificate for user {0} for the course {1}").format(full_name, course_name)) @@ -35,8 +35,8 @@ def create_certificate(course): expiry_date = add_years(nowdate(), expires_after_yrs) certificate = frappe.get_doc({ - "doctype": "LMS Certification", - "student": frappe.session.user, + "doctype": "LMS Certificate", + "member": frappe.session.user, "course": course, "issue_date": nowdate(), "expiry_date": expiry_date diff --git a/lms/lms/doctype/lms_certification/test_lms_certification.py b/lms/lms/doctype/lms_certificate/test_lms_certificate.py similarity index 71% rename from lms/lms/doctype/lms_certification/test_lms_certification.py rename to lms/lms/doctype/lms_certificate/test_lms_certificate.py index 7a757f01..b527f357 100644 --- a/lms/lms/doctype/lms_certification/test_lms_certification.py +++ b/lms/lms/doctype/lms_certificate/test_lms_certificate.py @@ -4,19 +4,19 @@ import frappe import unittest from lms.lms.doctype.lms_course.test_lms_course import new_course -from lms.lms.doctype.lms_certification.lms_certification import create_certificate +from lms.lms.doctype.lms_certificate.lms_certificate import create_certificate from frappe.utils import nowdate, add_years, cint -class TestLMSCertification(unittest.TestCase): +class TestLMSCertificate(unittest.TestCase): def test_certificate_creation(self): course = new_course("Test Certificate", 1, 2) certificate = create_certificate(course.name) - self.assertEqual(certificate.student, "Administrator") + self.assertEqual(certificate.member, "Administrator") self.assertEqual(certificate.course, course.name) self.assertEqual(certificate.issue_date, nowdate()) self.assertEqual(certificate.expiry_date, add_years(nowdate(), cint(course.expiry))) - frappe.db.delete("LMS Certification", certificate.name) + frappe.db.delete("LMS Certificate", certificate.name) frappe.db.delete("LMS Course", course.name) diff --git a/lms/lms/doctype/lms_certificate_evaluation/__init__.py b/lms/lms/doctype/lms_certificate_evaluation/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.js b/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.js new file mode 100644 index 00000000..b10da907 --- /dev/null +++ b/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.js @@ -0,0 +1,32 @@ +// Copyright (c) 2022, Frappe and contributors +// For license information, please see license.txt + +frappe.ui.form.on('LMS Certificate Evaluation', { + refresh: function(frm) { + frm.add_custom_button(__("Create LMS Certificate"), () => { + frappe.model.open_mapped_doc({ + method: "lms.lms.doctype.lms_certificate_evaluation.lms_certificate_evaluation.create_lms_certificate", + frm: frm + }); + }); + }, + + onload: function(frm) { + frm.set_query("course", function(doc) { + return { + filters: { + "enable_certification": true, + "grant_certificate_after": "Evaluation" + } + }; + }); + + frm.set_query('member', function(doc) { + return { + filters: { + "ignore_user_type": 1, + } + }; + }); + } +}); diff --git a/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json b/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json new file mode 100644 index 00000000..e2413f9e --- /dev/null +++ b/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json @@ -0,0 +1,105 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2022-03-29 09:32:16.769951", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "course", + "member", + "member_name", + "date", + "start_time", + "end_time", + "column_break_5", + "rating", + "summary" + ], + "fields": [ + { + "fieldname": "course", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Course", + "options": "LMS Course", + "reqd": 1 + }, + { + "fieldname": "member", + "fieldtype": "Link", + "in_standard_filter": 1, + "label": "Member", + "options": "User", + "reqd": 1 + }, + { + "fieldname": "column_break_5", + "fieldtype": "Column Break" + }, + { + "fieldname": "rating", + "fieldtype": "Rating", + "in_list_view": 1, + "label": "Rating", + "reqd": 1 + }, + { + "fieldname": "summary", + "fieldtype": "Text", + "label": "Summary" + }, + { + "fieldname": "date", + "fieldtype": "Date", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Date", + "reqd": 1 + }, + { + "fieldname": "start_time", + "fieldtype": "Time", + "label": "Start Time", + "reqd": 1 + }, + { + "fieldname": "end_time", + "fieldtype": "Time", + "label": "End Time" + }, + { + "fetch_from": "member.full_name", + "fieldname": "member_name", + "fieldtype": "Data", + "label": "Member Name", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2022-04-06 11:44:17.051279", + "modified_by": "Administrator", + "module": "LMS", + "name": "LMS Certificate Evaluation", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "title_field": "member_name" +} \ No newline at end of file diff --git a/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.py b/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.py new file mode 100644 index 00000000..5cb730f6 --- /dev/null +++ b/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.py @@ -0,0 +1,18 @@ +# Copyright (c) 2022, Frappe and contributors +# For license information, please see license.txt + +import frappe +from frappe.model.document import Document +from frappe.model.mapper import get_mapped_doc + +class LMSCertificateEvaluation(Document): + pass + +@frappe.whitelist() +def create_lms_certificate(source_name, target_doc=None): + doc = get_mapped_doc("LMS Certificate Evaluation", source_name, { + "LMS Certificate Evaluation": { + "doctype": "LMS Certificate" + } + }, target_doc) + return doc diff --git a/lms/lms/doctype/lms_certificate_evaluation/test_lms_certificate_evaluation.py b/lms/lms/doctype/lms_certificate_evaluation/test_lms_certificate_evaluation.py new file mode 100644 index 00000000..06e6996e --- /dev/null +++ b/lms/lms/doctype/lms_certificate_evaluation/test_lms_certificate_evaluation.py @@ -0,0 +1,9 @@ +# Copyright (c) 2022, Frappe and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestLMSCertificateEvaluation(FrappeTestCase): + pass diff --git a/lms/lms/doctype/lms_certificate_request/__init__.py b/lms/lms/doctype/lms_certificate_request/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js new file mode 100644 index 00000000..24d6ef31 --- /dev/null +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js @@ -0,0 +1,23 @@ +// Copyright (c) 2022, Frappe and contributors +// For license information, please see license.txt + +frappe.ui.form.on('LMS Certificate Request', { + refresh: function(frm) { + frm.add_custom_button(__("Create LMS Certificate Evaluation"), () => { + frappe.model.open_mapped_doc({ + method: "lms.lms.doctype.lms_certificate_request.lms_certificate_request.create_lms_certificate_evaluation", + frm: frm + }); + }); + }, + + onload: function(frm) { + frm.set_query('member', function(doc) { + return { + filters: { + "ignore_user_type": 1, + } + }; + }); + } +}); diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json new file mode 100644 index 00000000..cbe66fb9 --- /dev/null +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json @@ -0,0 +1,110 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2022-03-29 10:43:50.889723", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "course", + "member", + "member_name", + "evaluator", + "column_break_4", + "date", + "day", + "start_time", + "end_time" + ], + "fields": [ + { + "fieldname": "course", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Course", + "options": "LMS Course", + "reqd": 1 + }, + { + "fieldname": "member", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Member", + "options": "User", + "reqd": 1 + }, + { + "fetch_from": "course.evaluator", + "fieldname": "evaluator", + "fieldtype": "Link", + "label": "Evaluator", + "options": "Course Evaluator", + "read_only": 1 + }, + { + "fieldname": "date", + "fieldtype": "Date", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Date", + "reqd": 1 + }, + { + "fieldname": "day", + "fieldtype": "Select", + "label": "Day", + "options": "Sunday\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaturday" + }, + { + "fieldname": "start_time", + "fieldtype": "Time", + "in_list_view": 1, + "label": "Start Time", + "reqd": 1 + }, + { + "fieldname": "end_time", + "fieldtype": "Time", + "in_list_view": 1, + "label": "End Time", + "reqd": 1 + }, + { + "fieldname": "column_break_4", + "fieldtype": "Column Break" + }, + { + "fetch_from": "member.full_name", + "fieldname": "member_name", + "fieldtype": "Data", + "label": "Member Name", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2022-04-06 11:33:33.711545", + "modified_by": "Administrator", + "module": "LMS", + "name": "LMS Certificate Request", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "title_field": "member_name" +} \ No newline at end of file diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py new file mode 100644 index 00000000..3d674cf3 --- /dev/null +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -0,0 +1,40 @@ +# Copyright (c) 2022, Frappe and contributors +# For license information, please see license.txt + +import frappe +from frappe.model.document import Document +from frappe.model.mapper import get_mapped_doc + +class LMSCertificateRequest(Document): + pass + +@frappe.whitelist() +def create_certificate_request(course, date, day, start_time, end_time): + is_member = frappe.db.exists({ + "doctype": "LMS Batch Membership", + "course": course, + "member": frappe.session.user + }) + + if not is_member: + return + + frappe.get_doc({ + "doctype": "LMS Certificate Request", + "course": course, + "member": frappe.session.user, + "date": date, + "day": day, + "start_time": start_time, + "end_time": end_time + }).save(ignore_permissions=True) + + +@frappe.whitelist() +def create_lms_certificate_evaluation(source_name, target_doc=None): + doc = get_mapped_doc("LMS Certificate Request", source_name, { + "LMS Certificate Request": { + "doctype": "LMS Certificate Evaluation" + } + }, target_doc) + return doc diff --git a/lms/lms/doctype/lms_certificate_request/test_lms_certificate_request.py b/lms/lms/doctype/lms_certificate_request/test_lms_certificate_request.py new file mode 100644 index 00000000..87149242 --- /dev/null +++ b/lms/lms/doctype/lms_certificate_request/test_lms_certificate_request.py @@ -0,0 +1,9 @@ +# Copyright (c) 2022, Frappe and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestLMSCertificateRequest(FrappeTestCase): + pass diff --git a/lms/lms/doctype/lms_certification/lms_certification.js b/lms/lms/doctype/lms_certification/lms_certification.js deleted file mode 100644 index 7a264e1e..00000000 --- a/lms/lms/doctype/lms_certification/lms_certification.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2021, FOSS United and contributors -// For license information, please see license.txt - -frappe.ui.form.on('LMS Certification', { - onload: function (frm) { - frm.set_query("student", function (doc) { - return { - filters: { - "ignore_user_type": 1, - } - }; - }); - } -}); diff --git a/lms/lms/doctype/lms_course/lms_course.json b/lms/lms/doctype/lms_course/lms_course.json index f07718eb..76cfcb11 100644 --- a/lms/lms/doctype/lms_course/lms_course.json +++ b/lms/lms/doctype/lms_course/lms_course.json @@ -34,7 +34,14 @@ "related_courses", "certification_section", "enable_certification", - "expiry" + "expiry", + "column_break_22", + "grant_certificate_after", + "evaluator", + "pricing_section", + "paid_certificate", + "currency", + "price_certificate" ], "fields": [ { @@ -129,9 +136,8 @@ "default": "0", "depends_on": "enable_certification", "fieldname": "expiry", - "fieldtype": "Select", - "label": "Certification Expires After Years", - "options": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10" + "fieldtype": "Int", + "label": "Certification Expires After (Years)" }, { "fieldname": "related_courses", @@ -161,6 +167,50 @@ { "fieldname": "column_break_12", "fieldtype": "Column Break" + }, + { + "default": "0", + "depends_on": "enable_certification", + "fieldname": "paid_certificate", + "fieldtype": "Check", + "label": "Paid Certificate" + }, + { + "fieldname": "column_break_22", + "fieldtype": "Column Break" + }, + { + "depends_on": "enable_certification", + "fieldname": "grant_certificate_after", + "fieldtype": "Select", + "label": "Grant Certificate After", + "options": "Completion\nEvaluation" + }, + { + "depends_on": "eval: doc.grant_certificate_after == \"Evaluation\"", + "fieldname": "evaluator", + "fieldtype": "Link", + "label": "Evaluator", + "options": "Course Evaluator" + }, + { + "depends_on": "eval: doc.grant_certificate_after == \"Evaluation\"", + "fieldname": "pricing_section", + "fieldtype": "Section Break", + "label": "Pricing" + }, + { + "depends_on": "paid_certificate", + "fieldname": "price_certificate", + "fieldtype": "Currency", + "label": "Certificate Price" + }, + { + "depends_on": "paid_certificate", + "fieldname": "currency", + "fieldtype": "Link", + "label": "Currency", + "options": "Currency" } ], "is_published_field": "published", @@ -186,7 +236,7 @@ "link_fieldname": "course" } ], - "modified": "2022-03-24 13:09:37.228855", + "modified": "2022-04-07 12:27:05.353788", "modified_by": "Administrator", "module": "LMS", "name": "LMS Course", @@ -220,9 +270,10 @@ } ], "search_fields": "title", + "show_title_field_in_link": 1, "sort_field": "creation", "sort_order": "DESC", "states": [], "title_field": "title", "track_changes": 1 -} +} \ No newline at end of file diff --git a/lms/lms/utils.py b/lms/lms/utils.py index c90d652e..dab2518a 100644 --- a/lms/lms/utils.py +++ b/lms/lms/utils.py @@ -170,9 +170,9 @@ def get_sorted_reviews(course): return rating_percent def is_certified(course): - certificate = frappe.get_all("LMS Certification", + certificate = frappe.get_all("LMS Certificate", { - "student": frappe.session.user, + "member": frappe.session.user, "course": course }) if len(certificate): diff --git a/lms/lms/widgets/CourseCard.html b/lms/lms/widgets/CourseCard.html index 28d7ee8f..01b1cdf8 100644 --- a/lms/lms/widgets/CourseCard.html +++ b/lms/lms/widgets/CourseCard.html @@ -60,12 +60,18 @@