Merge pull request #5558 from saurabh6790/doc_flow_fix

[minor][fix] fix filter in previous link mapper
diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js
index 3252788..b24a17d 100644
--- a/erpnext/accounts/doctype/account/account_tree.js
+++ b/erpnext/accounts/doctype/account/account_tree.js
@@ -27,13 +27,13 @@
 		{fieldtype:'Select', fieldname:'root_type', label:__('Root Type'),
 			options: ['Asset', 'Liability', 'Equity', 'Income', 'Expense'].join('\n')},
 		{fieldtype:'Select', fieldname:'account_type', label:__('Account Type'),
-			options: ['', 'Bank', 'Cash', 'Warehouse', 'Tax', 'Chargeable'].join('\n'),
+			options: ['', 'Bank', 'Cash', 'Stock', 'Tax', 'Chargeable'].join('\n'),
 			description: __("Optional. This setting will be used to filter in various transactions."),
 			depends_on: 'eval:doc.is_group==1'},
 		{fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate'),
 			depends_on: 'eval:doc.is_group==1&&doc.account_type=="Tax"'},
 		{fieldtype:'Link', fieldname:'warehouse', label:__('Warehouse'), options:"Warehouse",
-			depends_on: 'eval:(doc.is_group==1&&doc.account_type=="Warehouse")'},
+			depends_on: 'eval:(!doc.is_group&&doc.account_type=="Warehouse")'},
 		{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
 			description: __("Optional. Sets company's default currency, if not specified.")}
 	],
diff --git a/erpnext/config/crm.py b/erpnext/config/crm.py
index 52958e3..178ee95 100644
--- a/erpnext/config/crm.py
+++ b/erpnext/config/crm.py
@@ -70,11 +70,6 @@
 			"items": [
 				{
 					"type": "doctype",
-					"name": "Newsletter",
-					"description": _("Newsletters to contacts, leads."),
-				},
-				{
-					"type": "doctype",
 					"name": "Communication",
 					"description": _("Record of all communications of type email, phone, chat, visit, etc."),
 				},
@@ -116,11 +111,6 @@
 					"description": _("Manage Sales Person Tree."),
 					"doctype": "Sales Person",
 				},
