mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-21 18:29:57 +00:00
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
This commit is contained in:
@@ -7,6 +7,12 @@ const SALES_DOCTYPES = ["Quotation", "Sales Order", "Delivery Note", "Sales Invo
|
||||
const PURCHASE_DOCTYPES = ["Purchase Order", "Purchase Receipt", "Purchase Invoice"];
|
||||
|
||||
frappe.ui.form.on("Item", {
|
||||
stock_uom(frm) {
|
||||
// Each factor is relative to Stock UOM and becomes invalid when it changes.
|
||||
frm.clear_table("uoms");
|
||||
frm.refresh_field("uoms");
|
||||
},
|
||||
|
||||
valuation_method(frm) {
|
||||
if (!frm.is_new() && frm.doc.valuation_method === "Moving Average") {
|
||||
let stock_exists = frm.doc.__onload && frm.doc.__onload.stock_exists ? 1 : 0;
|
||||
|
||||
@@ -1023,6 +1023,9 @@ class Item(Document):
|
||||
def validate_uom_conversion_factor(self):
|
||||
if self.uoms:
|
||||
for d in self.uoms:
|
||||
if d.conversion_factor:
|
||||
continue
|
||||
|
||||
value = get_uom_conv_factor(d.uom, self.stock_uom)
|
||||
if value:
|
||||
d.conversion_factor = value
|
||||
|
||||
@@ -749,15 +749,25 @@ class TestItem(ERPNextTestSuite):
|
||||
"Test Item UOM", {"stock_uom": "Gram", "uoms": [dict(uom="Carat"), dict(uom="Kg")]}
|
||||
)
|
||||
|
||||
for d in item_doc.uoms:
|
||||
value = get_uom_conv_factor(d.uom, item_doc.stock_uom)
|
||||
d.conversion_factor = value
|
||||
|
||||
self.assertEqual(item_doc.uoms[0].uom, "Carat")
|
||||
self.assertEqual(item_doc.uoms[0].conversion_factor, 0.2)
|
||||
self.assertEqual(item_doc.uoms[1].uom, "Kg")
|
||||
self.assertEqual(item_doc.uoms[1].conversion_factor, 1000)
|
||||
|
||||
def test_item_uom_conversion_factor_overrides_global_factor(self):
|
||||
custom_factor = 10.76
|
||||
global_factor = get_uom_conv_factor("Square Meter", "Square Foot")
|
||||
self.assertNotEqual(custom_factor, global_factor)
|
||||
|
||||
item = make_item(
|
||||
properties={"stock_uom": "Square Foot"},
|
||||
uoms=[{"uom": "Square Meter", "conversion_factor": custom_factor}],
|
||||
)
|
||||
item.reload()
|
||||
|
||||
conversion_factor = next(row.conversion_factor for row in item.uoms if row.uom == "Square Meter")
|
||||
self.assertEqual(conversion_factor, custom_factor)
|
||||
|
||||
def test_uom_conv_intermediate(self):
|
||||
factor = get_uom_conv_factor("Pound", "Gram")
|
||||
self.assertAlmostEqual(factor, 453.592, 3)
|
||||
@@ -930,7 +940,10 @@ class TestItem(ERPNextTestSuite):
|
||||
item.reload()
|
||||
item.stock_uom = "Nos"
|
||||
item.save()
|
||||
self.assertEqual(len(item.uoms), 1)
|
||||
self.assertEqual(
|
||||
[(row.uom, row.conversion_factor) for row in item.uoms],
|
||||
[("Nos", 1)],
|
||||
)
|
||||
|
||||
def test_validate_stock_item(self):
|
||||
self.assertRaises(frappe.ValidationError, validate_is_stock_item, "_Test Non Stock Item")
|
||||
|
||||
Reference in New Issue
Block a user