From 14ae4c3603364cda3f1b831fc226984bdf83beff Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 18 Mar 2015 20:02:44 +0530 Subject: [PATCH] [email] many fixes, newsletter, unsubscribe --- erpnext/config/crm.py | 5 + erpnext/crm/doctype/lead/lead.json | 3 +- erpnext/crm/doctype/newsletter/__init__.py | 0 .../doctype/newsletter/newsletter.js | 2 +- .../crm/doctype/newsletter/newsletter.json | 104 +++++++++++ .../doctype/newsletter/newsletter.py | 60 ++----- .../doctype/newsletter/newsletter_list.js | 0 .../doctype/newsletter/test_newsletter.py | 0 .../doctype/newsletter/test_records.json | 0 .../crm/doctype/newsletter_list/__init__.py | 0 .../newsletter_list/newsletter_list.js | 30 ++++ .../newsletter_list/newsletter_list.json | 79 ++++++++ .../newsletter_list/newsletter_list.py | 52 ++++++ .../newsletter_list/test_newsletter_list.py | 12 ++ .../newsletter_list_subscriber/__init__.py | 0 .../newsletter_list_subscriber.json | 109 +++++++++++ .../newsletter_list_subscriber.py | 13 ++ .../test_newsletter_list_subscriber.py | 12 ++ erpnext/patches.txt | 1 + erpnext/patches/v5_0/newsletter.py | 30 ++++ erpnext/support/doctype/newsletter/README.md | 1 - .../support/doctype/newsletter/__init__.py | 1 - .../doctype/newsletter/newsletter.json | 169 ------------------ .../utilities/doctype/contact/contact.json | 3 +- 24 files changed, 468 insertions(+), 218 deletions(-) create mode 100644 erpnext/crm/doctype/newsletter/__init__.py rename erpnext/{support => crm}/doctype/newsletter/newsletter.js (95%) create mode 100644 erpnext/crm/doctype/newsletter/newsletter.json rename erpnext/{support => crm}/doctype/newsletter/newsletter.py (62%) rename erpnext/{support => crm}/doctype/newsletter/newsletter_list.js (100%) rename erpnext/{support => crm}/doctype/newsletter/test_newsletter.py (100%) rename erpnext/{support => crm}/doctype/newsletter/test_records.json (100%) create mode 100644 erpnext/crm/doctype/newsletter_list/__init__.py create mode 100644 erpnext/crm/doctype/newsletter_list/newsletter_list.js create mode 100644 erpnext/crm/doctype/newsletter_list/newsletter_list.json create mode 100644 erpnext/crm/doctype/newsletter_list/newsletter_list.py create mode 100644 erpnext/crm/doctype/newsletter_list/test_newsletter_list.py create mode 100644 erpnext/crm/doctype/newsletter_list_subscriber/__init__.py create mode 100644 erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json create mode 100644 erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.py create mode 100644 erpnext/crm/doctype/newsletter_list_subscriber/test_newsletter_list_subscriber.py create mode 100644 erpnext/patches/v5_0/newsletter.py delete mode 100644 erpnext/support/doctype/newsletter/README.md delete mode 100644 erpnext/support/doctype/newsletter/__init__.py delete mode 100644 erpnext/support/doctype/newsletter/newsletter.json diff --git a/erpnext/config/crm.py b/erpnext/config/crm.py index 74909c4f5d..48b8b2fa53 100644 --- a/erpnext/config/crm.py +++ b/erpnext/config/crm.py @@ -80,6 +80,11 @@ def get_data(): "description": _("Manage Sales Person Tree."), "doctype": "Sales Person", }, + { + "type": "doctype", + "name": "Newsletter List", + "description": _("Newsletter Mailing List"), + }, { "type": "doctype", "name": "SMS Settings", diff --git a/erpnext/crm/doctype/lead/lead.json b/erpnext/crm/doctype/lead/lead.json index 2f6a293cd6..2f5be34470 100644 --- a/erpnext/crm/doctype/lead/lead.json +++ b/erpnext/crm/doctype/lead/lead.json @@ -54,6 +54,7 @@ "label": "Email Id", "oldfieldname": "email_id", "oldfieldtype": "Data", + "options": "Email", "permlevel": 0, "reqd": 0, "search_index": 1 @@ -331,7 +332,7 @@ ], "icon": "icon-user", "idx": 1, - "modified": "2015-02-20 05:07:57.739910", + "modified": "2015-03-18 07:06:34.330943", "modified_by": "Administrator", "module": "CRM", "name": "Lead", diff --git a/erpnext/crm/doctype/newsletter/__init__.py b/erpnext/crm/doctype/newsletter/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/support/doctype/newsletter/newsletter.js b/erpnext/crm/doctype/newsletter/newsletter.js similarity index 95% rename from erpnext/support/doctype/newsletter/newsletter.js rename to erpnext/crm/doctype/newsletter/newsletter.js index 07ef8667ee..77eecacd42 100644 --- a/erpnext/support/doctype/newsletter/newsletter.js +++ b/erpnext/crm/doctype/newsletter/newsletter.js @@ -3,7 +3,7 @@ cur_frm.cscript.onload = function(doc) { return frappe.call({ - method: "erpnext.support.doctype.newsletter.newsletter.get_lead_options", + method: "erpnext.crm.doctype.newsletter.newsletter.get_lead_options", type: "GET", callback: function(r) { set_field_options("lead_source", r.message.sources.join("\n")) diff --git a/erpnext/crm/doctype/newsletter/newsletter.json b/erpnext/crm/doctype/newsletter/newsletter.json new file mode 100644 index 0000000000..b17a3864cb --- /dev/null +++ b/erpnext/crm/doctype/newsletter/newsletter.json @@ -0,0 +1,104 @@ +{ + "autoname": "field:subject", + "creation": "2013-01-10 16:34:31", + "description": "Create and Send Newsletters", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Other", + "fields": [ + { + "fieldname": "newsletter_list", + "fieldtype": "Link", + "label": "Newsletter List", + "options": "Newsletter List", + "permlevel": 0, + "precision": "", + "reqd": 1 + }, + { + "fieldname": "subject", + "fieldtype": "Small Text", + "in_list_view": 0, + "label": "Subject", + "permlevel": 0, + "reqd": 1 + }, + { + "description": "", + "fieldname": "send_from", + "fieldtype": "Data", + "label": "Sender", + "no_copy": 1, + "permlevel": 0, + "reqd": 1 + }, + { + "fieldname": "email_sent", + "fieldtype": "Check", + "in_list_view": 0, + "label": "Email Sent?", + "no_copy": 1, + "permlevel": 0, + "read_only": 1 + }, + { + "fieldname": "newsletter_content", + "fieldtype": "Section Break", + "label": "", + "permlevel": 0 + }, + { + "fieldname": "message", + "fieldtype": "Text Editor", + "label": "Message", + "permlevel": 0, + "reqd": 0 + }, + { + "description": "", + "fieldname": "test_the_newsletter", + "fieldtype": "Section Break", + "label": "", + "permlevel": 0 + }, + { + "description": "A Lead with this email id should exist", + "fieldname": "test_email_id", + "fieldtype": "Data", + "label": "Test Email Id", + "permlevel": 0 + }, + { + "fieldname": "test_send", + "fieldtype": "Button", + "label": "Test", + "options": "test_send", + "permlevel": 0 + } + ], + "icon": "icon-envelope", + "idx": 1, + "modified": "2015-03-18 08:19:24.393173", + "modified_by": "Administrator", + "module": "CRM", + "name": "Newsletter", + "owner": "Administrator", + "permissions": [ + { + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Newsletter Manager", + "share": 1, + "submit": 0, + "write": 1 + } + ], + "title_field": "subject" +} \ No newline at end of file diff --git a/erpnext/support/doctype/newsletter/newsletter.py b/erpnext/crm/doctype/newsletter/newsletter.py similarity index 62% rename from erpnext/support/doctype/newsletter/newsletter.py rename to erpnext/crm/doctype/newsletter/newsletter.py index 556f20209d..66fd264dce 100644 --- a/erpnext/support/doctype/newsletter/newsletter.py +++ b/erpnext/crm/doctype/newsletter/newsletter.py @@ -5,7 +5,6 @@ from __future__ import unicode_literals import frappe import frappe.utils -from frappe.utils import cstr from frappe import throw, _ from frappe.model.document import Document import erpnext.tasks @@ -19,7 +18,6 @@ class Newsletter(Document): def test_send(self, doctype="Lead"): self.recipients = self.test_email_id.split(",") - self.send_to_doctype = "Lead" self.send_bulk() frappe.msgprint(_("Scheduled to send to {0}").format(self.test_email_id)) @@ -44,46 +42,8 @@ class Newsletter(Document): frappe.db.set(self, "email_sent", 1) def get_recipients(self): - self.email_field = None - if self.send_to_type=="Contact": - self.send_to_doctype = "Contact" - if self.contact_type == "Customer": - return frappe.db.sql_list("""select email_id from tabContact - where ifnull(email_id, '') != '' and ifnull(customer, '') != ''""") - - elif self.contact_type == "Supplier": - return frappe.db.sql_list("""select email_id from tabContact - where ifnull(email_id, '') != '' and ifnull(supplier, '') != ''""") - - elif self.send_to_type=="Lead": - self.send_to_doctype = "Lead" - conditions = [] - if self.lead_source and self.lead_source != "All": - conditions.append(" and source='%s'" % self.lead_source.replace("'", "\'")) - if self.lead_status and self.lead_status != "All": - conditions.append(" and status='%s'" % self.lead_status.replace("'", "\'")) - - if conditions: - conditions = "".join(conditions) - - return frappe.db.sql_list("""select email_id from tabLead - where ifnull(email_id, '') != '' %s""" % (conditions or "")) - - elif self.send_to_type=="Employee": - self.send_to_doctype = "Employee" - self.email_field = "company_email" - - return frappe.db.sql_list("""select - if(ifnull(company_email, '')!='', company_email, personal_email) as email_id - from `tabEmployee` where status='Active'""") - - elif self.email_list: - email_list = [cstr(email).strip() for email in self.email_list.split(",")] - for email in email_list: - create_lead(email) - - self.send_to_doctype = "Lead" - return email_list + """Get recipients from Newsletter List""" + return frappe.db.get_all("Newsletter List Subscriber", ["email"], {"unsubscribed": 0}) def send_bulk(self): if not self.get("recipients"): @@ -101,8 +61,8 @@ class Newsletter(Document): send(recipients = self.recipients, sender = sender, subject = self.subject, message = self.message, - doctype = self.send_to_doctype, email_field = self.get("email_field") or "email_id", - ref_doctype = self.doctype, ref_docname = self.name) + ref_doctype = self.doctype, ref_docname = self.name, + unsubscribe_url = "/api/method/erpnext.crm.doctype.newsletter.newsletter.unsubscribe?name=%s&email={email}" % self.name) if not frappe.flags.in_test: frappe.db.auto_commit_on_many_writes = False @@ -121,6 +81,18 @@ def get_lead_options(): } +@frappe.whitelist(allow_guest=True) +def unsubscribe(email, name): + from frappe.email.bulk import return_unsubscribed_page + + name = frappe.db.get_value("Newsletter List Subscriber", {"email": email, "newsletter_list": name}) + if name: + subscriber = frappe.get_doc("Newsletter List Subscriber", name) + subscriber.unsubscribe = 1 + subscriber.save(ignore_permissions=True) + + return_unsubscribed_page(email) + def create_lead(email_id): """create a lead if it does not exist""" from email.utils import parseaddr diff --git a/erpnext/support/doctype/newsletter/newsletter_list.js b/erpnext/crm/doctype/newsletter/newsletter_list.js similarity index 100% rename from erpnext/support/doctype/newsletter/newsletter_list.js rename to erpnext/crm/doctype/newsletter/newsletter_list.js diff --git a/erpnext/support/doctype/newsletter/test_newsletter.py b/erpnext/crm/doctype/newsletter/test_newsletter.py similarity index 100% rename from erpnext/support/doctype/newsletter/test_newsletter.py rename to erpnext/crm/doctype/newsletter/test_newsletter.py diff --git a/erpnext/support/doctype/newsletter/test_records.json b/erpnext/crm/doctype/newsletter/test_records.json similarity index 100% rename from erpnext/support/doctype/newsletter/test_records.json rename to erpnext/crm/doctype/newsletter/test_records.json diff --git a/erpnext/crm/doctype/newsletter_list/__init__.py b/erpnext/crm/doctype/newsletter_list/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.js b/erpnext/crm/doctype/newsletter_list/newsletter_list.js new file mode 100644 index 0000000000..8843769902 --- /dev/null +++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.js @@ -0,0 +1,30 @@ +frappe.ui.form.on("Newsletter List", "refresh", function(frm) { + if(!frm.is_new()) { + frm.add_custom_button(__("View Subscribers"), function() { + frappe.route_options = {"newsletter_list": frm.doc.name}; + frappe.set_route("Report", "Newsletter List Subscriber"); + }); + + frm.add_custom_button(__("Import Subscribers"), function() { + frappe.prompt({fieldtype:"Select", options: frm.doc.__onload.import_types, + label:__("Import Email From"), fieldname:"doctype", reqd:1}, function(data) { + frappe.call({ + method: "erpnext.crm.doctype.newsletter_list.newsletter_list.import_from", + args: { + "name": frm.doc.name, + "doctype": data.doctype + }, + callback: function(r) { + frm.set_value("total_subscribers", r.message); + } + }) + }, __("Import Subscribers"), __("Import")); + }); + + frm.add_custom_button(__("New Newsletter"), function() { + frappe.route_options = {"newsletter_list": frm.doc.name}; + new_doc("Newsletter"); + }); + + } +}); diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.json b/erpnext/crm/doctype/newsletter_list/newsletter_list.json new file mode 100644 index 0000000000..3fa7f65a1f --- /dev/null +++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.json @@ -0,0 +1,79 @@ +{ + "allow_copy": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "field:title", + "creation": "2015-03-18 06:08:32.729800", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Master", + "fields": [ + { + "allow_on_submit": 0, + "fieldname": "title", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Title", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + }, + { + "default": "0", + "fieldname": "total_subscribers", + "fieldtype": "Int", + "label": "Total Subscribers", + "permlevel": 0, + "precision": "", + "read_only": 1 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "modified": "2015-03-18 08:08:37.692367", + "modified_by": "Administrator", + "module": "CRM", + "name": "Newsletter List", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "import": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Newsletter Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.py b/erpnext/crm/doctype/newsletter_list/newsletter_list.py new file mode 100644 index 0000000000..583798dc60 --- /dev/null +++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class NewsletterList(Document): + def onload(self): + singles = [d.name for d in frappe.db.get_all("DocType", "name", {"issingle": 1})] + self.get("__onload").import_types = [d.parent \ + for d in frappe.db.get_all("DocField", "parent", {"options": "Email"}) if d.parent not in singles] + + def import_from(self, doctype): + """Extract email ids from given doctype and add them to the current list""" + meta = frappe.get_meta(doctype) + email_field = [d.fieldname for d in meta.fields if d.fieldtype in ("Data", "Small Text") and d.options=="Email"][0] + unsubscribed_field = "unsubscribed" if meta.get_field("unsubscribed") else None + added = 0 + + for user in frappe.db.get_all(doctype, [email_field, unsubscribed_field or "name"]): + try: + if user.get(email_field): + frappe.get_doc({ + "doctype": "Newsletter List Subscriber", + "newsletter_list": self.name, + "email": user.get(email_field), + "unsubscribed": user.get(unsubscribed_field) if unsubscribed_field else 0 + }).insert(ignore_permissions=True) + + added += 1 + except Exception, e: + # already added, ignore + if e.args[0]!=1062: + raise + + frappe.msgprint(frappe._("{0} subscribers added").format(added)) + + return self.update_total_subscribers() + + def update_total_subscribers(self): + self.total_subscribers = frappe.db.sql("""select count(*) from `tabNewsletter List Subscriber` + where newsletter_list=%s""", self.name)[0][0] + self.db_update() + return self.total_subscribers + +@frappe.whitelist() +def import_from(name, doctype): + nlist = frappe.get_doc("Newsletter List", name) + if nlist.has_permission("write"): + return nlist.import_from(doctype) diff --git a/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py b/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py new file mode 100644 index 0000000000..686c571b5a --- /dev/null +++ b/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Newletter List') + +class TestNewletterList(unittest.TestCase): + pass diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/__init__.py b/erpnext/crm/doctype/newsletter_list_subscriber/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json new file mode 100644 index 0000000000..51bdcb00dc --- /dev/null +++ b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json @@ -0,0 +1,109 @@ +{ + "allow_copy": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "hash", + "creation": "2015-03-18 06:15:59.321619", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Transaction", + "fields": [ + { + "allow_on_submit": 0, + "fieldname": "newsletter_list", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Newsletter List", + "no_copy": 0, + "options": "Newsletter List", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + }, + { + "allow_on_submit": 0, + "fieldname": "email", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Email", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + }, + { + "allow_on_submit": 0, + "fieldname": "unsubscribed", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Unsubscribed", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "modified": "2015-03-18 08:07:24.748431", + "modified_by": "Administrator", + "module": "CRM", + "name": "Newsletter List Subscriber", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "import": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Newsletter Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.py b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.py new file mode 100644 index 0000000000..1539553576 --- /dev/null +++ b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class NewsletterListSubscriber(Document): + pass + +def after_doctype_insert(): + frappe.db.add_unique("Newsletter List Subscriber", ("name", "email")) diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/test_newsletter_list_subscriber.py b/erpnext/crm/doctype/newsletter_list_subscriber/test_newsletter_list_subscriber.py new file mode 100644 index 0000000000..24a07887ee --- /dev/null +++ b/erpnext/crm/doctype/newsletter_list_subscriber/test_newsletter_list_subscriber.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Newsletter List Subscriber') + +class TestNewsletterListSubscriber(unittest.TestCase): + pass diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 1b78b10b62..8c4b7ab774 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -133,3 +133,4 @@ erpnext.patches.v5_0.set_appraisal_remarks erpnext.patches.v5_0.update_time_log_title erpnext.patches.v4_2.repost_reserved_qty erpnext.patches.v4_2.repost_sle_for_si_with_no_warehouse +erpnext.patches.v5_0.newsletter diff --git a/erpnext/patches/v5_0/newsletter.py b/erpnext/patches/v5_0/newsletter.py new file mode 100644 index 0000000000..a1c480f6ff --- /dev/null +++ b/erpnext/patches/v5_0/newsletter.py @@ -0,0 +1,30 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +import frappe +import frappe.permisssions + +def execute(): + frappe.reload_doctype("User") + frappe.reload_doctype("Lead") + frappe.reload_doctype("Contact") + + frappe.reload_doc('crm', 'doctype', 'newsletter_list') + frappe.reload_doc('crm', 'doctype', 'newsletter_list_subscriber') + frappe.reload_doc('crm', 'doctype', 'newsletter') + + frappe.permisssions.reset_perms("Newsletter") + + if not frappe.db.exists("Role", "Newsletter Manager"): + frappe.get_doc({"doctype": "Role", "role": "Newsletter Manager"}).insert() + + for userrole in frappe.get_all("UserRole", "parent", {"role": "Sales Manager"}): + user = frappe.get_doc("User", userrole.parent) + user.add_roles("Newsletter Manager") + + # create default lists + general = frappe.new_doc("Newsletter List") + general.title = "General" + general.insert() + general.import_from("Lead") + general.import_from("Contact") diff --git a/erpnext/support/doctype/newsletter/README.md b/erpnext/support/doctype/newsletter/README.md deleted file mode 100644 index a1a0cf49fd..0000000000 --- a/erpnext/support/doctype/newsletter/README.md +++ /dev/null @@ -1 +0,0 @@ -Newsletter to be sent to Leads / Contacts. \ No newline at end of file diff --git a/erpnext/support/doctype/newsletter/__init__.py b/erpnext/support/doctype/newsletter/__init__.py deleted file mode 100644 index baffc48825..0000000000 --- a/erpnext/support/doctype/newsletter/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/support/doctype/newsletter/newsletter.json b/erpnext/support/doctype/newsletter/newsletter.json deleted file mode 100644 index 007f20f666..0000000000 --- a/erpnext/support/doctype/newsletter/newsletter.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "autoname": "naming_series:", - "creation": "2013-01-10 16:34:31", - "description": "Create and Send Newsletters", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Other", - "fields": [ - { - "description": "Select who you want to send this newsletter to", - "fieldname": "send_to", - "fieldtype": "Section Break", - "label": "Send To", - "permlevel": 0 - }, - { - "default": "NL-", - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "options": "NL-", - "permlevel": 0, - "reqd": 1 - }, - { - "fieldname": "send_to_type", - "fieldtype": "Select", - "label": "Send To Type", - "options": "Lead\nContact\nEmployee\nCustom", - "permlevel": 0 - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "permlevel": 0 - }, - { - "depends_on": "eval:doc.send_to_type==\"Lead\"", - "fieldname": "lead_source", - "fieldtype": "Select", - "label": "Lead Source", - "permlevel": 0 - }, - { - "depends_on": "eval:doc.send_to_type==\"Lead\"", - "fieldname": "lead_status", - "fieldtype": "Select", - "label": "Lead Status", - "permlevel": 0 - }, - { - "depends_on": "eval:doc.send_to_type==\"Contact\"", - "fieldname": "contact_type", - "fieldtype": "Select", - "label": "Contact Type", - "options": "Customer\nSupplier", - "permlevel": 0 - }, - { - "depends_on": "eval:doc.send_to_type==\"Custom\"", - "description": "Comma separated list of email addresses", - "fieldname": "email_list", - "fieldtype": "Text", - "label": "Send to this list", - "permlevel": 0 - }, - { - "fieldname": "newsletter_content", - "fieldtype": "Section Break", - "label": "Newsletter Content", - "permlevel": 0 - }, - { - "description": "If specified, send the newsletter using this email address", - "fieldname": "send_from", - "fieldtype": "Data", - "label": "Send From", - "no_copy": 1, - "permlevel": 0 - }, - { - "fieldname": "subject", - "fieldtype": "Small Text", - "in_list_view": 0, - "label": "Subject", - "permlevel": 0, - "reqd": 1 - }, - { - "fieldname": "message", - "fieldtype": "Text Editor", - "label": "Message", - "permlevel": 0, - "reqd": 0 - }, - { - "description": "Check how the newsletter looks in an email by sending it to your email.", - "fieldname": "test_the_newsletter", - "fieldtype": "Section Break", - "label": "Test the Newsletter", - "permlevel": 0 - }, - { - "description": "A Lead with this email id should exist", - "fieldname": "test_email_id", - "fieldtype": "Data", - "label": "Test Email Id", - "permlevel": 0 - }, - { - "fieldname": "test_send", - "fieldtype": "Button", - "label": "Test", - "options": "test_send", - "permlevel": 0 - }, - { - "fieldname": "newsletter_status", - "fieldtype": "Section Break", - "label": "Newsletter Status", - "permlevel": 0 - }, - { - "fieldname": "email_sent", - "fieldtype": "Check", - "in_list_view": 0, - "label": "Email Sent?", - "no_copy": 1, - "permlevel": 0, - "read_only": 1 - } - ], - "icon": "icon-envelope", - "idx": 1, - "modified": "2015-01-08 10:45:54.106948", - "modified_by": "Administrator", - "module": "Support", - "name": "Newsletter", - "owner": "Administrator", - "permissions": [ - { - "cancel": 0, - "create": 1, - "delete": 1, - "email": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Sales Manager", - "submit": 0, - "write": 1 - }, - { - "cancel": 0, - "create": 1, - "delete": 1, - "email": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Support Manager", - "submit": 0, - "write": 1 - } - ], - "title_field": "subject" -} \ No newline at end of file diff --git a/erpnext/utilities/doctype/contact/contact.json b/erpnext/utilities/doctype/contact/contact.json index 186432ea0a..c71ed60cd3 100644 --- a/erpnext/utilities/doctype/contact/contact.json +++ b/erpnext/utilities/doctype/contact/contact.json @@ -53,6 +53,7 @@ "label": "Email Id", "oldfieldname": "email_id", "oldfieldtype": "Data", + "options": "Email", "permlevel": 0, "reqd": 0, "search_index": 1 @@ -176,7 +177,7 @@ "idx": 1, "in_create": 0, "in_dialog": 0, - "modified": "2015-02-20 05:07:55.636970", + "modified": "2015-03-18 07:06:43.906702", "modified_by": "Administrator", "module": "Utilities", "name": "Contact",