Fixes for Manage Variants
diff --git a/erpnext/patches/v5_0/item_variants.py b/erpnext/patches/v5_0/item_variants.py
index 6e4db19..62e9ac9 100644
--- a/erpnext/patches/v5_0/item_variants.py
+++ b/erpnext/patches/v5_0/item_variants.py
@@ -2,11 +2,15 @@
 
 def execute():
 	frappe.reload_doctype("Item")
+	for dt in ["manage_variants", "manage_variants_item", "variant_attribute"]:
+		frappe.reload_doc("stock", "doctype", dt)
+
 	for d in  frappe.get_list("Item", filters={"has_variants":1}):
 		manage_variant = frappe.new_doc("Manage Variants")
-		manage_variant.item = d.name
+		manage_variant.item_code = d.name
 		manage_variant.attributes = frappe.db.sql("select item_attribute as attribute, item_attribute_value as attribute_value \
 			from `tabItem Variant` where parent = %s", d.name, as_dict=1)
-		manage_variant.generate_combinations()
-		manage_variant.create_variants()
-	frappe.delete_doc("doctype", "Item Variant")
\ No newline at end of file
+		if manage_variant.attributes:
+			manage_variant.generate_combinations()
+			manage_variant.create_variants()
+	frappe.delete_doc("DocType", "Item Variant")
\ No newline at end of file
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index d2f1d75..58b1adb 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -86,7 +86,7 @@
 	},
 	
 	manage_variants: function(frm) {
-		frappe.route_options = {"item": frm.doc.name };
+		frappe.route_options = {"item_code": frm.doc.name };
 		frappe.set_route("List", "Manage Variants");
 	}
 });
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 22e6b21..a24fc04 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -332,14 +332,14 @@
 			updated = []
 			variants = frappe.db.get_all("Item", fields=["item_code"], filters={"variant_of": self.name })
 			for d in variants:
-				update_variant(self.item_code, d)
+				update_variant(self.name, d)
 				updated.append(d.item_code)
 			frappe.msgprint(_("Item Variants {0} updated").format(", ".join(updated)))
 				
 	def validate_has_variants(self):
 		if not self.has_variants and frappe.db.get_value("Item", self.name, "has_variants"):
 			if frappe.db.exists("Item", {"variant_of": self.name}):
-				frappe.throw("Item has variants.")
+				frappe.throw(_("Item has variants."))
 
 	def validate_stock_for_template_must_be_zero(self):
 		if self.has_variants:
diff --git a/erpnext/stock/doctype/manage_variants/manage_variants.js b/erpnext/stock/doctype/manage_variants/manage_variants.js
index 82a3da7..ba5c46e 100644
--- a/erpnext/stock/doctype/manage_variants/manage_variants.js
+++ b/erpnext/stock/doctype/manage_variants/manage_variants.js
@@ -43,7 +43,7 @@
 		});
 	},
 
