feat: emails on messages

This commit is contained in:
pateljannat
2021-03-31 10:48:23 +05:30
parent bc4503a636
commit bf789c1891
8 changed files with 128 additions and 27 deletions

View File

@@ -8,14 +8,19 @@
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"enabled",
"full_name",
"email",
"enabled",
"column_break_4",
"role",
"photo",
"short_intro",
"section_break_7",
"bio",
"section_break_9",
"username",
"photo",
"column_break_12",
"email_preference",
"route"
],
"fields": [
@@ -29,6 +34,7 @@
"fieldname": "full_name",
"fieldtype": "Data",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Full Name",
"reqd": 1
},
@@ -64,6 +70,7 @@
{
"fieldname": "email",
"fieldtype": "Data",
"in_standard_filter": 1,
"label": "Email",
"options": "Email",
"reqd": 1,
@@ -74,12 +81,34 @@
"fieldtype": "Data",
"label": "User Name",
"unique": 1
},
{
"fieldname": "email_preference",
"fieldtype": "Select",
"label": "Email preference",
"options": "Email on every Message\nOne Digest Mail per day\nNever"
},
{
"fieldname": "column_break_4",
"fieldtype": "Column Break"
},
{
"fieldname": "section_break_7",
"fieldtype": "Section Break"
},
{
"fieldname": "section_break_9",
"fieldtype": "Section Break"
},
{
"fieldname": "column_break_12",
"fieldtype": "Column Break"
}
],
"has_web_view": 1,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2021-03-22 12:16:18.823037",
"modified": "2021-03-30 17:25:57.075151",
"modified_by": "Administrator",
"module": "Community",
"name": "Community Member",

View File

@@ -98,24 +98,11 @@ doc_events = {
# Scheduled Tasks
# ---------------
# scheduler_events = {
# "all": [
# "community.tasks.all"
# ],
# "daily": [
# "community.tasks.daily"
# ],
# "hourly": [
# "community.tasks.hourly"
# ],
# "weekly": [
# "community.tasks.weekly"
# ]
# "monthly": [
# "community.tasks.monthly"
# ]
# }
scheduler_events = {
"daily": [
"erpnext.stock.reorder_item.reorder_item"
]
}
# Testing
# -------

View File

@@ -3,8 +3,57 @@
# For license information, please see license.txt
from __future__ import unicode_literals
# import frappe
import frappe
from frappe.model.document import Document
from frappe import _
from frappe.utils import add_days, nowdate
class LMSMessage(Document):
pass
def after_insert(self):
membership = frappe.get_all("LMS Batch Membership", {"batch": self.batch}, ["member"])
for entry in membership:
member = frappe.get_doc("Community Member", entry.member)
if member.name != self.author and member.email_preference == "Email on every Message":
frappe.sendmail(
recipients = member.email,
subject = _("New Message on ") + self.batch,
header = _("New Message on ") + self.batch,
template = "lms_message",
args = {
"author": self.author,
"message": frappe.utils.md_to_html(self.message),
"creation": frappe.utils.format_datetime(self.creation, "medium"),
"course": frappe.db.get_value("LMS Batch", self.batch, ["course"])
}
)
def send_daily_digest():
emails = frappe._dict()
messages = frappe.get_all("LMS Message", {"creation": [">=", add_days(nowdate(), -1)]}, ["message", "batch", "author", "creation"])
for message in messages:
membership = frappe.get_all("LMS Batch Membership", {"batch": message.batch}, ["member"])
for entry in membership:
member = frappe.db.get_value("Community Member", entry.member, ["name", "email_preference", "email"], as_dict=1)
if member.name != message.author and member.email_preference == "One Digest Mail per day":
if member.name in emails.keys():
emails[member.name]["messages"].append(message)
else:
emails[member.name] = frappe._dict({
"email": member.email,
"messages": [message]
})
for email in emails:
group_by_batch = frappe._dict()
for message in emails[email]["messages"]:
if message.batch in group_by_batch.keys():
group_by_batch[message.batch].append(message)
else:
group_by_batch[message.batch] = [message]
frappe.sendmail(
recipients = frappe.db.get_value("Community Member", email, "email"),
subject = _("Message Digest"),
header = _("Message Digest"),
template = "lms_daily_digest",
args = {
"batches": group_by_batch
},
delayed = False
)

View File

@@ -0,0 +1 @@
community.patches.set_email_preferences

View File

@@ -0,0 +1,8 @@
from __future__ import unicode_literals
import frappe
def execute():
members = frappe.get_all("Community Member", ["name", "email_preference"])
for member in members:
if not member.email_preference:
frappe.db.set_value("Community Member", member.name, "email_preference", "Email on every Message")

View File

@@ -0,0 +1,12 @@
{% for batch in batches %}
<h3> {{ batch }}</h3>
<div>
{% for message in batches[batch] %}
<div style="border: 1px solid #DBDBDB;padding: 10px; margin: 10px;">
<p> {{ frappe.utils.md_to_html(message.message) }} </p>
<p class="text-right">By {{message.author}}</p>
<div class="small text-muted text-right">{{ frappe.utils.format_datetime(message.creation, "medium") }}</div>
</div>
{% endfor %}
</div>
{% endfor %}

View File

@@ -0,0 +1,13 @@
<!-- <div style="border: 1px solid #DBDBDB; padding-bottom: 10px;">
<h6 style="padding-left: 10px;">{{ author }}</h6>
<hr style="border: 1px solid #DBDBDB;">
<div style="padding: 10px;">
{{ message }}
<div class="small text-muted text-right">{{ creation }}</div>
</div>
</div> -->
<p> {{ message }} </p>
<p class="text-right">By {{author}}</p>
<div class="small text-muted text-right">{{ creation }}</div>
<a href="courses/course?course={{course}}">Open Course</a>

View File

@@ -61,9 +61,11 @@
</select>
</div>
{% endif %}
<div class="form-group">
<textarea class="form-control message-text" rows="3" placeholder="Enter your message here."></textarea>
<button class="btn btn-primary mt-5 send-message" data-author="{{ author | urlencode}}" data-batch="{{ current_batch | urlencode }}">Send</button>
<div class="border p-5">
<div class="form-group">
<textarea class="form-control message-text" rows="3" placeholder="Enter your message here."></textarea>
<button class="btn btn-primary mt-5 send-message" data-author="{{ author | urlencode}}" data-batch="{{ current_batch | urlencode }}">Send</button>
</div>
</div>
{% if discussions %}
<div class="discussions">