Valuation rate of raw materials in BOM. #1688
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 13bf087..56bff32 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -3,7 +3,7 @@
from __future__ import unicode_literals
import frappe
-from frappe.utils import cint, cstr, flt, now, nowdate
+from frappe.utils import cint, cstr, flt
from frappe import _
from frappe.model.document import Document
@@ -132,26 +132,15 @@
return bom and bom[0]['unit_cost'] or 0
def get_valuation_rate(self, args):
- """ Get average valuation rate of relevant warehouses
- as per valuation method (MAR/FIFO)
- as on costing date
- """
- from erpnext.stock.utils import get_incoming_rate
- posting_date, posting_time = nowdate(), now().split()[1]
- warehouse = frappe.db.sql("select warehouse from `tabBin` where item_code = %s", args['item_code'])
- rate = []
- for wh in warehouse:
- r = get_incoming_rate({
- "item_code": args.get("item_code"),
- "warehouse": wh[0],
- "posting_date": posting_date,
- "posting_time": posting_time,
- "qty": args.get("qty") or 0
- })
- if r:
- rate.append(r)
+ """ Get weighted average of valuation rate from all warehouses """
- return rate and flt(sum(rate))/len(rate) or 0
+ total_qty, total_value = 0, 0
+ for d in frappe.db.sql("""select actual_qty, stock_value from `tabBin`
+ where item_code=%s and actual_qty > 0""", args['item_code'], as_dict=1):
+ total_qty += flt(d.actual_qty)
+ total_value += flt(d.stock_value)
+
+ return total_value / total_qty
def manage_default_bom(self):
""" Uncheck others if current one is selected as default,