-	item:function(frm) {
+	item_code:function(frm) {
 		return frappe.call({
 			method: "get_item_details",
 			doc:frm.doc,
diff --git a/erpnext/stock/doctype/manage_variants/manage_variants.json b/erpnext/stock/doctype/manage_variants/manage_variants.json
index 055fc27..7c61620 100644
--- a/erpnext/stock/doctype/manage_variants/manage_variants.json
+++ b/erpnext/stock/doctype/manage_variants/manage_variants.json
@@ -9,9 +9,9 @@
  "document_type": "", 
  "fields": [
   {
-   "fieldname": "item", 
+   "fieldname": "item_code", 
    "fieldtype": "Link", 
-   "label": "Item", 
+   "label": "Item Code", 
    "options": "Item", 
    "permlevel": 0, 
    "precision": "", 
@@ -75,7 +75,7 @@
  "is_submittable": 0, 
  "issingle": 1, 
  "istable": 0, 
- "modified": "2015-06-30 03:18:13.787883", 
+ "modified": "2015-06-30 13:40:59.946655", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Manage Variants", 
diff --git a/erpnext/stock/doctype/manage_variants/manage_variants.py b/erpnext/stock/doctype/manage_variants/manage_variants.py
index 8b1a13b..0131deb 100644
--- a/erpnext/stock/doctype/manage_variants/manage_variants.py
+++ b/erpnext/stock/doctype/manage_variants/manage_variants.py
@@ -15,7 +15,7 @@
 
 	def get_item_details(self):
 		self.clear_tables()
-		if self.item:
+		if self.item_code:
 			self.get_attributes()
 			self.get_variants()
 		
@@ -37,7 +37,7 @@
 		attributes = {}
 		self.set('attributes', [])
 		for d in frappe.db.sql("""select attribute, attribute_value from `tabVariant Attribute` as attribute, 
-			`tabItem` as item where attribute.parent= item.name and item.variant_of = %s""", self.item, as_dict=1):
+			`tabItem` as item where attribute.parent= item.name and item.variant_of = %s""", self.item_code, as_dict=1):
 				attributes.setdefault(d.attribute, []).append(d.attribute_value)
 		for d in attributes:
 			attribute_values = set(attributes[d])
@@ -46,24 +46,25 @@
 
 	def get_variants(self):
 		variants = [d.name for d in frappe.get_all("Item",
-			filters={"variant_of":self.item})]
+			filters={"variant_of":self.item_code})]
+		data = frappe.db.sql("""select parent, attribute, attribute_value from `tabVariant Attribute`""", as_dict=1)
 		for d in variants:
 			variant_attributes, attributes = "", []
-			for attribute in frappe.db.sql("""select attribute, attribute_value from `tabVariant Attribute` where parent = %s""", d):
-				variant_attributes += attribute[1] + " | "
-				attributes.append([attribute[0], attribute[1]])
+			for attribute in data:
+				if attribute.parent == d:
+					variant_attributes += attribute.attribute_value + " | "
+					attributes.append([attribute.attribute, attribute.attribute_value])
 			self.append('variants',{"variant": d, "variant_attributes": variant_attributes[: -3], "attributes": json.dumps(attributes)})
 
 	def validate_attributes(self):
 		if not self.attributes:
-			frappe.throw("Enter atleast one Attribute & its Value in Attribute table.")
+			frappe.throw(_("Enter atleast one Attribute & its Value in Attribute table."))
 
 	def validate_template_item(self):
-		template_item = frappe.get_doc("Item", self.item)
-		if not template_item.has_variants:
+		if not frappe.db.get_value("Item", self.item_code, "has_variants"):
 			frappe.throw(_("Selected Item cannot have Variants."))
 
-		if template_item.variant_of:
+		if frappe.db.get_value("Item", self.item_code, "variant_of"):
 			frappe.throw(_("Item cannot be a variant of a variant"))
 
 	def validate_attribute_values(self):
@@ -111,7 +112,7 @@
 							variant_attributes += d[1] + " | "
 						self.append('variants', {"variant": item_code + "-" + value.abbr, 
 							"attributes": json.dumps(_my_attributes), "variant_attributes": variant_attributes[: -3]})
-		add_attribute_suffixes(self.item, [], attributes)
+		add_attribute_suffixes(self.item_code, [], attributes)
 
 	def sync_variants(self):
 		variant_item_codes = []
@@ -122,7 +123,7 @@
 			variant_item_codes.append(v.variant)
 
 		existing_variants = [d.name for d in frappe.get_all("Item",
-			filters={"variant_of":self.item})]
+			filters={"variant_of":self.item_code})]
 		
 		for d in existing_variants:
 			attributes = []
@@ -147,10 +148,10 @@
 		for item_code in variant_item_codes:
 			if item_code not in existing_variants:
 				if item_code not in new_variant_name:
-					make_variant(self.item, item_code, self.variants)
+					make_variant(self.item_code, item_code, self.variants)
 					inserted.append(item_code)
 			else:
-				update_variant(self.item, item_code, self.variants)
+				update_variant(self.item_code, item_code, self.variants)
 				updated.append(item_code)
 
 		if inserted:
@@ -168,14 +169,12 @@
 def make_variant(item, variant_code, variant_attribute):
 	variant = frappe.new_doc("Item")
 	variant.item_code = variant_code
-	template = frappe.get_doc("Item", item)
-	copy_attributes_to_variant(template, variant, variant_attribute, insert=True)
+	copy_attributes_to_variant(item, variant, variant_attribute, insert=True)
 	variant.insert()
 
 def update_variant(item, variant_code, variant_attribute=None):
 	variant = frappe.get_doc("Item", variant_code)
-	template = frappe.get_doc("Item", item)
-	copy_attributes_to_variant(template, variant, variant_attribute, insert=True)
+	copy_attributes_to_variant(item, variant, variant_attribute, insert=True)
 	variant.save()
 
 def rename_variant(old_variant_code, new_variant_code):
@@ -184,7 +183,8 @@
 def delete_variant(variant_code):
 	frappe.delete_doc("Item", variant_code)
 
-def copy_attributes_to_variant(template, variant, variant_attribute=None, insert=False):
+def copy_attributes_to_variant(item, variant, variant_attribute=None, insert=False):
+	template = frappe.get_doc("Item", item)
 	from frappe.model import no_value_fields
 	for field in template.meta.fields:
 		if field.fieldtype not in no_value_fields and (insert or not field.no_copy)\