fix: incorrect rate in BOM exploded items (#31513)
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index b29f671..70637d3 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -189,8 +189,8 @@
self.validate_transfer_against()
self.set_routing_operations()
self.validate_operations()
- self.update_exploded_items(save=False)
self.calculate_cost()
+ self.update_exploded_items(save=False)
self.update_stock_qty()
self.update_cost(update_parent=False, from_child_bom=True, update_hour_rate=False, save=False)
self.validate_scrap_items()
diff --git a/erpnext/manufacturing/doctype/bom/test_bom.py b/erpnext/manufacturing/doctype/bom/test_bom.py
index a190cc7..27f3cc9 100644
--- a/erpnext/manufacturing/doctype/bom/test_bom.py
+++ b/erpnext/manufacturing/doctype/bom/test_bom.py
@@ -611,6 +611,34 @@
bom.reload()
self.assertEqual(frappe.get_value("Item", fg_item.item_code, "default_bom"), bom.name)
+ def test_exploded_items_rate(self):
+ rm_item = make_item(
+ properties={"is_stock_item": 1, "valuation_rate": 99, "last_purchase_rate": 89}
+ ).name
+ fg_item = make_item(properties={"is_stock_item": 1}).name
+
+ from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
+
+ bom = make_bom(item=fg_item, raw_materials=[rm_item], do_not_save=True)
+
+ bom.rm_cost_as_per = "Last Purchase Rate"
+ bom.save()
+ self.assertEqual(bom.items[0].base_rate, 89)
+ self.assertEqual(bom.exploded_items[0].rate, bom.items[0].base_rate)
+
+ bom.rm_cost_as_per = "Price List"
+ bom.save()
+ self.assertEqual(bom.items[0].base_rate, 0.0)
+ self.assertEqual(bom.exploded_items[0].rate, bom.items[0].base_rate)
+
+ bom.rm_cost_as_per = "Valuation Rate"
+ bom.save()
+ self.assertEqual(bom.items[0].base_rate, 99)
+ self.assertEqual(bom.exploded_items[0].rate, bom.items[0].base_rate)
+
+ bom.submit()
+ self.assertEqual(bom.exploded_items[0].rate, bom.items[0].base_rate)
+
def get_default_bom(item_code="_Test FG Item 2"):
return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1})
diff --git a/erpnext/manufacturing/doctype/bom_item/bom_item.json b/erpnext/manufacturing/doctype/bom_item/bom_item.json
index 0a8ae7b..c526611 100644
--- a/erpnext/manufacturing/doctype/bom_item/bom_item.json
+++ b/erpnext/manufacturing/doctype/bom_item/bom_item.json
@@ -184,6 +184,7 @@
"in_list_view": 1,
"label": "Rate",
"options": "currency",
+ "read_only": 1,
"reqd": 1
},
{
@@ -288,7 +289,7 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
- "modified": "2022-05-19 02:32:43.785470",
+ "modified": "2022-07-28 10:20:51.559010",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "BOM Item",