Merge pull request #17448 from nabinhait/woocommerce-multilingual-fix-dev

fix: Multilingual handling in woocommerce integration
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 3d9604d..ecf67dd 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -105,20 +105,27 @@
 			descendants = get_descendants_of('Company', self.company)
 			if not descendants: return
 
-			acc_name_map = {}
-			acc_name = frappe.db.get_value('Account', self.parent_account, "account_name")
+			parent_acc_name_map = {}
+			parent_acc_name = frappe.db.get_value('Account', self.parent_account, "account_name")
 			for d in frappe.db.get_values('Account',
-				{"company": ["in", descendants], "account_name": acc_name},
+				{"company": ["in", descendants], "account_name": parent_acc_name},
 				["company", "name"], as_dict=True):
-				acc_name_map[d["company"]] = d["name"]
+				parent_acc_name_map[d["company"]] = d["name"]
 
-			if not acc_name_map: return
+			if not parent_acc_name_map: return
 
 			for company in descendants:
+				if not parent_acc_name_map.get(company):
+					frappe.throw(_("While creating account for child Company {0}, parent account {1} not found. Please create the parent account in corresponding COA")
+						.format(company, parent_acc_name))
+
 				doc = frappe.copy_doc(self)
 				doc.flags.ignore_root_company_validation = True
-				doc.update({"company": company, "account_currency": None,
-					"parent": acc_name_map[company], "parent_account": acc_name_map[company]})
+				doc.update({
+					"company": company,
+					"account_currency": None,
+					"parent_account": parent_acc_name_map[company]
+				})
 				doc.save()
 				frappe.msgprint(_("Account {0} is added in the child company {1}")
 					.format(doc.name, company))
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 48663ca..2140315 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -331,9 +331,8 @@
 			if a.root_type == "Income" and b.root_type == "Expense":
 				return -1
 		else:
-			if re.split('\W+', a[key])[0].isdigit():
-				# if chart of accounts is numbered, then sort by number
-				return cmp(a[key], b[key])
+			# sort by key (number) or name
+			return cmp(a[key], b[key])
 		return 1
 
 	accounts.sort(key = functools.cmp_to_key(compare_accounts))
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 9787dc8..5a7ea32 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -568,7 +568,7 @@
 execute:frappe.delete_doc_if_exists("Page", "purchase-analytics")
 execute:frappe.delete_doc_if_exists("Page", "stock-analytics")
 execute:frappe.delete_doc_if_exists("Page", "production-analytics")
-erpnext.patches.v11_0.ewaybill_fields_gst_india #2018-11-13 #2019-01-09 #2019-04-01 #2019-04-26
+erpnext.patches.v11_0.ewaybill_fields_gst_india #2019-05-01
 erpnext.patches.v11_0.drop_column_max_days_allowed
 erpnext.patches.v10_0.update_user_image_in_employee
 erpnext.patches.v10_0.repost_gle_for_purchase_receipts_with_rejected_items
diff --git a/erpnext/projects/doctype/project/project_list.js b/erpnext/projects/doctype/project/project_list.js
index 0f715bf..5ad4bb7 100644
--- a/erpnext/projects/doctype/project/project_list.js
+++ b/erpnext/projects/doctype/project/project_list.js
@@ -3,7 +3,7 @@
 	filters:[["status","=", "Open"]],
 	get_indicator: function(doc) {
 		if(doc.status=="Open" && doc.percent_complete) {
-			return [__("{0}% Complete", [cint(doc.percent_complete)]), "orange", "percent_complete,>,0|status,=,Open"];
+			return [__("{0}%", [cint(doc.percent_complete)]), "orange", "percent_complete,>,0|status,=,Open"];
 		} else {
 			return [__(doc.status), frappe.utils.guess_colour(doc.status), "status,=," + doc.status];
 		}
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index 2686e58..ac71b28 100755
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -48,7 +48,7 @@
 		if self.status!=self.get_db_value("status") and self.status == "Completed":
 			for d in self.depends_on:
 				if frappe.db.get_value("Task", d.task, "status") != "Completed":
-					frappe.throw(_("Cannot close task as its dependant task {0} is not closed.").format(d.task))
+					frappe.throw(_("Cannot close task {0} as its dependant task {1} is not closed.").format(frappe.bold(self.name), frappe.bold(d.task)))
 
 			from frappe.desk.form.assign_to import clear
 			clear(self.doctype, self.name)
diff --git a/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py
index 4667107..de150f4 100644
--- a/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py
+++ b/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py
@@ -11,6 +11,8 @@
 from erpnext.stock.doctype.item.test_item import make_item
 import json
 
+test_dependencies = ["Territory", "Customer Group", "Supplier Group", "Item"]
+
 class TestGSTR3BReport(unittest.TestCase):
 	def test_gstr_3b_report(self):
 
@@ -388,5 +390,3 @@
 		})
 
 		gst_settings.save()
-
-
diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py
index f3a4f7c..e1aa233 100644
--- a/erpnext/regional/india/setup.py
+++ b/erpnext/regional/india/setup.py
@@ -105,16 +105,18 @@
 		dict(fieldname='gst_section', label='GST Details', fieldtype='Section Break',
 			insert_after='language', print_hide=1, collapsible=1),
 		dict(fieldname='gst_category', label='GST Category',
-			fieldtype='Data', insert_after='gst_section', print_hide=1,
-			fetch_from='supplier.gst_category')
+			fieldtype='Select', insert_after='gst_section', print_hide=1,
+			options='\nRegistered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nUIN Holders',
+			fetch_from='supplier.gst_category', fetch_if_empty=1)
 	]
 
 	sales_invoice_gst_category = [
 		dict(fieldname='gst_section', label='GST Details', fieldtype='Section Break',
 			insert_after='language', print_hide=1, collapsible=1),
 		dict(fieldname='gst_category', label='GST Category',
-			fieldtype='Data', insert_after='gst_section', print_hide=1,
-			fetch_from='customer.gst_category')
+			fieldtype='Select', insert_after='gst_section', print_hide=1,
+			options='\nRegistered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nConsumer\nDeemed Export\nUIN Holders',
+			fetch_from='customer.gst_category', fetch_if_empty=1)
 	]
 
 	invoice_gst_fields = [