feature to delete company
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index 0f1ca17..5ff256d 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -3,6 +3,45 @@
 
 frappe.provide("erpnext.company");
 
+frappe.ui.form.on("Company", {
+	onload_post_render: function(frm) {
+		frm.get_field("delete_company").$input.addClass("btn-danger");
+	},
+	country: function(frm) {
+		erpnext.company.set_chart_of_accounts_options(frm.doc);
+	},
+	delete_company: function(frm) {
+		var d = frappe.prompt({
+			fieldtype:"Data",
+			fieldname: "company_name",
+			label: __("Please re-type company name to confirm"),
+			reqd: 1,
+			description: __("Please make sure you really want to delete this company and all its transactions. Your master data will remain as it is. This action cannot be undone.")},
+				function(data) {
+					if(data.company_name !== frm.doc.name) {
+						frappe.msgprint("Company name not same");
+						return;
+					}
+					frappe.call({
+						method: "erpnext.setup.doctype.company.delete_company.delete_company",
+						args: {
+							company_name: data.company_name
+						},
+						freeze: true,
+						callback: function(r) {
+							if(!r.exc) {
+								frappe.model.clear_doc("Company", data.company_name);
+								window.history.back();
+							}
+						}
+					});
+				}, __("Delete Comany and all Related Transactions"), __("Delete"));
+
+			d.get_primary_btn().addClass("btn-danger");
+	}
+});
+
+
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
 	if(doc.abbr && !doc.__islocal) {
 		cur_frm.set_df_property("abbr", "read_only", 1);
@@ -16,10 +55,6 @@
 	erpnext.company.set_chart_of_accounts_options(doc);
 }
 
-frappe.ui.form.on("Company", "country", function(frm) {
-	erpnext.company.set_chart_of_accounts_options(frm.doc);
-})
-
 erpnext.company.set_chart_of_accounts_options = function(doc) {
 	var selected_value = doc.chart_of_accounts;
 	if(doc.country) {
diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json
index cede702..f7faf96 100644
--- a/erpnext/setup/doctype/company/company.json
+++ b/erpnext/setup/doctype/company/company.json
@@ -377,7 +377,7 @@
    "read_only": 0
   }, 
   {
-   "description": "Company registration numbers for your reference. Example: VAT Registration Numbers etc.", 
+   "description": "", 
    "fieldname": "registration_info", 
    "fieldtype": "Section Break", 
    "label": "", 
@@ -395,11 +395,18 @@
    "oldfieldtype": "Code", 
    "permlevel": 0, 
    "read_only": 0
+  }, 
+  {
+   "fieldname": "delete_company", 
+   "fieldtype": "Button", 
+   "label": "Delete Company", 
+   "permlevel": 0, 
+   "precision": ""
   }
  ], 
  "icon": "icon-building", 
  "idx": 1, 
- "modified": "2015-02-25 06:28:13.565128", 
+ "modified": "2015-04-17 01:37:32.304374", 
  "modified_by": "Administrator", 
  "module": "Setup", 
  "name": "Company", 
diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py
index 321bc13..a89fc51 100644
--- a/erpnext/setup/doctype/company/company.py
+++ b/erpnext/setup/doctype/company/company.py
@@ -156,35 +156,6 @@
 
 		frappe.db.set(self, "cost_center", _("Main") + " - " + self.abbr)
 
-	def on_trash(self):
-		"""
-			Trash accounts and cost centers for this company if no gl entry exists
-		"""
-		rec = frappe.db.sql("SELECT name from `tabGL Entry` where company = %s", self.name)
-		if not rec:
-			#delete tabAccount
-			frappe.db.sql("delete from `tabAccount` where company = %s order by lft desc, rgt desc", self.name)
-
-			#delete cost center child table - budget detail
-			frappe.db.sql("delete bd.* from `tabBudget Detail` bd, `tabCost Center` cc where bd.parent = cc.name and cc.company = %s", self.name)
-			#delete cost center
-			frappe.db.sql("delete from `tabCost Center` WHERE company = %s order by lft desc, rgt desc", self.name)
-
-			# delete account from customer and supplier
-			frappe.db.sql("delete from `tabParty Account` where company=%s", self.name)
-
-			# delete email digest
-			frappe.db.sql("delete from `tabEmail Digest` where company=%s", self.name)
-
-		if not frappe.db.get_value("Stock Ledger Entry", {"company": self.name}):
-			frappe.db.sql("""delete from `tabWarehouse` where company=%s""", self.name)
-
-		frappe.defaults.clear_default("company", value=self.name)
-
-		frappe.db.sql("""update `tabSingles` set value=""
-			where doctype='Global Defaults' and field='default_company'
-			and value=%s""", self.name)
-
 	def before_rename(self, olddn, newdn, merge=False):
 		if merge:
 			frappe.throw(_("Sorry, companies cannot be merged"))
