Merge pull request #16497 from nabinhait/bom_price
BOM raw materials price
diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py
index 2ff2644..9ff8b04 100644
--- a/erpnext/accounts/deferred_revenue.py
+++ b/erpnext/accounts/deferred_revenue.py
@@ -29,7 +29,7 @@
if date_diff(item.service_stop_date, item.service_end_date) > 0:
frappe.throw(_("Service Stop Date cannot be after Service End Date"))
- if old_stop_dates and old_stop_dates[item.name] and item.service_stop_date!=old_stop_dates[item.name]:
+ if old_stop_dates and old_stop_dates.get(item.name) and item.service_stop_date!=old_stop_dates[item.name]:
frappe.throw(_("Cannot change Service Stop Date for item in row {0}".format(item.idx)))
def convert_deferred_expense_to_expense(start_date=None, end_date=None):
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 57a1cc25..2317634 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -189,7 +189,8 @@
"currency": self.currency,
"conversion_rate": self.conversion_rate or 1,
"conversion_factor": arg.get("conversion_factor") or 1,
- "plc_conversion_rate": 1
+ "plc_conversion_rate": 1,
+ "ignore_party": True
})
item_doc = frappe.get_doc("Item", arg.get("item_code"))
out = frappe._dict()
@@ -213,7 +214,7 @@
existing_bom_cost = self.total_cost
for d in self.get("items"):
- d.rate = self.get_rm_rate({
+ rate = self.get_rm_rate({
"item_code": d.item_code,
"bom_no": d.bom_no,
"qty": d.qty,
@@ -221,6 +222,8 @@
"stock_uom": d.stock_uom,
"conversion_factor": d.conversion_factor
})
+ if rate:
+ d.rate = rate
d.amount = flt(d.rate) * flt(d.qty)
if self.docstatus == 1:
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 9db04cd..ec1031c 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -424,7 +424,7 @@
frappe.msgprint(_("Item Price added for {0} in Price List {1}").format(args.item_code,
args.price_list), alert=True)
-def get_item_price(args, item_code):
+def get_item_price(args, item_code, ignore_party=False):
"""
Get name, price_list_rate from Item Price based on conditions
Check if the Derised qty is within the increment of the packing list.
@@ -434,17 +434,19 @@
"""
args['item_code'] = item_code
- conditions = "where (customer is null or customer = '') and (supplier is null or supplier = '')"
- if args.get("customer"):
- conditions = "where customer=%(customer)s"
- if args.get("supplier"):
- conditions = "where supplier=%(supplier)s"
-
- conditions += """ and item_code=%(item_code)s
+ conditions = """where item_code=%(item_code)s
and price_list=%(price_list)s
and ifnull(uom, '') in ('', %(uom)s)"""
+ if not ignore_party:
+ if args.get("customer"):
+ conditions += " and customer=%(customer)s"
+ elif args.get("supplier"):
+ conditions += " and supplier=%(supplier)s"
+ else:
+ conditions += " and (customer is null or customer = '') and (supplier is null or supplier = '')"
+
if args.get('min_qty'):
conditions += " and ifnull(min_qty, 0) <= %(min_qty)s"
@@ -490,10 +492,10 @@
for field in ["customer", "supplier", "min_qty"]:
del item_price_args[field]
- general_price_list_rate = get_item_price(item_price_args, item_code)
+ general_price_list_rate = get_item_price(item_price_args, item_code, ignore_party=args.get("ignore_party"))
if not general_price_list_rate and args.get("uom") != args.get("stock_uom"):
item_price_args["args"] = args.get("stock_uom")
- general_price_list_rate = get_item_price(item_price_args, item_code)
+ general_price_list_rate = get_item_price(item_price_args, item_code, ignore_party=args.get("ignore_party"))
if general_price_list_rate:
item_price_data = general_price_list_rate