Merge branch 'develop' of https://github.com/frappe/erpnext into cost_center_fix
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index f341f78..ee23b1b 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -71,8 +71,13 @@
 					"label": "Cost Center Number",
 					"fieldname": "cost_center_number",
 					"fieldtype": "Data",
-					"reqd": 1,
 					"default": frm.doc.cost_center_number
+				},
+				{
+					"label": __("Merge with existing"),
+					"fieldname": "merge",
+					"fieldtype": "Check",
+					"default": 0
 				}
 			],
 			primary_action: function() {
@@ -87,8 +92,9 @@
 					args: {
 						docname: frm.doc.name,
 						cost_center_name: data.cost_center_name,
-						cost_center_number: data.cost_center_number,
-						company: frm.doc.company
+						cost_center_number: cstr(data.cost_center_number),
+						company: frm.doc.company,
+						merge: data.merge
 					},
 					callback: function(r) {
 						frappe.dom.unfreeze();
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index 291aff3..645da34 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import frappe, erpnext
 from frappe import _
-from frappe.utils import flt, fmt_money, getdate, formatdate
+from frappe.utils import flt, fmt_money, getdate, formatdate, cint
 from frappe.model.document import Document
 from frappe.model.naming import set_name_from_naming_options
 from frappe.model.meta import get_field_precision
@@ -134,10 +134,17 @@
 
 			return self.cost_center_company[self.cost_center]
 
+		def _check_is_group():
+			return cint(frappe.get_cached_value('Cost Center', self.cost_center, 'is_group'))
+
 		if self.cost_center and _get_cost_center_company() != self.company:
 			frappe.throw(_("{0} {1}: Cost Center {2} does not belong to Company {3}")
 				.format(self.voucher_type, self.voucher_no, self.cost_center, self.company))
 
+		if self.cost_center and _check_is_group():
+			frappe.throw(_("""{0} {1}: Cost Center {2} is a group cost center and group cost centers cannot
+				be used in transactions""").format(self.voucher_type, self.voucher_no, frappe.bold(self.cost_center)))
+
 	def validate_party(self):
 		validate_party_frozen_disabled(self.party_type, self.party)
 
diff --git a/erpnext/accounts/report/account_balance/test_account_balance.py b/erpnext/accounts/report/account_balance/test_account_balance.py
index 5544fc4..b6ced31 100644
--- a/erpnext/accounts/report/account_balance/test_account_balance.py
+++ b/erpnext/accounts/report/account_balance/test_account_balance.py
@@ -61,7 +61,7 @@
 		debit_to = 'Debtors - _TC2',
 		income_account = 'Sales - _TC2',
 		expense_account = 'Cost of Goods Sold - _TC2',
-		cost_center = '_Test Company 2 - _TC2')
+		cost_center = 'Main - _TC2')
 
 
 
diff --git a/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py
index f0274b4..2ff5b53 100644
--- a/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py
@@ -63,7 +63,7 @@
 			debit_to = 'Debtors - _TC2',
 			income_account = 'Sales - _TC2',
 			expense_account = 'Cost of Goods Sold - _TC2',
-			cost_center = '_Test Company 2 - _TC2',
+			cost_center = 'Main - _TC2',
 			do_not_save=1)
 
 	si.append('payment_schedule', dict(due_date=getdate(add_days(today(), 30)), invoice_portion=30.00, payment_amount=30))
@@ -83,14 +83,14 @@
 
 def make_credit_note(docname):
 	create_sales_invoice(company="_Test Company 2",
-			customer = '_Test Customer 2',
-			currency = 'EUR',
-			qty = -1,
-			warehouse = 'Finished Goods - _TC2',
-			debit_to = 'Debtors - _TC2',
-			income_account = 'Sales - _TC2',
-			expense_account = 'Cost of Goods Sold - _TC2',
-			cost_center = '_Test Company 2 - _TC2',
-			is_return = 1,
-			return_against = docname)
+		customer = '_Test Customer 2',
+		currency = 'EUR',
+		qty = -1,
+		warehouse = 'Finished Goods - _TC2',
+		debit_to = 'Debtors - _TC2',
+		income_account = 'Sales - _TC2',
+		expense_account = 'Cost of Goods Sold - _TC2',
+		cost_center = 'Main - _TC2',
+		is_return = 1,
+		return_against = docname)
 
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index f6cd606..16146f4 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -837,7 +837,7 @@
 		pass
 
 @frappe.whitelist()
-def update_cost_center(docname, cost_center_name, cost_center_number, company):
+def update_cost_center(docname, cost_center_name, cost_center_number, company, merge):
 	'''
 		Renames the document by adding the number as a prefix to the current name and updates
 		all transaction where it was present.
@@ -853,7 +853,7 @@
 
 	new_name = get_autoname_with_number(cost_center_number, cost_center_name, docname, company)
 	if docname != new_name:
-		frappe.rename_doc("Cost Center", docname, new_name, force=1)
+		frappe.rename_doc("Cost Center", docname, new_name, force=1, merge=merge)
 		return new_name
 
 def validate_field_number(doctype_name, docname, number_value, company, field_name):