diff --git a/erpnext/setup/doctype/company/delete_company.py b/erpnext/setup/doctype/company/delete_company.py
new file mode 100644
index 0000000..92b6c52
--- /dev/null
+++ b/erpnext/setup/doctype/company/delete_company.py
@@ -0,0 +1,74 @@
+# 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
+
+from frappe.utils import cint
+from frappe import _
+
+@frappe.whitelist()
+def delete_company(company_name):
+	frappe.only_for("System Manager")
+	doc = frappe.get_doc("Company", company_name)
+
+	if frappe.session.user != doc.owner:
+		frappe.throw(_("Company can only be deleted by the creator"), frappe.PermissionError)
+
+	delete_bins(company_name)
+
+	for doctype in frappe.db.sql_list("""select parent from
+		tabDocField where fieldtype='Link' and options='Company'"""):
+		delete_for_doctype(doctype, company_name)
+
+	frappe.delete_doc("Company", company_name)
+
+	frappe.defaults.clear_default("company", value=doc.name)
+
+	frappe.db.sql("""update `tabSingles` set value=""
+		where doctype='Global Defaults' and field='default_company'
+		and value=%s""", doc.name)
+
+def delete_for_doctype(doctype, company_name):
+	meta = frappe.get_meta(doctype)
+	company_fieldname = meta.get("fields", {"fieldtype": "Link",
+		"options": "Company"})[0].fieldname
+
+	if meta.issingle:
+		single = frappe.get_doc(doctype, doctype)
+		single.set(company_fieldname, "")
+		single.flags.ignore_mandatory = True
+		single.save()
+	else:
+		if not meta.istable:
+			# delete children
+			for df in meta.get_table_fields():
+				frappe.db.sql("""delete from `tab{0}` where parent in
+					(select name from `tab{1}` where `{2}`=%s)""".format(df.options,
+						doctype, company_fieldname), company_name)
+
+		# delete parent
+		frappe.db.sql("""delete from `tab{0}`
+			where {1}= %s """.format(doctype, company_fieldname), company_name)
+
+		# reset series
+		naming_series = meta.get_field("naming_series")
+		if naming_series:
+			prefixes = sorted(naming_series.options.split("\n"), lambda a, b: len(b) - len(a))
+
+			for prefix in prefixes:
+				if prefix:
+					last = frappe.db.sql("""select max(name) from `tab{0}`
+						where name like %s""".format(doctype), prefix + "%")
+					if last and last[0][0]:
+						last = cint(last[0][0].replace(prefix, ""))
+					else:
+						last = 0
+
+					frappe.db.sql("""update tabSeries set current = %s
+						where name=%s""", (last, prefix))
+
+
+def delete_bins(company_name):
+	frappe.db.sql("""delete from tabBin where warehouse in
+			(select name from tabWarehouse where company=%s)""", company_name)
diff --git a/erpnext/stock/doctype/price_list/price_list.json b/erpnext/stock/doctype/price_list/price_list.json
index a944d20..3bb305f 100644
--- a/erpnext/stock/doctype/price_list/price_list.json
+++ b/erpnext/stock/doctype/price_list/price_list.json
@@ -75,7 +75,7 @@
  "icon": "icon-tags", 
  "idx": 1, 
  "max_attachments": 1, 
- "modified": "2015-02-12 17:39:02.825767", 
+ "modified": "2015-04-17 01:54:01.907175", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Price List", 
@@ -130,5 +130,6 @@
    "report": 0, 
    "role": "Manufacturing User"
   }
- ]
+ ], 
+ "search_fields": "currency"
 }
\ No newline at end of file