-				{
-					"type": "doctype",
-					"name": "Newsletter List",
-					"description": _("Newsletter Mailing List"),
-				},
 			]
 		},
 		{
diff --git a/erpnext/crm/doctype/newsletter/__init__.py b/erpnext/crm/doctype/newsletter/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/crm/doctype/newsletter/__init__.py
+++ /dev/null
diff --git a/erpnext/crm/doctype/newsletter/newsletter.js b/erpnext/crm/doctype/newsletter/newsletter.js
deleted file mode 100644
index 9bee9b3..0000000
--- a/erpnext/crm/doctype/newsletter/newsletter.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-cur_frm.cscript.onload = function(doc) {
-	return frappe.call({
-		method: "erpnext.crm.doctype.newsletter.newsletter.get_lead_options",
-		type: "GET",
-		callback: function(r) {
-			set_field_options("lead_source", r.message.sources.join("\n"))
-			set_field_options("lead_status", r.message.statuses.join("\n"))
-		}
-	});
-}
-
-cur_frm.cscript.refresh = function(doc) {
-	erpnext.toggle_naming_series();
-	if(!doc.__islocal && !cint(doc.email_sent) && !doc.__unsaved
-			&& inList(frappe.boot.user.can_write, doc.doctype)) {
-		cur_frm.add_custom_button(__('Send'), function() {
-			return $c_obj(doc, 'send_emails', '', function(r) {
-				cur_frm.refresh();
-			});
-		}, "icon-play", "btn-success");
-	}
-
-	cur_frm.cscript.setup_dashboard();
-
-	if(doc.__islocal && !doc.send_from) {
-		cur_frm.set_value("send_from",
-			repl("%(fullname)s <%(email)s>", frappe.user_info(doc.owner)));
-	}
-}
-
-cur_frm.cscript.setup_dashboard = function() {
-	cur_frm.dashboard.reset();
-	if(!cur_frm.doc.__islocal && cint(cur_frm.doc.email_sent) && cur_frm.doc.__onload && cur_frm.doc.__onload.status_count) {
-		var stat = cur_frm.doc.__onload.status_count;
-		var total = frappe.utils.sum($.map(stat, function(v) { return v; }));
-		if(total) {
-			$.each(stat, function(k, v) {
-				stat[k] = flt(v * 100 / total, 2) + '%';
-			});
-
-			cur_frm.dashboard.add_progress("Status", [
-				{
-					title: stat["Sent"] + "% Sent",
-					width: stat["Sent"],
-					progress_class: "progress-bar-success"
-				},
-				{
-					title: stat["Sending"] + "% Sending",
-					width: stat["Sending"],
-					progress_class: "progress-bar-warning"
-				},
-				{
-					title: stat["Error"] + "% Error",
-					width: stat["Error"],
-					progress_class: "progress-bar-danger"
-				}
-			]);
-		}
-	}
-}
diff --git a/erpnext/crm/doctype/newsletter/newsletter.json b/erpnext/crm/doctype/newsletter/newsletter.json
deleted file mode 100644
index 2515638..0000000
--- a/erpnext/crm/doctype/newsletter/newsletter.json
+++ /dev/null
@@ -1,281 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 0, 
- "allow_rename": 1, 
- "autoname": "field:subject", 
- "beta": 0, 
- "creation": "2013-01-10 16:34:31", 
- "custom": 0, 
- "description": "Create and Send Newsletters", 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Other", 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "newsletter_list", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Newsletter List", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Newsletter List", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "subject", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Subject", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "description": "", 
-   "fieldname": "send_from", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Sender", 
-   "length": 0, 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "email_sent", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Email Sent?", 
-   "length": 0, 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "newsletter_content", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "message", 
-   "fieldtype": "Text Editor", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Message", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "description": "", 
-   "fieldname": "test_the_newsletter", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "description": "A Lead with this email id should exist", 
-   "fieldname": "test_email_id", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Test Email Id", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "test_send", 
-   "fieldtype": "Button", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Test", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "test_send", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "icon": "icon-envelope", 
- "idx": 1, 
- "in_create": 0, 
- "in_dialog": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "menu_index": 0, 
- "modified": "2016-05-24 16:01:54.675129", 
- "modified_by": "Administrator", 
- "module": "CRM", 
- "name": "Newsletter", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Newsletter Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 0
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "sort_order": "ASC", 
- "title_field": "subject", 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/crm/doctype/newsletter/newsletter.py b/erpnext/crm/doctype/newsletter/newsletter.py
deleted file mode 100755
index dbf7dde..0000000
--- a/erpnext/crm/doctype/newsletter/newsletter.py
+++ /dev/null
@@ -1,189 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-import frappe.utils
-from frappe import throw, _
-from frappe.model.document import Document
-from frappe.email.queue import check_email_limit
-from frappe.utils.verified_command import get_signed_params, verify_request
-from frappe.utils.background_jobs import enqueue
-from frappe.utils.scheduler import log
-from frappe.email.queue import send
-from erpnext.crm.doctype.newsletter_list.newsletter_list import add_subscribers
-
-class Newsletter(Document):
-	def onload(self):
-		if self.email_sent:
-			self.get("__onload").status_count = dict(frappe.db.sql("""select status, count(name)
-				from `tabEmail Queue` where reference_doctype=%s and reference_name=%s
-				group by status""", (self.doctype, self.name))) or None
-
-	def test_send(self, doctype="Lead"):
-		self.recipients = frappe.utils.split_emails(self.test_email_id)
-		self.queue_all()
-		frappe.msgprint(_("Scheduled to send to {0}").format(self.test_email_id))
-
-	def send_emails(self):
-		"""send emails to leads and customers"""
-		if self.email_sent:
-			throw(_("Newsletter has already been sent"))
-
-		self.recipients = self.get_recipients()
-
-		if getattr(frappe.local, "is_ajax", False):
-			self.validate_send()
-
-			# using default queue with a longer timeout as this isn't a scheduled task
-			enqueue(send_newsletter, queue='default', timeout=1500, event='send_newsletter', newsletter=self.name)
-
-		else:
-			self.queue_all()
-
-		frappe.msgprint(_("Scheduled to send to {0} recipients").format(len(self.recipients)))
-
-		frappe.db.set(self, "email_sent", 1)
-
-	def queue_all(self):
-		if not self.get("recipients"):
-			# in case it is called via worker
-			self.recipients = self.get_recipients()
-
-		self.validate_send()
-
-		sender = self.send_from or frappe.utils.get_formatted_email(self.owner)
-
-		if not frappe.flags.in_test:
-			frappe.db.auto_commit_on_many_writes = True
-
-		send(recipients = self.recipients, sender = sender,
-			subject = self.subject, message = self.message,
-			reference_doctype = self.doctype, reference_name = self.name,
-			unsubscribe_method = "/api/method/erpnext.crm.doctype.newsletter.newsletter.unsubscribe",
-			unsubscribe_params = {"name": self.newsletter_list},
-			send_priority = 0)
-
-		if not frappe.flags.in_test:
-			frappe.db.auto_commit_on_many_writes = False
-
-	def get_recipients(self):
-		"""Get recipients from Newsletter List"""
-		return [d.email for d in frappe.db.get_all("Newsletter List Subscriber", ["email"],
-			{"unsubscribed": 0, "newsletter_list": self.newsletter_list})]
-
-	def validate_send(self):
-		if self.get("__islocal"):
-			throw(_("Please save the Newsletter before sending"))
-		check_email_limit(self.recipients)
-
-@frappe.whitelist()
-def get_lead_options():
-	return {
-		"sources": ["All"] + filter(None,
-			frappe.db.sql_list("""select distinct source from tabLead""")),
-		"statuses": ["All"] + filter(None,
-			frappe.db.sql_list("""select distinct status from tabLead"""))
-	}
-
-
-@frappe.whitelist(allow_guest=True)
-def unsubscribe(email, name):
-	if not verify_request():
-		return
-
-	subs_id = frappe.db.get_value("Newsletter List Subscriber", {"email": email, "newsletter_list": name})
-	if subs_id:
-		subscriber = frappe.get_doc("Newsletter List Subscriber", subs_id)
-		subscriber.unsubscribed = 1
-		subscriber.save(ignore_permissions=True)
-
-	frappe.db.commit()
-
-	return_unsubscribed_page(email)
-
-def return_unsubscribed_page(email):
-	frappe.respond_as_web_page(_("Unsubscribed"), _("{0} has been successfully unsubscribed from this list.").format(email))
-
-def create_lead(email_id):
-	"""create a lead if it does not exist"""
-	from email.utils import parseaddr
-	from frappe.model.naming import get_default_naming_series
-	real_name, email_id = parseaddr(email_id)
-
-	if frappe.db.get_value("Lead", {"email_id": email_id}):
-		return
-
-	lead = frappe.get_doc({
-		"doctype": "Lead",
-		"email_id": email_id,
-		"lead_name": real_name or email_id,
-		"status": "Lead",
-		"naming_series": get_default_naming_series("Lead"),
-		"company": frappe.db.get_default("Company"),
-		"source": "Email"
-	})
-	lead.insert()
-
-
-@frappe.whitelist(allow_guest=True)
-def subscribe(email):
-	url = frappe.utils.get_url("/api/method/erpnext.crm.doctype.newsletter.newsletter.confirm_subscription") +\
-		"?" + get_signed_params({"email": email})
-
-	messages = (
-		_("Thank you for your interest in subscribing to our updates"),
-		_("Please verify your email id"),
-		url,
-		_("Click here to verify")
-	)
-
-	content = """
-	<p>{0}. {1}.</p>
-	<p><a href="{2}">{3}</a></p>
-	"""
-
-	frappe.sendmail(email, subject=_("Confirm Your Email"), content=content.format(*messages))
-
-@frappe.whitelist(allow_guest=True)
-def confirm_subscription(email):
-	if not verify_request():
-		return
-
-	if not frappe.db.exists("Newsletter List", _("Website")):
-		frappe.get_doc({
-			"doctype": "Newsletter List",
-			"title": _("Website")
-		}).insert(ignore_permissions=True)
-
-
-	frappe.flags.ignore_permissions = True
-
-	add_subscribers(_("Website"), email)
-	frappe.db.commit()
-
-	frappe.respond_as_web_page(_("Confirmed"), _("{0} has been successfully added to our Newsletter list.").format(email))
-
-
-def send_newsletter(newsletter):
-	try:
-		doc = frappe.get_doc("Newsletter", newsletter)
-		doc.queue_all()
-
-	except:
-		frappe.db.rollback()
-
-		# wasn't able to send emails :(
-		doc.db_set("email_sent", 0)
-		frappe.db.commit()
-
-		log("send_newsletter")
-
-		raise
-
-	else:
-		frappe.db.commit()
-
-
-
diff --git a/erpnext/crm/doctype/newsletter/newsletter_list.js b/erpnext/crm/doctype/newsletter/newsletter_list.js
deleted file mode 100644
index e95d295..0000000
--- a/erpnext/crm/doctype/newsletter/newsletter_list.js
+++ /dev/null
@@ -1,10 +0,0 @@
-frappe.listview_settings['Newsletter'] = {
-	add_fields: ["subject", "email_sent"],
-	get_indicator: function(doc) {
-		if(doc.email_sent) {
-			return [__("Sent"), "green", "email_sent,=,Yes"];
-		} else {
-			return [__("Not Sent"), "orange", "email_sent,=,No"];
-		}
-	}
-};
diff --git a/erpnext/crm/doctype/newsletter/test_newsletter.py b/erpnext/crm/doctype/newsletter/test_newsletter.py
deleted file mode 100644
index 2019b65..0000000
--- a/erpnext/crm/doctype/newsletter/test_newsletter.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-from __future__ import unicode_literals
-
-import frappe, unittest
-
-from erpnext.crm.doctype.newsletter.newsletter import unsubscribe
-from urllib import unquote
-
-class TestNewsletter(unittest.TestCase):
-	def setUp(self):
-		if not frappe.get_all("Newsletter List Subscriber"):
-			for email in ["test_subscriber1@example.com", "test_subscriber2@example.com", 
-				"test_subscriber3@example.com"]:
-					frappe.get_doc({
-						"doctype": "Newsletter List Subscriber",
-						"email": email,
-						"newsletter_list": "_Test Newsletter List"
-					}).insert()
-		else:
-			frappe.db.sql("update `tabNewsletter List Subscriber` set unsubscribed = 0")
-
-	def test_send(self):
-		self.send_newsletter()
-		self.assertEquals(len(frappe.get_all("Email Queue")), 3)
-
-	def test_unsubscribe(self):
-		# test unsubscribe
-		self.send_newsletter()
-
-		email = unquote(frappe.local.flags.signed_query_string.split("email=")[1].split("&")[0])
-
-		unsubscribe(email, "_Test Newsletter List")
-
-		self.send_newsletter()
-		self.assertEquals(len(frappe.get_all("Email Queue")), 2)
-
-	def send_newsletter(self):
-		frappe.db.sql("delete from `tabEmail Queue`")
-		frappe.delete_doc("Newsletter", "_Test Newsletting")
-		newsletter = frappe.get_doc({
-			"doctype": "Newsletter",
-			"subject": "_Test Newsletting",
-			"newsletter_list": "_Test Newsletter List",
-			"send_from": "Test Sender <test_sender@example.com>",
-			"message": "Testing my news."
-		}).insert(ignore_permissions=True)
-
-		newsletter.send_emails()
-
-test_dependencies = ["Newsletter List"]
diff --git a/erpnext/crm/doctype/newsletter_list/__init__.py b/erpnext/crm/doctype/newsletter_list/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/crm/doctype/newsletter_list/__init__.py
+++ /dev/null
diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.js b/erpnext/crm/doctype/newsletter_list/newsletter_list.js
deleted file mode 100644
index 7799627..0000000
--- a/erpnext/crm/doctype/newsletter_list/newsletter_list.js
+++ /dev/null
@@ -1,46 +0,0 @@
-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");
-		}, __("View"));
-
-		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"));
-		}, __("Action"));
-
-		frm.add_custom_button(__("Add Subscribers"), function() {
-			frappe.prompt({fieldtype:"Text",
-				label:__("Email Ids"), fieldname:"email_list", reqd:1}, function(data) {
-					frappe.call({
-						method: "erpnext.crm.doctype.newsletter_list.newsletter_list.add_subscribers",
-						args: {
-							"name": frm.doc.name,
-							"email_list": data.email_list
-						},
-						callback: function(r) {
-							frm.set_value("total_subscribers", r.message);
-						}
-					})
-				}, __("Add Subscribers"), __("Add"));
-		}, __("Action"));
-
-		frm.add_custom_button(__("New Newsletter"), function() {
-			frappe.route_options = {"newsletter_list": frm.doc.name};
-			frappe.new_doc("Newsletter");
-		}, __("Action"));
-
-	}
-});
diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.json b/erpnext/crm/doctype/newsletter_list/newsletter_list.json
deleted file mode 100644
index 597116f..0000000
--- a/erpnext/crm/doctype/newsletter_list/newsletter_list.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "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": "Setup", 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "title", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Title", 
-   "length": 0, 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "default": "0", 
-   "fieldname": "total_subscribers", 
-   "fieldtype": "Int", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Total Subscribers", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "in_create": 0, 
- "in_dialog": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2015-11-16 06:29:50.643141", 
- "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, 
-   "if_owner": 0, 
-   "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
deleted file mode 100644
index 68c445f..0000000
--- a/erpnext/crm/doctype/newsletter_list/newsletter_list.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# -*- 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
-from frappe.utils import validate_email_add
-from frappe import _
-from email.utils import parseaddr
-
-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 = [{"value": d.parent, "label": "{0} ({1})".format(d.parent, d.label)} \
-			for d in frappe.db.get_all("DocField", ("parent", "label"), {"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", "Text", "Code") 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:
-				email = parseaddr(user.get(email_field))[1]
-				if email:
-					frappe.get_doc({
-						"doctype": "Newsletter List Subscriber",
-						"newsletter_list": self.name,
-						"email": email,
-						"unsubscribed": user.get(unsubscribed_field) if unsubscribed_field else 0
-					}).insert(ignore_permissions=True)
-
-					added += 1
-			except frappe.UniqueValidationError:
-				pass
-
-		frappe.msgprint(_("{0} subscribers added").format(added))
-
-		return self.update_total_subscribers()
-
-	def update_total_subscribers(self):
-		self.total_subscribers = self.get_total_subscribers()
-		self.db_update()
-		return self.total_subscribers
-
-	def get_total_subscribers(self):
-		return frappe.db.sql("""select count(*) from `tabNewsletter List Subscriber`
-			where newsletter_list=%s""", self.name)[0][0]
-
-	def on_trash(self):
-		for d in frappe.get_all("Newsletter List Subscriber", "name", {"newsletter_list": self.name}):
-			frappe.delete_doc("Newsletter List Subscriber", d.name)
-
-@frappe.whitelist()
-def import_from(name, doctype):
-	nlist = frappe.get_doc("Newsletter List", name)
-	if nlist.has_permission("write"):
-		return nlist.import_from(doctype)
-
-@frappe.whitelist()
-def add_subscribers(name, email_list):
-	if not isinstance(email_list, (list, tuple)):
-		email_list = email_list.replace(",", "\n").split("\n")
-	count = 0
-	for email in email_list:
-		email = email.strip()
-		valid = validate_email_add(email, False)
-
-		if valid:
-			if not frappe.db.get_value("Newsletter List Subscriber",
-				{"newsletter_list": name, "email": email}):
-				frappe.get_doc({
-					"doctype": "Newsletter List Subscriber",
-					"newsletter_list": name,
-					"email": email
-				}).insert(ignore_permissions = frappe.flags.ignore_permissions)
-
-				count += 1
-			else:
-				pass
-		else:
-			frappe.msgprint(_("{0} is not a valid email id").format(email))
-
-	frappe.msgprint(_("{0} subscribers added").format(count))
-
-	return frappe.get_doc("Newsletter List", name).update_total_subscribers()
-
-def restrict_newsletter_list(doc, method):
-	from frappe.limits import get_limits
-
-	newsletter_list_limit = get_limits().get('newsletter_recipients')
-	if not newsletter_list_limit:
-		return
-
-	nl = frappe.get_doc("Newsletter List", doc.newsletter_list)
-	if nl.get_total_subscribers() >= newsletter_list_limit:
-		frappe.throw(_("Please Upgrade to add more than {0} subscribers").format(newsletter_list_limit))
\ No newline at end of file
diff --git a/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py b/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py
deleted file mode 100644
index ebc094e..0000000
--- a/erpnext/crm/doctype/newsletter_list/test_newsletter_list.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- 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
-
-class TestNewletterList(unittest.TestCase):
-	def test_import(self):
-		new_list = frappe.get_doc({
-			"doctype": "Newsletter List",
-			"title": "_Test Newsletter List 1"
-		}).insert()
-
-		n_leads = frappe.db.sql("select count(distinct email_id) from `tabLead`")[0][0]
-		
-		added = new_list.import_from("Lead")
-		self.assertEquals(added, n_leads)
-
-	def tearDown(self):
-		frappe.delete_doc("Newsletter List", "_Test Newsletter List 1")
-
-test_dependencies = ["Lead"]
-
diff --git a/erpnext/crm/doctype/newsletter_list/test_records.json b/erpnext/crm/doctype/newsletter_list/test_records.json
deleted file mode 100644
index ed2f89e..0000000
--- a/erpnext/crm/doctype/newsletter_list/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
-	{
-		"doctype": "Newsletter List",
-		"title": "_Test Newsletter List"
-	}
-]
diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/__init__.py b/erpnext/crm/doctype/newsletter_list_subscriber/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/crm/doctype/newsletter_list_subscriber/__init__.py
+++ /dev/null
diff --git a/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json b/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json
deleted file mode 100644
index 08208b8..0000000
--- a/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.json
+++ /dev/null
@@ -1,124 +0,0 @@
-{
- "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": "Document", 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "newsletter_list", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Newsletter List", 
-   "length": 0, 
-   "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, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "email", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Email", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "unsubscribed", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Unsubscribed", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "in_create": 0, 
- "in_dialog": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2015-11-16 06:29:50.675306", 
- "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, 
-   "if_owner": 0, 
-   "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", 
- "title_field": "email"
-}
\ 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
deleted file mode 100644
index c036adc..0000000
--- a/erpnext/crm/doctype/newsletter_list_subscriber/newsletter_list_subscriber.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- 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", ("newsletter_list", "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
deleted file mode 100644
index 24a0788..0000000
--- a/erpnext/crm/doctype/newsletter_list_subscriber/test_newsletter_list_subscriber.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- 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/hooks.py b/erpnext/hooks.py
index a648155..d20e20b 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -137,10 +137,6 @@
 		"validate": "erpnext.shopping_cart.cart.set_customer_in_address"
 	},
 
