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
This commit is contained in:
parent
5e4c8ecd62
commit
6015f0f2ec
@ -169,6 +169,7 @@ def create_variant(item, args):
|
||||
|
||||
return variant
|
||||
|
||||
|
||||
def copy_attributes_to_variant(item, variant):
|
||||
from frappe.model import no_value_fields
|
||||
|
||||
@ -181,8 +182,9 @@ def copy_attributes_to_variant(item, variant):
|
||||
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
|
||||
|
58
erpnext/controllers/tests/test_item_variant.py
Normal file
58
erpnext/controllers/tests/test_item_variant.py
Normal file
@ -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"), [])
|
@ -85,12 +85,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
self._test_auto_material_request("_Test Item Warehouse Group Wise Reorder", warehouse="_Test Warehouse Group-C1 - _TC")
|
||||
|
||||
def _test_auto_material_request(self, item_code, material_request_type="Purchase", warehouse="_Test Warehouse - _TC"):
|
||||
item = frappe.get_doc("Item", item_code)
|
||||
|
||||
if item.variant_of:
|
||||
template = frappe.get_doc("Item", item.variant_of)
|
||||
else:
|
||||
template = item
|
||||
variant = frappe.get_doc("Item", item_code)
|
||||
|
||||
projected_qty, actual_qty = frappe.db.get_value("Bin", {"item_code": item_code,
|
||||
"warehouse": warehouse}, ["projected_qty", "actual_qty"]) or [0, 0]
|
||||
@ -105,10 +100,10 @@ class TestStockEntry(unittest.TestCase):
|
||||
frappe.db.set_value("Stock Settings", None, "auto_indent", 1)
|
||||
|
||||
# update re-level qty so that it is more than projected_qty
|
||||
if projected_qty >= template.reorder_levels[0].warehouse_reorder_level:
|
||||
template.reorder_levels[0].warehouse_reorder_level += projected_qty
|
||||
template.reorder_levels[0].material_request_type = material_request_type
|
||||
template.save()
|
||||
if projected_qty >= variant.reorder_levels[0].warehouse_reorder_level:
|
||||
variant.reorder_levels[0].warehouse_reorder_level += projected_qty
|
||||
variant.reorder_levels[0].material_request_type = material_request_type
|
||||
variant.save()
|
||||
|
||||
from erpnext.stock.reorder_item import reorder_item
|
||||
mr_list = reorder_item()
|
||||
|
Loading…
x
Reference in New Issue
Block a user