[fix] Fetch raw material rate based on last purchase rate (#11205)
* [fix] Fetch raw material rate based on last purchase rate
* Don't fetch sub-assembly item rate from BOM if not mentioned by the user
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index ead5d33..b140bf5 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -147,22 +147,28 @@
if arg.get('scrap_items'):
rate = self.get_valuation_rate(arg)
elif arg:
- if self.rm_cost_as_per == 'Valuation Rate':
- rate = self.get_valuation_rate(arg)
- elif self.rm_cost_as_per == 'Last Purchase Rate':
- rate = arg['last_purchase_rate'] \
- or frappe.db.get_value("Item", arg['item_code'], "last_purchase_rate")
- elif self.rm_cost_as_per == "Price List":
- if not self.buying_price_list:
- frappe.throw(_("Please select Price List"))
- rate = frappe.db.get_value("Item Price",
- {"price_list": self.buying_price_list, "item_code": arg["item_code"]}, "price_list_rate")
- price_list_currency = frappe.db.get_value("Price List", self.buying_price_list, "currency")
- if price_list_currency != self.company_currency():
- rate = flt(rate * self.conversion_rate)
-
- if arg['bom_no'] and (not rate or self.set_rate_of_sub_assembly_item_based_on_bom):
+ if arg.get('bom_no') and self.set_rate_of_sub_assembly_item_based_on_bom:
rate = self.get_bom_unitcost(arg['bom_no'])
+ else:
+ if self.rm_cost_as_per == 'Valuation Rate':
+ rate = self.get_valuation_rate(arg)
+ elif self.rm_cost_as_per == 'Last Purchase Rate':
+ rate = arg.get('last_purchase_rate') \
+ or frappe.db.get_value("Item", arg['item_code'], "last_purchase_rate")
+ elif self.rm_cost_as_per == "Price List":
+ if not self.buying_price_list:
+ frappe.throw(_("Please select Price List"))
+ rate = frappe.db.get_value("Item Price", {"price_list": self.buying_price_list,
+ "item_code": arg["item_code"]}, "price_list_rate")
+
+ price_list_currency = frappe.db.get_value("Price List",
+ self.buying_price_list, "currency")
+ if price_list_currency != self.company_currency():
+ rate = flt(rate * self.conversion_rate)
+
+ if not rate:
+ frappe.msgprint(_("{0} not found for Item {1}")
+ .format(self.rm_cost_as_per, arg["item_code"]))
return flt(rate)