From 39652843bba33a360c37f4a99156761a2270e872 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 6 Dec 2012 13:13:05 +0530 Subject: [PATCH] added Email List to Newsletter --- support/doctype/newsletter/newsletter.py | 66 +++++++++++++++++------ support/doctype/newsletter/newsletter.txt | 16 ++++-- website/blog.py | 2 - website/doctype/blog/blog.py | 3 +- 4 files changed, 63 insertions(+), 24 deletions(-) diff --git a/support/doctype/newsletter/newsletter.py b/support/doctype/newsletter/newsletter.py index 79464c018e..97b47792fd 100644 --- a/support/doctype/newsletter/newsletter.py +++ b/support/doctype/newsletter/newsletter.py @@ -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 = "") \ No newline at end of file + 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 diff --git a/support/doctype/newsletter/newsletter.txt b/support/doctype/newsletter/newsletter.txt index b32b875f3e..11ee2629a8 100644 --- a/support/doctype/newsletter/newsletter.txt +++ b/support/doctype/newsletter/newsletter.txt @@ -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 }, diff --git a/website/blog.py b/website/blog.py index 0e131074c1..9491e25d78 100644 --- a/website/blog.py +++ b/website/blog.py @@ -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

By %(comment_by_fullname)s

' % args) diff --git a/website/doctype/blog/blog.py b/website/doctype/blog/blog.py index 56f6c8683a..92ee974551 100644 --- a/website/doctype/blog/blog.py +++ b/website/doctype/blog/blog.py @@ -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))