diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py index 2ff2644d18..9ff8b04281 100644 --- a/erpnext/accounts/deferred_revenue.py +++ b/erpnext/accounts/deferred_revenue.py @@ -29,7 +29,7 @@ def validate_service_stop_date(doc): 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 57a1cc2593..2317634cfc 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -189,7 +189,8 @@ class BOM(WebsiteGenerator): "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 @@ class BOM(WebsiteGenerator): 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 @@ class BOM(WebsiteGenerator): "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 9db04cd0ab..ec1031c70f 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -424,7 +424,7 @@ def insert_item_price(args): 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 @@ def get_item_price(args, item_code): """ 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 @@ def get_price_list_rate_for(args, item_code): 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