Inspection required before delivery isn't working for item variants (#9362)
* makes `copy_attributes_to_variant` to not ignore "Table"
* fixes test cases - `test_auto_material_request` and `test_auto_material_request_for_variant`
* adds test case - tables in templates should be copied to variants
* [ci] use deprecated trusty build for now
diff --git a/erpnext/controllers/item_variant.py b/erpnext/controllers/item_variant.py
index 3349303..226b17f 100644
--- a/erpnext/controllers/item_variant.py
+++ b/erpnext/controllers/item_variant.py
@@ -169,6 +169,7 @@
return variant
+
def copy_attributes_to_variant(item, variant):
from frappe.model import no_value_fields
@@ -181,8 +182,9 @@
exclude_fields += ['manufacturer', 'manufacturer_part_no']
for field in item.meta.fields:
- if field.fieldtype not in no_value_fields and (not field.no_copy)\
- and field.fieldname not in exclude_fields:
+ # "Table" is part of `no_value_field` but we shouldn't ignore tables
+ if (field.fieldtype == 'Table' or field.fieldtype not in no_value_fields) \
+ and (not field.no_copy) 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
diff --git a/erpnext/controllers/tests/test_item_variant.py b/erpnext/controllers/tests/test_item_variant.py
new file mode 100644
index 0000000..9fc45d2
--- /dev/null
+++ b/erpnext/controllers/tests/test_item_variant.py
@@ -0,0 +1,58 @@
+from __future__ import unicode_literals
+
+import frappe
+import json
+import unittest
+
+from erpnext.controllers.item_variant import copy_attributes_to_variant, make_variant_item_code
+
+# python 3 compatibility stuff
+try:
+ unicode = unicode
+except NameError:
+ # Python 3
+ basestring = (str, bytes)
+else:
+ # Python 2
+ basestring = basestring
+
+
+def create_variant_with_tables(item, args):
+ if isinstance(args, basestring):
+ args = json.loads(args)
+
+ template = frappe.get_doc("Item", item)
+ template.quality_parameters.append({
+ "specification": "Moisture",
+ "value": "< 5%",
+ })
+ variant = frappe.new_doc("Item")
+ variant.variant_based_on = 'Item Attribute'
+ variant_attributes = []
+
+ for d in template.attributes:
+ variant_attributes.append({
+ "attribute": d.attribute,
+ "attribute_value": args.get(d.attribute)
+ })
+
+ variant.set("attributes", variant_attributes)
+ copy_attributes_to_variant(template, variant)
+ make_variant_item_code(template.item_code, template.item_name, variant)
+
+ return variant
+
+
+def make_item_variant():
+ frappe.delete_doc_if_exists("Item", "_Test Variant Item-S", force=1)
+ variant = create_variant_with_tables("_Test Variant Item", '{"Test Size": "Small"}')
+ variant.item_code = "_Test Variant Item-S"
+ variant.item_name = "_Test Variant Item-S"
+ variant.save()
+ return variant
+
+
+class TestItemVariant(unittest.TestCase):
+ def test_tables_in_template_copied_to_variant(self):
+ variant = make_item_variant()
+ self.assertNotEqual(variant.get("quality_parameters"), [])