Fixes based on test case
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 4dae78c..900a6e9 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -1084,7 +1084,7 @@
 		si.items[0].price_list_rate = price_list_rate
 		si.items[0].margin_type = 'Percentage'
 		si.items[0].margin_rate_or_amount = 25
-		si.insert()
+		si.save()
 		self.assertEqual(si.get("items")[0].rate, flt((price_list_rate*25)/100 + price_list_rate))
 
 	def test_outstanding_amount_after_advance_jv_cancelation(self):
diff --git a/erpnext/controllers/item_variant.py b/erpnext/controllers/item_variant.py
index ff11eb2..5b5cd9e 100644
--- a/erpnext/controllers/item_variant.py
+++ b/erpnext/controllers/item_variant.py
@@ -174,7 +174,8 @@
 
 	# copy non no-copy fields
 
-	exclude_fields = ["item_code", "item_name", "show_in_website"]
+	exclude_fields = ["naming_series", "item_code", "item_name", "show_in_website",
+		"show_variant_in_website", "opening_stock", "variant_of", "valuation_rate", "variant_based_on"]
 
 	if item.variant_based_on=='Manufacturer':
 		# don't copy manufacturer values if based on part no
@@ -186,6 +187,7 @@
 		if (field.reqd or field.fieldname in allow_fields) and field.fieldname not in exclude_fields:
 			if variant.get(field.fieldname) != item.get(field.fieldname):
 				variant.set(field.fieldname, item.get(field.fieldname))
+
 	variant.variant_of = item.name
 	variant.has_variants = 0
 	if not variant.description:
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index f04fddf..31aedb3 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -370,8 +370,13 @@
 		self.actual_start_date = None
 		self.actual_end_date = None
 		if self.get("operations"):
-			self.actual_start_date = min([d.actual_start_time for d in self.get("operations") if d.actual_start_time])
-			self.actual_end_date = max([d.actual_end_time for d in self.get("operations") if d.actual_end_time])
+			actual_start_dates = [d.actual_start_time for d in self.get("operations") if d.actual_start_time]
+			if actual_start_dates:
+				self.actual_start_date = min(actual_start_dates)
+
+			actual_end_dates = [d.actual_end_time for d in self.get("operations") if d.actual_end_time]
+			if actual_end_dates:
+				self.actual_end_date = max(actual_end_dates)
 
 	def delete_timesheet(self):
 		for timesheet in frappe.get_all("Timesheet", ["name"], {"production_order": self.name}):
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 2cb93f0..9f4c2b9 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -53,12 +53,17 @@
 			return frappe.get_all("Task", "*", {"project": self.name}, order_by="exp_start_date asc")
 
 	def validate(self):
+		self.validate_project_name()
 		self.validate_dates()
 		self.validate_weights()
 		self.sync_tasks()
 		self.tasks = []
 		self.send_welcome_email()
 
+	def validate_project_name(self):
+		if frappe.db.exists("Project", self.project_name):
+			frappe.throw(_("Project {0} already exists").format(self.project_name))
+
 	def validate_dates(self):
 		if self.expected_start_date and self.expected_end_date:
 			if getdate(self.expected_end_date) < getdate(self.expected_start_date):
diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py
index fb40e32..4e23591 100644
--- a/erpnext/regional/india/setup.py
+++ b/erpnext/regional/india/setup.py
@@ -12,7 +12,7 @@
 	make_custom_fields()
 	add_permissions()
 	add_custom_roles_for_reports()
-	frappe.enqueue('erpnext.regional.india.setup.add_hsn_sac_codes')
+	frappe.enqueue('erpnext.regional.india.setup.add_hsn_sac_codes', now=frappe.flags.in_test)
 	add_print_formats()
 	if not patch:
 		update_address_template()
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index 7c0d7f9..9c5c82e 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -494,7 +494,7 @@
 		so.items[0].price_list_rate = price_list_rate = 100
 		so.items[0].margin_type = 'Percentage'
 		so.items[0].margin_rate_or_amount = 25
-		so.insert()
+		so.save()
 
 		new_so = frappe.copy_doc(so)
 		new_so.save(ignore_permissions=True)
diff --git a/erpnext/stock/doctype/item_variant_settings/item_variant_settings.js b/erpnext/stock/doctype/item_variant_settings/item_variant_settings.js
index f3404cc..df78572 100644
--- a/erpnext/stock/doctype/item_variant_settings/item_variant_settings.js
+++ b/erpnext/stock/doctype/item_variant_settings/item_variant_settings.js
@@ -4,8 +4,8 @@
 frappe.ui.form.on('Item Variant Settings', {
 	setup: function(frm) {
 		const allow_fields = [];
-		const exclude_fields = ["item_code", "item_name", "show_in_website", "show_variant_in_website", 
-			"opening_stock", "variant_of", "valuation_rate", "variant_based_on"];
+		const exclude_fields = ["naming_series", "item_code", "item_name", "show_in_website",
+		"show_variant_in_website", "opening_stock", "variant_of", "valuation_rate", "variant_based_on"];
 
 		frappe.model.with_doctype('Item', () => {
 			frappe.get_meta('Item').fields.forEach(d => {
diff --git a/erpnext/stock/doctype/item_variant_settings/item_variant_settings.py b/erpnext/stock/doctype/item_variant_settings/item_variant_settings.py
index 80462d1..0c6acd4 100644
--- a/erpnext/stock/doctype/item_variant_settings/item_variant_settings.py
+++ b/erpnext/stock/doctype/item_variant_settings/item_variant_settings.py
@@ -10,8 +10,8 @@
 	def set_default_fields(self):
 		self.fields = []
 		fields = frappe.get_meta('Item').fields
-		exclude_fields = ["item_code", "item_name", "show_in_website", "show_variant_in_website",
-			"standard_rate", "opening_stock", "image", "description",
+		exclude_fields = ["naming_series", "item_code", "item_name", "show_in_website",
+			"show_variant_in_website", "standard_rate", "opening_stock", "image", "description",
 			"variant_of", "valuation_rate", "description", "variant_based_on",
 			"website_image", "thumbnail", "website_specifiations", "web_long_description"]