-	"Newsletter List Subscriber": {
-		"validate": "erpnext.crm.doctype.newsletter_list.newsletter_list.restrict_newsletter_list"
-	},
-
 	# bubble transaction notification on master
 	('Opportunity', 'Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice',
 		'Supplier Quotation', 'Purchase Order', 'Purchase Receipt',
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.js b/erpnext/hr/doctype/salary_slip/salary_slip.js
index 643139a..bec87a5 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.js
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.js
@@ -9,8 +9,7 @@
 		frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function(){
 			return {
 				filters: {
-					employee: frm.doc.employee,
-					make_for: 'Salary Slip'
+					employee: frm.doc.employee
 				}
 			}
 		}
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index d95cbf4..c4aa854 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -80,12 +80,11 @@
 			self.end_date = m['month_end_date']
 
 	def check_sal_struct(self, joining_date, relieving_date):
-		timesheet = 1 if self.salary_slip_based_on_timesheet else 0
 		struct = frappe.db.sql("""select name from `tabSalary Structure`
 			where employee=%s and is_active = 'Yes'
 			and (from_date <= %s or from_date <= %s)
-			and (to_date is null or to_date >= %s or to_date >= %s) and salary_slip_based_on_timesheet=%s""",
-			(self.employee, self.start_date, joining_date, self.end_date, relieving_date, timesheet))
+			and (to_date is null or to_date >= %s or to_date >= %s)""",
+			(self.employee, self.start_date, joining_date, self.end_date, relieving_date))
 
 		if not struct:
 			self.salary_structure = None
diff --git a/erpnext/patches/v5_0/newsletter.py b/erpnext/patches/v5_0/newsletter.py
index bd95937..c03664b 100644
--- a/erpnext/patches/v5_0/newsletter.py
+++ b/erpnext/patches/v5_0/newsletter.py
@@ -10,9 +10,9 @@
 	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.reload_doc('email', 'doctype', 'email_group')
+	frappe.reload_doc('email', 'doctype', 'email_group_member')
+	frappe.reload_doc('email', 'doctype', 'newsletter')
 
 	frappe.permissions.reset_perms("Newsletter")
 
@@ -30,7 +30,7 @@
 			user.save()
 
 	# create default lists
-	general = frappe.new_doc("Newsletter List")
+	general = frappe.new_doc("Email Group")
 	general.title = "General"
 	general.insert()
 	general.import_from("Lead")
diff --git a/erpnext/patches/v6_2/remove_newsletter_duplicates.py b/erpnext/patches/v6_2/remove_newsletter_duplicates.py
index 4f25c95..dc5b778 100644
--- a/erpnext/patches/v6_2/remove_newsletter_duplicates.py
+++ b/erpnext/patches/v6_2/remove_newsletter_duplicates.py
@@ -1,12 +1,12 @@
 import frappe
 
 def execute():
-	duplicates = frappe.db.sql("""select newsletter_list, email, count(name)
-		from `tabNewsletter List Subscriber`
-		group by newsletter_list, email
+	duplicates = frappe.db.sql("""select email_group, email, count(name)
+		from `tabEmail Group Member`
+		group by email_group, email
 		having count(name) > 1""")
 
 	# delete all duplicates except 1
-	for newsletter_list, email, count in duplicates:
-		frappe.db.sql("""delete from `tabNewsletter List Subscriber`
-			where newsletter_list=%s and email=%s limit %s""", (newsletter_list, email, count-1))
+	for email_group, email, count in duplicates:
+		frappe.db.sql("""delete from `tabEmail Group Member`
+			where email_group=%s and email=%s limit %s""", (email_group, email, count-1))
diff --git a/erpnext/patches/v7_0/create_warehouse_nestedset.py b/erpnext/patches/v7_0/create_warehouse_nestedset.py
index aaccfb9..71a22fd 100644
--- a/erpnext/patches/v7_0/create_warehouse_nestedset.py
+++ b/erpnext/patches/v7_0/create_warehouse_nestedset.py
@@ -1,42 +1,35 @@
 import frappe
 from frappe import _
+from frappe.utils import cint
+from frappe.utils.nestedset import rebuild_tree
 
 def execute():
 	frappe.reload_doc("stock", "doctype", "warehouse")
-	
+
 	for company in frappe.get_all("Company", fields=["name", "abbr"]):
+		validate_parent_account_for_warehouse(company)
+		
 		if not frappe.db.get_value("Warehouse", "{0} - {1}".format(_("All Warehouses"), company.abbr)):
 			create_default_warehouse_group(company)
 		
-		for warehouse in frappe.get_all("Warehouse", filters={"company": company.name}, fields=["name", "create_account_under",
-			"parent_warehouse", "is_group"]):
-			set_parent_to_warehouses(warehouse, company)
-			set_parent_to_warehouse_acounts(warehouse, company)
+		set_parent_to_warehouse(company)
+		if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
+			set_parent_to_warehouse_acount(company)
 
-def set_parent_to_warehouses(warehouse, company):
-	warehouse = frappe.get_doc("Warehouse", warehouse.name)
-	warehouse.is_group = warehouse.is_group
+def set_parent_to_warehouse(company):
+	frappe.db.sql(""" update tabWarehouse set parent_warehouse = %s
+		where (is_group = 0 or is_group is null or is_group = '') and company = %s
+		""",("{0} - {1}".format(_("All Warehouses"), company.abbr), company.name))
 	
-	if not warehouse.parent_warehouse and warehouse.name != "{0} - {1}".format(_("All Warehouses"), company.abbr):
-		warehouse.parent_warehouse = "{0} - {1}".format(_("All Warehouses"), company.abbr)
+	rebuild_tree("Warehouse", "parent_warehouse")
+
+def set_parent_to_warehouse_acount(company):
+	frappe.db.sql(""" update tabAccount set parent_account = %s
+		where is_group = 0 and account_type = "Warehouse"
+		and (warehouse is not null or warehouse != '') and company = %s
+		""",("{0} - {1}".format(_("All Warehouses"), company.abbr), company.name))
 	
-	warehouse.save(ignore_permissions=True)
-
-def set_parent_to_warehouse_acounts(warehouse, company):
-	account = frappe.db.get_value("Account", {"warehouse": warehouse.name})
-	stock_group = frappe.db.get_value("Account", {"account_type": "Stock",
-		"is_group": 1, "company": company.name})
-
-	if account and account != "{0} - {1}".format(_("All Warehouses"), company.abbr):
-		account = frappe.get_doc("Account", account)
-		
-		if warehouse.create_account_under == stock_group or not warehouse.create_account_under:
-			if not warehouse.parent_warehouse:
-				account.parent_account = "{0} - {1}".format(_("All Warehouses"), company.abbr)
-			else:
-				account.parent_account = frappe.db.get_value("Account", warehouse.parent_warehouse)
-
-		account.save(ignore_permissions=True)
+	rebuild_tree("Account", "parent_account")
 
 def create_default_warehouse_group(company):
 	frappe.get_doc({
@@ -45,4 +38,18 @@
 		"is_group": 1,
 		"company": company.name,
 		"parent_warehouse": ""
-	}).insert(ignore_permissions=True)
\ No newline at end of file
+	}).insert(ignore_permissions=True)
+	
+def validate_parent_account_for_warehouse(company):
+	if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
+
+		parent_account = frappe.db.sql("""select name from tabAccount
+			where account_type='Stock' and company=%s and is_group=1
+			and (warehouse is null or warehouse = '')""", company.name)
+
+		if not parent_account:
+			current_parent_accounts_for_warehouse = frappe.db.sql("""select parent_account from tabAccount
+				where account_type='Warehouse' and (warehouse is not null or warehouse != '') """)
+
+			if current_parent_accounts_for_warehouse:
+				frappe.db.set_value("Account", current_parent_accounts_for_warehouse[0][0], "account_type", "Stock")
diff --git a/erpnext/public/js/website_utils.js b/erpnext/public/js/website_utils.js
index b0fc557..b541606 100644
--- a/erpnext/public/js/website_utils.js
+++ b/erpnext/public/js/website_utils.js
@@ -18,7 +18,7 @@
 erpnext.subscribe_to_newsletter = function(opts, btn) {
 	return frappe.call({
 		type: "POST",
-		method: "erpnext.crm.doctype.newsletter.newsletter.subscribe",
+		method: "frappe.email.doctype.newsletter.newsletter.subscribe",
 		btn: btn,
 		args: {"email": opts.email},
 		callback: opts.callback
diff --git a/erpnext/setup/setup_wizard/domainify.py b/erpnext/setup/setup_wizard/domainify.py
index f4cc35a..8bba119 100644
--- a/erpnext/setup/setup_wizard/domainify.py
+++ b/erpnext/setup/setup_wizard/domainify.py
@@ -4,58 +4,62 @@
 from __future__ import unicode_literals
 import frappe
 
-domains = {
-	'Manufacturing': {
-		'desktop_icons': ['Item', 'BOM', 'Customer', 'Supplier', 'Sales Order',
-			'Production Order',  'Stock Entry', 'Purchase Order', 'Task', 'Buying', 'Selling',
-			 'Accounts', 'HR', 'ToDo'],
-		'properties': [
-			{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'collapsible_depends_on', 'value': 'is_stock_item'},
-		],
-		'set_value': [
-			['Stock Settings', None, 'show_barcode_field', 1]
-		]
-	},
+def get_domains():
+	'''Written as a function to prevent data mutation effects'''
+	return {
+		'Manufacturing': {
+			'desktop_icons': ['Item', 'BOM', 'Customer', 'Supplier', 'Sales Order',
+				'Production Order',  'Stock Entry', 'Purchase Order', 'Task', 'Buying', 'Selling',
+				 'Accounts', 'HR', 'ToDo'],
+			'properties': [
+				{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'collapsible_depends_on', 'value': 'is_stock_item'},
+			],
+			'set_value': [
+				['Stock Settings', None, 'show_barcode_field', 1]
+			]
+		},
 
-	'Retail': {
-		'desktop_icons': ['POS', 'Item', 'Customer', 'Sales Invoice',  'Purchase Order', 'Warranty Claim',
-		'Accounts', 'Buying', 'ToDo'],
-		'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
-		'properties': [
-			{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1},
-			{'doctype': 'Customer', 'fieldname': 'credit_limit_section', 'property': 'hidden', 'value': 1},
-		],
-		'set_value': [
-			['Stock Settings', None, 'show_barcode_field', 1]
-		]
-	},
+		'Retail': {
+			'desktop_icons': ['POS', 'Item', 'Customer', 'Sales Invoice',  'Purchase Order', 'Warranty Claim',
+			'Accounts', 'Buying', 'ToDo'],
+			'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
+			'properties': [
+				{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1},
+				{'doctype': 'Customer', 'fieldname': 'credit_limit_section', 'property': 'hidden', 'value': 1},
+			],
+			'set_value': [
+				['Stock Settings', None, 'show_barcode_field', 1]
+			]
+		},
 
-	'Distribution': {
-		'desktop_icons': ['Item', 'Customer', 'Supplier', 'Lead', 'Sales Order',
-			 'Sales Invoice', 'CRM', 'Selling', 'Buying', 'Stock', 'Accounts', 'HR', 'ToDo'],
-		'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
-		'properties': [
-			{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1},
-		],
-		'set_value': [
-			['Stock Settings', None, 'show_barcode_field', 1]
-		]
-	},
+		'Distribution': {
+			'desktop_icons': ['Item', 'Customer', 'Supplier', 'Lead', 'Sales Order',
+				 'Sales Invoice', 'CRM', 'Selling', 'Buying', 'Stock', 'Accounts', 'HR', 'ToDo'],
+			'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
+			'properties': [
+				{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1},
+			],
+			'set_value': [
+				['Stock Settings', None, 'show_barcode_field', 1]
+			]
+		},
 
-	'Services': {
-		'desktop_icons': ['Project', 'Time Sheet', 'Customer', 'Sales Order', 'Sales Invoice', 'Lead', 'Opportunity',
-			'Expense Claim', 'Employee', 'HR', 'ToDo'],
-		'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
-		'properties': [
-			{'doctype': 'Item', 'fieldname': 'is_stock_item', 'property': 'default', 'value': 0},
-		],
-		'set_value': [
-			['Stock Settings', None, 'show_barcode_field', 0]
-		]
+		'Services': {
+			'desktop_icons': ['Project', 'Time Sheet', 'Customer', 'Sales Order', 'Sales Invoice', 'Lead', 'Opportunity',
+				'Expense Claim', 'Employee', 'HR', 'ToDo'],
+			'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
+			'properties': [
+				{'doctype': 'Item', 'fieldname': 'is_stock_item', 'property': 'default', 'value': 0},
+			],
+			'set_value': [
+				['Stock Settings', None, 'show_barcode_field', 0]
+			]
+		}
 	}
-}
 
 def setup_domain(domain):
+	domains = get_domains()
+
 	if not domain in domains:
 		return
 
@@ -85,4 +89,4 @@
 	from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to
 	add_all_roles_to('Administrator')
 
-	frappe.db.sql('delete from `tabProperty Setter`')
\ No newline at end of file
+	frappe.db.sql('delete from `tabProperty Setter`')
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index 3b50f30..515d260 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -113,7 +113,7 @@
 		if warehouse_account:
 			frappe.delete_doc("Account", warehouse_account)
 
-		if self.check_sle_exists():
+		if self.check_if_sle_exists():
 			throw(_("Warehouse can not be deleted as stock ledger entry exists for this warehouse."))
 
 		if self.check_if_child_exists():