refactor: tests, mentor request, messages
This commit is contained in:
@@ -93,13 +93,8 @@ override_doctype_class = {
|
|||||||
# Hook on document methods and events
|
# Hook on document methods and events
|
||||||
|
|
||||||
doc_events = {
|
doc_events = {
|
||||||
"User": {
|
|
||||||
"after_insert": "community.community.doctype.community_member.community_member.create_member_from_user"
|
}
|
||||||
},
|
|
||||||
"LMS Message": {
|
|
||||||
"after_insert": "community.lms.doctype.lms_message.lms_message.publish_message"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Scheduled Tasks
|
# Scheduled Tasks
|
||||||
# ---------------
|
# ---------------
|
||||||
|
|||||||
@@ -52,15 +52,8 @@ class TestInviteRequest(unittest.TestCase):
|
|||||||
self.assertEqual(user.send_welcome_email, 0)
|
self.assertEqual(user.send_welcome_email, 0)
|
||||||
self.assertEqual(user.user_type, "Website User")
|
self.assertEqual(user.user_type, "Website User")
|
||||||
|
|
||||||
member = frappe.db.get_value("Community Member", {"email": "test_invite@example.com"})
|
|
||||||
self.assertTrue(member)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(self):
|
def tearDownClass(self):
|
||||||
|
|
||||||
if frappe.db.exists("Community Member", {"email": "test_invite@example.com"}):
|
|
||||||
frappe.delete_doc("Community Member", {"email": "test_invite@example.com"})
|
|
||||||
|
|
||||||
if frappe.db.exists("User", "test_invite@example.com"):
|
if frappe.db.exists("User", "test_invite@example.com"):
|
||||||
frappe.delete_doc("User", "test_invite@example.com")
|
frappe.delete_doc("User", "test_invite@example.com")
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ class LMSBatchMembership(Document):
|
|||||||
def validate_membership_in_different_batch_same_course(self):
|
def validate_membership_in_different_batch_same_course(self):
|
||||||
course = frappe.db.get_value("LMS Batch", self.batch, "course")
|
course = frappe.db.get_value("LMS Batch", self.batch, "course")
|
||||||
previous_membership = frappe.get_all("LMS Batch Membership",
|
previous_membership = frappe.get_all("LMS Batch Membership",
|
||||||
filters={
|
filters={
|
||||||
"member": self.member
|
"member": self.member
|
||||||
},
|
},
|
||||||
fieldname=["batch", "member_type"]
|
fields=["batch", "member_type"]
|
||||||
)
|
)
|
||||||
|
|
||||||
for membership in previous_membership:
|
for membership in previous_membership:
|
||||||
batch_course = frappe.db.get_value("LMS Batch", membership.batch, "course")
|
batch_course = frappe.db.get_value("LMS Batch", membership.batch, "course")
|
||||||
@@ -41,6 +41,7 @@ class LMSBatchMembership(Document):
|
|||||||
member_name = frappe.db.get_value("User", self.member, "full_name")
|
member_name = frappe.db.get_value("User", self.member, "full_name")
|
||||||
frappe.throw(_("{0} is already a {1} of {2} course through {3} batch").format(member_name, membership.member_type, course, membership.batch))
|
frappe.throw(_("{0} is already a {1} of {2} course through {3} batch").format(member_name, membership.member_type, course, membership.batch))
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
def create_membership(batch, member=None, member_type="Student", role="Member"):
|
def create_membership(batch, member=None, member_type="Student", role="Member"):
|
||||||
frappe.get_doc({
|
frappe.get_doc({
|
||||||
"doctype": "LMS Batch Membership",
|
"doctype": "LMS Batch Membership",
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ class TestLMSCourse(unittest.TestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
frappe.db.sql('delete from `tabLMS Course Mentor Mapping`')
|
frappe.db.sql('delete from `tabLMS Course Mentor Mapping`')
|
||||||
frappe.db.sql('delete from `tabLMS Course`')
|
frappe.db.sql('delete from `tabLMS Course`')
|
||||||
frappe.db.sql('delete from `tabCommunity Member`')
|
|
||||||
|
|
||||||
def new_course(self, title):
|
def new_course(self, title):
|
||||||
doc = frappe.get_doc({
|
doc = frappe.get_doc({
|
||||||
|
|||||||
@@ -111,8 +111,7 @@ def create_request(course):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def cancel_request(course):
|
def cancel_request(course):
|
||||||
request = frappe.get_doc('LMS Mentor Request',
|
request = frappe.get_doc('LMS Mentor Request',{
|
||||||
filters={
|
|
||||||
'member': frappe.session.user,
|
'member': frappe.session.user,
|
||||||
'course': course,
|
'course': course,
|
||||||
'status': ['in', ('Pending', 'Approved')]
|
'status': ['in', ('Pending', 'Approved')]
|
||||||
|
|||||||
@@ -9,15 +9,57 @@ from frappe import _
|
|||||||
from frappe.utils import add_days, nowdate
|
from frappe.utils import add_days, nowdate
|
||||||
|
|
||||||
class LMSMessage(Document):
|
class LMSMessage(Document):
|
||||||
""" def after_insert(self):
|
def after_insert(self):
|
||||||
Todo: Adding email preference field for users
|
self.publish_message()
|
||||||
self.send_email() """
|
#Todo: Adding email preference field for users
|
||||||
|
#self.send_email()
|
||||||
|
|
||||||
|
def publish_message(self):
|
||||||
|
template = self.get_message_template()
|
||||||
|
message = frappe._dict({
|
||||||
|
"author_name": self.author_name,
|
||||||
|
"message_time": frappe.utils.pretty_date(self.creation),
|
||||||
|
"message": frappe.utils.md_to_html(self.message)
|
||||||
|
})
|
||||||
|
|
||||||
|
js = """
|
||||||
|
$(".msger-input").val("");
|
||||||
|
var template = `{0}`;
|
||||||
|
var message = {1};
|
||||||
|
var session_user = ("{2}" == frappe.session.user) ? true : false;
|
||||||
|
message.author_name = session_user ? "You" : message.author_name
|
||||||
|
message.is_author = session_user;
|
||||||
|
template = frappe.render_template(template, {{
|
||||||
|
"message": message
|
||||||
|
}})
|
||||||
|
$(".message-section").append(template);
|
||||||
|
""".format(template, message, self.owner)
|
||||||
|
|
||||||
|
frappe.publish_realtime(event="eval_js", message=js, after_commit=True)
|
||||||
|
|
||||||
|
def get_message_template(self):
|
||||||
|
return """
|
||||||
|
<div class="discussion {% if message.is_author %} is-author {% endif %}">
|
||||||
|
<div class="d-flex justify-content-between">
|
||||||
|
<div class="font-weight-bold">
|
||||||
|
{{ message.author_name }}
|
||||||
|
</div>
|
||||||
|
<div class="text-muted">
|
||||||
|
{{ message.message_time }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
{{ message.message }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
"""
|
||||||
|
|
||||||
def send_email(self):
|
def send_email(self):
|
||||||
membership = frappe.get_all("LMS Batch Membership", {"batch": self.batch}, ["member"])
|
membership = frappe.get_all("LMS Batch Membership", {"batch": self.batch}, ["member"])
|
||||||
for entry in membership:
|
for entry in membership:
|
||||||
member = frappe.get_doc("User", entry.member)
|
member = frappe.get_doc("User", entry.member)
|
||||||
if member.name != self.author:
|
if member.name != self.author:
|
||||||
|
#Todo: wrap sendmail in frappe.enqueue, else messages takes long to display.
|
||||||
frappe.sendmail(
|
frappe.sendmail(
|
||||||
recipients = member.email,
|
recipients = member.email,
|
||||||
subject = _("New Message on ") + self.batch,
|
subject = _("New Message on ") + self.batch,
|
||||||
@@ -65,42 +107,3 @@ def send_daily_digest():
|
|||||||
delayed = False
|
delayed = False
|
||||||
)
|
)
|
||||||
|
|
||||||
def publish_message(doc, method):
|
|
||||||
template = get_message_template()
|
|
||||||
message = frappe._dict({
|
|
||||||
"author_name": doc.author_name,
|
|
||||||
"message_time": frappe.utils.pretty_date(doc.creation),
|
|
||||||
"message": frappe.utils.md_to_html(doc.message)
|
|
||||||
})
|
|
||||||
|
|
||||||
js = """
|
|
||||||
$(".msger-input").val("");
|
|
||||||
var template = `{0}`;
|
|
||||||
var message = {1};
|
|
||||||
var session_user = ("{2}" == frappe.session.user) ? true : false;
|
|
||||||
message.author_name = session_user ? "You" : message.author_name
|
|
||||||
message.is_author = session_user;
|
|
||||||
template = frappe.render_template(template, {{
|
|
||||||
"message": message
|
|
||||||
}})
|
|
||||||
$(".message-section").append(template);
|
|
||||||
""".format(template, message, doc.owner)
|
|
||||||
|
|
||||||
frappe.publish_realtime(event="eval_js", message=js, after_commit=True)
|
|
||||||
|
|
||||||
def get_message_template():
|
|
||||||
return """
|
|
||||||
<div class="discussion {% if message.is_author %} is-author {% endif %}">
|
|
||||||
<div class="d-flex justify-content-between">
|
|
||||||
<div class="font-weight-bold">
|
|
||||||
{{ message.author_name }}
|
|
||||||
</div>
|
|
||||||
<div class="text-muted">
|
|
||||||
{{ message.message_time }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="mt-5">
|
|
||||||
{{ message.message }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
"""
|
|
||||||
|
|||||||
Reference in New Issue
Block a user