Compare commits
5 Commits
course-pag
...
mentor-req
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15203f6bcc | ||
|
|
cbfb0d6761 | ||
|
|
11cc03849d | ||
|
|
5e5395658e | ||
|
|
8a242a69fb |
@@ -86,6 +86,11 @@
|
|||||||
"group": "Mentors",
|
"group": "Mentors",
|
||||||
"link_doctype": "LMS Course Mentor Mapping",
|
"link_doctype": "LMS Course Mentor Mapping",
|
||||||
"link_fieldname": "course"
|
"link_fieldname": "course"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Mentors",
|
||||||
|
"link_doctype": "LMS Mentor Request",
|
||||||
|
"link_fieldname": "course"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"modified": "2021-05-06 11:15:45.728976",
|
"modified": "2021-05-06 11:15:45.728976",
|
||||||
|
|||||||
@@ -8,86 +8,119 @@ from frappe.model.document import Document
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
class LMSMentorRequest(Document):
|
class LMSMentorRequest(Document):
|
||||||
def on_update(self):
|
def on_update(self):
|
||||||
if self.has_value_changed('status'):
|
if self.has_value_changed('status'):
|
||||||
template = frappe.db.get_single_value('LMS Settings', 'mentor_request_status_update')
|
|
||||||
if not template:
|
|
||||||
return
|
|
||||||
|
|
||||||
email_template = frappe.get_doc('Email Template', template)
|
if self.status == "Approved":
|
||||||
message = frappe.render_template(email_template.response, {'member_name': self.member_name, 'status': self.status})
|
self.create_course_mentor_mapping()
|
||||||
subject = _('The status of your application has changed.')
|
|
||||||
member_email = frappe.db.get_value("Community Member", self.member, "email")
|
if self.status != "Pending":
|
||||||
|
self.send_status_change_email()
|
||||||
if self.status == 'Approved' or self.status == 'Rejected':
|
|
||||||
reviewed_by = frappe.db.get_value('Community Member', self.reviewed_by, 'email')
|
def create_course_mentor_mapping(self):
|
||||||
send_email(member_email, [get_course_author(self.course), reviewed_by], subject, message)
|
mapping = frappe.get_doc({
|
||||||
|
"doctype": "LMS Course Mentor Mapping",
|
||||||
elif self.status == 'Withdrawn':
|
"mentor": self.member,
|
||||||
send_email([member_email, get_course_author(self.course)], None, subject, message)
|
"course": self.course
|
||||||
|
})
|
||||||
|
mapping.save()
|
||||||
|
|
||||||
|
def send_creation_email(self, member):
|
||||||
|
email_template = self.get_email_template('mentor_request_creation')
|
||||||
|
if not email_template:
|
||||||
|
return
|
||||||
|
|
||||||
|
course_details = frappe.db.get_value("LMS Course", self.course, ["owner", "slug", "title"], as_dict=True)
|
||||||
|
message = frappe.render_template(email_template.response,
|
||||||
|
{
|
||||||
|
'member_name': member.full_name,
|
||||||
|
'course_url': '/courses/' + course_details.slug,
|
||||||
|
'course': course_details.title
|
||||||
|
})
|
||||||
|
|
||||||
|
email_args = {
|
||||||
|
"recipients": [frappe.session.user, course_details.owner],
|
||||||
|
"subject": email_template.subject,
|
||||||
|
"header": email_template.subject,
|
||||||
|
"message": message
|
||||||
|
}
|
||||||
|
frappe.enqueue(method=frappe.sendmail, queue="short", timeout=300, is_async=True, **email_args)
|
||||||
|
|
||||||
|
def send_status_change_email(self):
|
||||||
|
email_template = self.get_email_template('mentor_request_status_update')
|
||||||
|
if not email_template:
|
||||||
|
return
|
||||||
|
|
||||||
|
course_details = frappe.db.get_value("LMS Course", self.course, ["owner", "title"], as_dict=True)
|
||||||
|
message = frappe.render_template(email_template.response,
|
||||||
|
{
|
||||||
|
'member_name': self.member_name,
|
||||||
|
'status': self.status,
|
||||||
|
'course': course_details.title
|
||||||
|
})
|
||||||
|
|
||||||
|
member_email = frappe.db.get_value("Community Member", self.member, "email")
|
||||||
|
if self.status == 'Approved' or self.status == 'Rejected':
|
||||||
|
reviewed_by = frappe.db.get_value('Community Member', self.reviewed_by, 'email')
|
||||||
|
email_args = {
|
||||||
|
"recipients": member_email,
|
||||||
|
"cc": [course_details.owner, reviewed_by],
|
||||||
|
"subject": email_template.subject,
|
||||||
|
"header": email_template.subject,
|
||||||
|
"message": message
|
||||||
|
}
|
||||||
|
frappe.enqueue(method=frappe.sendmail, queue="short", timeout=300, is_async=True, **email_args)
|
||||||
|
|
||||||
|
elif self.status == 'Withdrawn':
|
||||||
|
email_args = {
|
||||||
|
"recipients": [member_email, course_details.owner],
|
||||||
|
"subject": email_template.subject,
|
||||||
|
"header": email_template.subject,
|
||||||
|
"message": message
|
||||||
|
}
|
||||||
|
frappe.enqueue(method=frappe.sendmail, queue="short", timeout=300, is_async=True, **email_args)
|
||||||
|
|
||||||
|
def get_email_template(self, template_name):
|
||||||
|
template = frappe.db.get_single_value('LMS Settings', template_name)
|
||||||
|
if template:
|
||||||
|
return frappe.get_doc('Email Template', template)
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def has_requested(course):
|
def has_requested(course):
|
||||||
return len(frappe.get_all('LMS Mentor Request',
|
return frappe.db.count('LMS Mentor Request',
|
||||||
filters = {
|
filters = {
|
||||||
'member': get_member().name,
|
'member': get_member().name,
|
||||||
'course': course,
|
'course': course,
|
||||||
'status': ['in', ('Pending', 'Approved')]
|
'status': ['in', ('Pending', 'Approved')]
|
||||||
}
|
}
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def create_request(course):
|
def create_request(course):
|
||||||
if not has_requested(course):
|
if not has_requested(course):
|
||||||
member = get_member()
|
member = get_member()
|
||||||
frappe.get_doc({
|
request = frappe.get_doc({
|
||||||
'doctype': 'LMS Mentor Request',
|
'doctype': 'LMS Mentor Request',
|
||||||
'member': member.name,
|
'member': member.name,
|
||||||
'course': course,
|
'course': course,
|
||||||
'status': 'Pending'
|
'status': 'Pending'
|
||||||
}).save(ignore_permissions=True)
|
})
|
||||||
send_creation_email(course, member)
|
request.save(ignore_permissions=True)
|
||||||
return 'OK'
|
request.send_creation_email(member)
|
||||||
else:
|
return 'OK'
|
||||||
return 'Already Applied'
|
|
||||||
|
else:
|
||||||
|
return 'Already Applied'
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def cancel_request(course):
|
def cancel_request(course):
|
||||||
request = frappe.get_doc('LMS Mentor Request', {'member': get_member().name, 'course': course, 'status': ['in', ('Pending', 'Approved')]})
|
request = frappe.get_doc('LMS Mentor Request', {'member': get_member().name, 'course': course, 'status': ['in', ('Pending', 'Approved')]})
|
||||||
request.status = 'Withdrawn'
|
request.status = 'Withdrawn'
|
||||||
request.save(ignore_permissions=True)
|
request.save(ignore_permissions=True)
|
||||||
return 'OK'
|
return 'OK'
|
||||||
|
|
||||||
def get_member():
|
def get_member():
|
||||||
try:
|
try:
|
||||||
return frappe.get_doc('Community Member', {'email': frappe.session.user})
|
return frappe.get_doc('Community Member', {'email': frappe.session.user})
|
||||||
except frappe.DoesNotExistError:
|
except frappe.DoesNotExistError:
|
||||||
return
|
return
|
||||||
|
|
||||||
def get_course_author(course):
|
|
||||||
return frappe.db.get_value('LMS Course', course, 'owner')
|
|
||||||
|
|
||||||
def send_creation_email(course, member):
|
|
||||||
template = frappe.db.get_single_value('LMS Settings', 'mentor_request_creation')
|
|
||||||
if not template:
|
|
||||||
return
|
|
||||||
|
|
||||||
email_template = frappe.get_doc('Email Template', template)
|
|
||||||
member_name = member.full_name
|
|
||||||
message = frappe.render_template(email_template.response, {'member_name': member_name})
|
|
||||||
subject = _('Request for Mentorship')
|
|
||||||
send_email([frappe.session.user, get_course_author(course)], None, subject, message)
|
|
||||||
|
|
||||||
def send_email(recipients, cc=None, subject=None, message=None, template=None, args=None):
|
|
||||||
frappe.sendmail(
|
|
||||||
recipients = recipients,
|
|
||||||
cc = cc,
|
|
||||||
sender = frappe.db.get_single_value('LMS Settings', 'email_sender'),
|
|
||||||
subject = subject,
|
|
||||||
send_priority = 0,
|
|
||||||
queue_separately = True,
|
|
||||||
message = message,
|
|
||||||
template=template,
|
|
||||||
args=args
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
community.patches.set_email_preferences
|
community.patches.set_email_preferences
|
||||||
community.patches.change_name_for_community_members
|
community.patches.change_name_for_community_members
|
||||||
community.patches.save_abbr_for_community_members
|
community.patches.save_abbr_for_community_members
|
||||||
|
community.patches.create_mentor_request_email_templates
|
||||||
|
|||||||
31
community/patches/create_mentor_request_email_templates.py
Normal file
31
community/patches/create_mentor_request_email_templates.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe, os
|
||||||
|
from frappe import _
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
frappe.reload_doc("email", "doctype", "email_template")
|
||||||
|
base_path = frappe.get_app_path("community", "templates", "emails")
|
||||||
|
|
||||||
|
if not frappe.db.exists("Email Template", _('Mentor Request Creation Template')):
|
||||||
|
response = frappe.read_file(os.path.join(base_path, "mentor_request_creation_email.html"))
|
||||||
|
frappe.get_doc({
|
||||||
|
'doctype': 'Email Template',
|
||||||
|
'name': _("Mentor Request Creation Template"),
|
||||||
|
'response': response,
|
||||||
|
'subject': _('Request for Mentorship'),
|
||||||
|
'owner': frappe.session.user
|
||||||
|
}).insert(ignore_permissions=True)
|
||||||
|
|
||||||
|
frappe.db.set_value("LMS Settings", None, "mentor_request_creation", _('Mentor Request Creation Template'))
|
||||||
|
|
||||||
|
if not frappe.db.exists("Email Template", _('Mentor Request Status Update Template')):
|
||||||
|
response = frappe.read_file(os.path.join(base_path, "mentor_request_status_update_email.html"))
|
||||||
|
frappe.get_doc({
|
||||||
|
'doctype': 'Email Template',
|
||||||
|
'name': _("Mentor Request Status Update Template"),
|
||||||
|
'response': response,
|
||||||
|
'subject': _('The status of your application has changed.'),
|
||||||
|
'owner': frappe.session.user
|
||||||
|
}).insert(ignore_permissions=True)
|
||||||
|
|
||||||
|
frappe.db.set_value("LMS Settings", None, "mentor_request_status_update", _('Mentor Request Status Update Template'))
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<div>
|
||||||
|
<p>Dear {{ member_name }},</p>
|
||||||
|
<br>
|
||||||
|
<p>You've applied to become a mentor for this course. Your request is currently under review.</p>
|
||||||
|
<p>If you are not any more interested to mentor the course {{ course }}, you can <a href="{{ course_url }}">cancel your application</a>.</p>
|
||||||
|
<br>
|
||||||
|
<p>Thanks and Regards,</p>
|
||||||
|
<p>Team Community.</p>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<div>
|
||||||
|
<p>Dear {{ member_name }},</p>
|
||||||
|
<br>
|
||||||
|
<p>Your request to join us as a mentor for the course {{ course }} has been {{ status }}.</p>
|
||||||
|
<br>
|
||||||
|
<p>Thanks and Regards,</p>
|
||||||
|
<p>Team Community.</p>
|
||||||
|
</div>
|
||||||
@@ -6,7 +6,7 @@ frappe.ready(() => {
|
|||||||
course: decodeURIComponent($("#course-title").attr("data-course")),
|
course: decodeURIComponent($("#course-title").attr("data-course")),
|
||||||
},
|
},
|
||||||
'callback': (data) => {
|
'callback': (data) => {
|
||||||
if (data.message) {
|
if (data.message > 0) {
|
||||||
$("#mentor-request").addClass("hide");
|
$("#mentor-request").addClass("hide");
|
||||||
$("#already-applied").removeClass("hide")
|
$("#already-applied").removeClass("hide")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user