Merge pull request #16497 from nabinhait/bom_price

BOM raw materials price
This commit is contained in:
Nabin Hait 2019-01-29 14:58:40 +05:30 committed by GitHub
commit cc41b876fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 13 deletions

View File

@ -29,7 +29,7 @@ def validate_service_stop_date(doc):
if date_diff(item.service_stop_date, item.service_end_date) > 0: if date_diff(item.service_stop_date, item.service_end_date) > 0:
frappe.throw(_("Service Stop Date cannot be after Service End Date")) 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))) 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): def convert_deferred_expense_to_expense(start_date=None, end_date=None):

View File

@ -189,7 +189,8 @@ class BOM(WebsiteGenerator):
"currency": self.currency, "currency": self.currency,
"conversion_rate": self.conversion_rate or 1, "conversion_rate": self.conversion_rate or 1,
"conversion_factor": arg.get("conversion_factor") 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")) item_doc = frappe.get_doc("Item", arg.get("item_code"))
out = frappe._dict() out = frappe._dict()
@ -213,7 +214,7 @@ class BOM(WebsiteGenerator):
existing_bom_cost = self.total_cost existing_bom_cost = self.total_cost
for d in self.get("items"): for d in self.get("items"):
d.rate = self.get_rm_rate({ rate = self.get_rm_rate({
"item_code": d.item_code, "item_code": d.item_code,
"bom_no": d.bom_no, "bom_no": d.bom_no,
"qty": d.qty, "qty": d.qty,
@ -221,6 +222,8 @@ class BOM(WebsiteGenerator):
"stock_uom": d.stock_uom, "stock_uom": d.stock_uom,
"conversion_factor": d.conversion_factor "conversion_factor": d.conversion_factor
}) })
if rate:
d.rate = rate
d.amount = flt(d.rate) * flt(d.qty) d.amount = flt(d.rate) * flt(d.qty)
if self.docstatus == 1: if self.docstatus == 1:

View File

@ -424,7 +424,7 @@ def insert_item_price(args):
frappe.msgprint(_("Item Price added for {0} in Price List {1}").format(args.item_code, frappe.msgprint(_("Item Price added for {0} in Price List {1}").format(args.item_code,
args.price_list), alert=True) 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 Get name, price_list_rate from Item Price based on conditions
Check if the Derised qty is within the increment of the packing list. 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 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 item_code=%(item_code)s
conditions = "where supplier=%(supplier)s"
conditions += """ and item_code=%(item_code)s
and price_list=%(price_list)s and price_list=%(price_list)s
and ifnull(uom, '') in ('', %(uom)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'): if args.get('min_qty'):
conditions += " and ifnull(min_qty, 0) <= %(min_qty)s" 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"]: for field in ["customer", "supplier", "min_qty"]:
del item_price_args[field] 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"): if not general_price_list_rate and args.get("uom") != args.get("stock_uom"):
item_price_args["args"] = 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: if general_price_list_rate:
item_price_data = general_price_list_rate item_price_data = general_price_list_rate