Merge branch 'hotfix' into fix-item-variant-settings-barcodes
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 45ee8dc..b1a393b 100755
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -585,5 +585,6 @@
 erpnext.patches.v11_0.add_permissions_in_gst_settings
 erpnext.patches.v11_1.setup_guardian_role
 execute:frappe.delete_doc('DocType', 'Notification Control')
+erpnext.patches.v11_0.remove_barcodes_field_from_copy_fields_to_variants
 erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
 erpnext.patches.v11_0.make_italian_localization_fields
diff --git a/erpnext/patches/v11_0/remove_barcodes_field_from_copy_fields_to_variants.py b/erpnext/patches/v11_0/remove_barcodes_field_from_copy_fields_to_variants.py
new file mode 100644
index 0000000..97ddd41
--- /dev/null
+++ b/erpnext/patches/v11_0/remove_barcodes_field_from_copy_fields_to_variants.py
@@ -0,0 +1,7 @@
+import frappe
+
+def execute():
+	'''Remove barcodes field from "Copy Fields to Variants" table because barcodes must be unique'''
+
+	settings = frappe.get_doc('Item Variant Settings')
+	settings.remove_invalid_fields_for_copy_fields_in_variants()
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 678de1a..0422442 100644
--- a/erpnext/stock/doctype/item_variant_settings/item_variant_settings.py
+++ b/erpnext/stock/doctype/item_variant_settings/item_variant_settings.py
@@ -5,14 +5,17 @@
 from __future__ import unicode_literals
 import frappe
 from frappe.model.document import Document
+from frappe import _
 
 class ItemVariantSettings(Document):
+	invalid_fields_for_copy_fields_in_variants = ['barcodes']
+
 	def set_default_fields(self):
 		self.fields = []
 		fields = frappe.get_meta('Item').fields
 		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_of", "valuation_rate", "description", "barcodes",
 			"website_image", "thumbnail", "website_specifiations", "web_long_description"]
 
 		for d in fields:
@@ -20,4 +23,14 @@
 				d.fieldtype not in ['HTML', 'Section Break', 'Column Break', 'Button', 'Read Only']:
 				self.append('fields', {
 					'field_name': d.fieldname
-				})
\ No newline at end of file
+				})
+
+	def remove_invalid_fields_for_copy_fields_in_variants(self):
+		fields = [row for row in self.fields if row.field_name not in self.invalid_fields_for_copy_fields_in_variants]
+		self.fields = fields
+		self.save()
+
+	def validate(self):
+		for d in self.fields:
+			if d.field_name in self.invalid_fields_for_copy_fields_in_variants:
+				frappe.throw(_('Cannot set the field <b>{0}</b> for copying in variants').format(d.field_name))