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
|
return variant
|
||||||
|
|
||||||
|
|
||||||
def copy_attributes_to_variant(item, variant):
|
def copy_attributes_to_variant(item, variant):
|
||||||
from frappe.model import no_value_fields
|
from frappe.model import no_value_fields
|
||||||
|
|
||||||
@ -181,8 +182,9 @@ def copy_attributes_to_variant(item, variant):
|
|||||||
exclude_fields += ['manufacturer', 'manufacturer_part_no']
|
exclude_fields += ['manufacturer', 'manufacturer_part_no']
|
||||||
|
|
||||||
for field in item.meta.fields:
|
for field in item.meta.fields:
|
||||||
if field.fieldtype not in no_value_fields and (not field.no_copy)\
|
# "Table" is part of `no_value_field` but we shouldn't ignore tables
|
||||||
and field.fieldname not in exclude_fields:
|
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):
|
if variant.get(field.fieldname) != item.get(field.fieldname):
|
||||||
variant.set(field.fieldname, item.get(field.fieldname))
|
variant.set(field.fieldname, item.get(field.fieldname))
|
||||||
variant.variant_of = item.name
|
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")
|
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"):
|
def _test_auto_material_request(self, item_code, material_request_type="Purchase", warehouse="_Test Warehouse - _TC"):
|
||||||
item = frappe.get_doc("Item", item_code)
|
variant = frappe.get_doc("Item", item_code)
|
||||||
|
|
||||||
if item.variant_of:
|
|
||||||
template = frappe.get_doc("Item", item.variant_of)
|
|
||||||
else:
|
|
||||||
template = item
|
|
||||||
|
|
||||||
projected_qty, actual_qty = frappe.db.get_value("Bin", {"item_code": item_code,
|
projected_qty, actual_qty = frappe.db.get_value("Bin", {"item_code": item_code,
|
||||||
"warehouse": warehouse}, ["projected_qty", "actual_qty"]) or [0, 0]
|
"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)
|
frappe.db.set_value("Stock Settings", None, "auto_indent", 1)
|
||||||
|
|
||||||
# update re-level qty so that it is more than projected_qty
|
# update re-level qty so that it is more than projected_qty
|
||||||
if projected_qty >= template.reorder_levels[0].warehouse_reorder_level:
|
if projected_qty >= variant.reorder_levels[0].warehouse_reorder_level:
|
||||||
template.reorder_levels[0].warehouse_reorder_level += projected_qty
|
variant.reorder_levels[0].warehouse_reorder_level += projected_qty
|
||||||
template.reorder_levels[0].material_request_type = material_request_type
|
variant.reorder_levels[0].material_request_type = material_request_type
|
||||||
template.save()
|
variant.save()
|
||||||
|
|
||||||
from erpnext.stock.reorder_item import reorder_item
|
from erpnext.stock.reorder_item import reorder_item
|
||||||
mr_list = reorder_item()
|
mr_list = reorder_item()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user