added Email List to Newsletter

This commit is contained in:
Anand Doshi 2012-12-06 13:13:05 +05:30
parent b936039c79
commit 39652843bb
4 changed files with 63 additions and 24 deletions

View File

@ -18,6 +18,8 @@ from __future__ import unicode_literals
import webnotes
import webnotes.utils
from webnotes.utils import cstr
from webnotes.model.doc import Document
class DocType():
def __init__(self, d, dl):
@ -46,8 +48,7 @@ class DocType():
}
def send_emails(self):
"""send emails to leads and customers"""
# TODO: create unsubscribed check in customer
"""send emails to leads and customers"""
if self.doc.email_sent:
webnotes.msgprint("""Newsletter has already been sent""", raise_exception=1)
@ -67,6 +68,14 @@ class DocType():
if self.doc.blog_subscribers:
self.send("blog_subscribers", "Lead")
if self.doc.email_list:
email_list = [cstr(email).strip() for email in self.doc.email_list.split(",")]
for email in email_list:
if not webnotes.conn.exists({"doctype": "Lead", "email_id": email}):
create_lead(email)
self.send(email_list, "Lead")
webnotes.conn.set(self.doc, "email_sent", 1)
webnotes.msgprint("""Scheduled to send to %s""" % \
@ -78,9 +87,8 @@ class DocType():
recipients = self.doc.test_email_id.split(",")
from webnotes.utils.email_lib.bulk import send
send(recipients = recipients, sender = sender,
subject = self.doc.subject, message = self.get_message(),
doctype = doctype, email_field = args["email_field"],
first_name_field = args["first_name_field"], last_name_field = "")
subject = self.doc.subject, message = self.doc.message,
doctype = doctype, email_field = args["email_field"])
webnotes.msgprint("""Scheduled to send to %s""" % self.doc.test_email_id)
def get_recipients(self, key):
@ -89,21 +97,47 @@ class DocType():
self.all_recipients += recipients
return recipients
def get_message(self):
if not hasattr(self, "message"):
import markdown2
self.message = markdown2.markdown(self.doc.message)
return self.message
def send(self, query_key, doctype):
webnotes.conn.auto_commit_on_many_writes = True
recipients = self.get_recipients(query_key)
if isinstance(query_key, basestring) and self.query_map.has_key(query_key):
recipients = self.get_recipients(query_key)
else:
recipients = query_key
sender = webnotes.utils.get_email_id(self.doc.owner)
args = self.dt_map[doctype]
self.send_count[doctype] = self.send_count.setdefault(doctype, 0) + len(recipients)
self.send_count[doctype] = self.send_count.setdefault(doctype, 0) + \
len(recipients)
from webnotes.utils.email_lib.bulk import send
send(recipients = recipients, sender = sender,
subject = self.doc.subject, message = self.get_message(),
doctype = doctype, email_field = args["email_field"],
first_name_field = args["first_name_field"], last_name_field = "")
subject = self.doc.subject, message = self.doc.message,
doctype = doctype, email_field = args["email_field"])
lead_naming_series = None
def create_lead(email):
"""create a lead if it does not exist"""
lead = Document("Lead")
lead.fields["__islocal"] = 1
lead.lead_name = email
lead.email_id = email
lead.status = "Open"
lead.naming_series = lead_naming_series or get_lead_naming_series()
lead.company = webnotes.conn.get_default("company")
lead.source = "Email"
lead.save()
def get_lead_naming_series():
"""gets lead's default naming series"""
global lead_naming_series
naming_series_field = webnotes.get_doctype("Lead").get_field("naming_series")
if naming_series_field.default:
lead_naming_series = naming_series_field.default
else:
latest_naming_series = webnotes.conn.sql("""select naming_series
from `tabLead` order by creation desc limit 1""")
if latest_naming_series:
lead_naming_series = latest_naming_series[0][0]
else:
lead_naming_series = filter(None, naming_series_field.options.split("\n"))[0]
return lead_naming_series

View File

@ -2,9 +2,9 @@
{
"owner": "Administrator",
"docstatus": 0,
"creation": "2012-11-28 11:26:23",
"creation": "2012-12-04 11:45:44",
"modified_by": "Administrator",
"modified": "2012-12-03 17:10:41"
"modified": "2012-12-06 13:07:47"
},
{
"autoname": "naming_series:",
@ -106,6 +106,15 @@
"fieldtype": "Check",
"permlevel": 0
},
{
"description": "Comma separated list of email addresses",
"colour": "White:FFF",
"doctype": "DocField",
"label": "Send to this list",
"fieldname": "email_list",
"fieldtype": "Text",
"permlevel": 0
},
{
"doctype": "DocField",
"label": "Newsletter Content",
@ -126,9 +135,8 @@
"colour": "White:FFF",
"doctype": "DocField",
"label": "Message",
"options": "Markdown",
"fieldname": "message",
"fieldtype": "Code",
"fieldtype": "Text Editor",
"reqd": 0,
"permlevel": 0
},

View File

@ -119,8 +119,6 @@ def add_comment(args=None):
send(recipients=list(set(commentors + [blog['owner']])),
doctype='Comment',
email_field='comment_by',
first_name_field="comment_by_fullname",
last_name_field="NA",
subject='New Comment on Blog: ' + blog['title'],
message='%(comment)s<p>By %(comment_by_fullname)s</p>' % args)

View File

@ -44,8 +44,7 @@ class DocType(website.web_page.Page):
# send the blog
send(recipients = recipients, doctype='Lead', email_field='email_id',
first_name_field = 'lead_name', last_name_field="", subject=self.doc.title,
message = markdown(content))
subject=self.doc.title, message = markdown(content))
webnotes.conn.set(self.doc, 'email_sent', 1)
webnotes.msgprint("""Scheduled to send to %s subscribers""" % len(recipients))