diff --git a/community/lms/doctype/lms_course/lms_course.py b/community/lms/doctype/lms_course/lms_course.py index fe44f04b..3a4803aa 100644 --- a/community/lms/doctype/lms_course/lms_course.py +++ b/community/lms/doctype/lms_course/lms_course.py @@ -3,6 +3,7 @@ # For license information, please see license.txt from __future__ import unicode_literals +from re import sub import frappe from frappe.model.document import Document import json @@ -13,6 +14,38 @@ from ...utils import slugify class LMSCourse(Document): + def on_update(self): + if not self.upcoming and self.has_value_changed("upcoming"): + self.send_email_to_interested_users() + + def send_email_to_interested_users(self): + interested_users = frappe.get_all("LMS Course Interest", + { + "course": self.name + }, + ["name", "user"]) + subject = self.title + " is available!" + args = { + "title": self.title, + "course_link": "/courses/{0}".format(self.name), + "app_name": frappe.db.get_single_value("System Settings", "app_name"), + "site_url": frappe.utils.get_url() + } + + for user in interested_users: + args["first_name"] = frappe.db.get_value("User", user.user, "first_name") + email_args = frappe._dict( + recipients = user.user, + sender = frappe.db.get_single_value("LMS Settings", "email_sender"), + subject = subject, + header = [subject, "green"], + template = "lms_course_interest", + args = args, + now = True + ) + frappe.enqueue(method=frappe.sendmail, queue='short', timeout=300, is_async=True, **email_args) + frappe.db.set_value("LMS Course Interest", user.name, "email_sent", True) + @staticmethod def find(name): """Returns the course with specified name. diff --git a/community/lms/doctype/lms_course_interest/__init__.py b/community/lms/doctype/lms_course_interest/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/community/lms/doctype/lms_course_interest/lms_course_interest.js b/community/lms/doctype/lms_course_interest/lms_course_interest.js new file mode 100644 index 00000000..ff469e10 --- /dev/null +++ b/community/lms/doctype/lms_course_interest/lms_course_interest.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, FOSS United and contributors +// For license information, please see license.txt + +frappe.ui.form.on('LMS Course Interest', { + // refresh: function(frm) { + + // } +}); diff --git a/community/lms/doctype/lms_course_interest/lms_course_interest.json b/community/lms/doctype/lms_course_interest/lms_course_interest.json new file mode 100644 index 00000000..f69e0c06 --- /dev/null +++ b/community/lms/doctype/lms_course_interest/lms_course_interest.json @@ -0,0 +1,61 @@ +{ + "actions": [], + "creation": "2021-08-06 17:37:20.184849", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "course", + "user", + "email_sent" + ], + "fields": [ + { + "fieldname": "course", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Course", + "options": "LMS Course" + }, + { + "fieldname": "user", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "User", + "options": "User" + }, + { + "default": "0", + "fieldname": "email_sent", + "fieldtype": "Check", + "label": "Email Sent", + "options": "email_sent" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-08-06 18:06:21.370741", + "modified_by": "Administrator", + "module": "LMS", + "name": "LMS Course Interest", + "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", + "track_changes": 1 +} \ No newline at end of file diff --git a/community/lms/doctype/lms_course_interest/lms_course_interest.py b/community/lms/doctype/lms_course_interest/lms_course_interest.py new file mode 100644 index 00000000..7aed3232 --- /dev/null +++ b/community/lms/doctype/lms_course_interest/lms_course_interest.py @@ -0,0 +1,17 @@ +# Copyright (c) 2021, FOSS United and contributors +# For license information, please see license.txt + +import frappe +from frappe.model.document import Document + +class LMSCourseInterest(Document): + pass + +@frappe.whitelist() +def capture_interest(course): + frappe.get_doc({ + "doctype": "LMS Course Interest", + "course": course, + "user": frappe.session.user + }).save(ignore_permissions=True) + return "OK" diff --git a/community/lms/doctype/lms_course_interest/test_lms_course_interest.py b/community/lms/doctype/lms_course_interest/test_lms_course_interest.py new file mode 100644 index 00000000..b5689d52 --- /dev/null +++ b/community/lms/doctype/lms_course_interest/test_lms_course_interest.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, FOSS United and Contributors +# See license.txt + +# import frappe +import unittest + +class TestLMSCourseInterest(unittest.TestCase): + pass diff --git a/community/lms/widgets/CourseCard.html b/community/lms/widgets/CourseCard.html index 3599604a..15501f5d 100644 --- a/community/lms/widgets/CourseCard.html +++ b/community/lms/widgets/CourseCard.html @@ -58,7 +58,7 @@ {% set query_parameter = "?batch=" + membership.batch if membership and membership.batch else "" %} {% if course.upcoming %} -
{{ _("Hi {0},").format(first_name) }}
+{{ _("The course {0} is now available on {1}.").format(frappe.bold(title), app_name) }}
+Click on the link below to start learning.
+ +
+ {{ _("You can also copy-paste following link in your browser") }}
+ {{ site_url }}{{ course_link }}
+
Thanks and Regards,
+{{ app_name }}
+