fix: Multiple fixes based on testing on pre-release branch (#20301)
* fix: Multiple fixes based on testing on pre-release branch
* fix: reload hr settings
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 1c9d4c0..1f2ccb0 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -478,15 +478,17 @@
def set_basic_rate_for_finished_goods(self, raw_material_cost, scrap_material_cost):
if self.purpose in ["Manufacture", "Repack"]:
for d in self.get("items"):
- if (d.transfer_qty and (d.bom_no or d.t_warehouse) and raw_material_cost
+ if (d.transfer_qty and (d.bom_no or d.t_warehouse)
and (getattr(self, "pro_doc", frappe._dict()).scrap_warehouse != d.t_warehouse)):
- d.basic_rate = flt((raw_material_cost - scrap_material_cost) / flt(d.transfer_qty), d.precision("basic_rate"))
- d.basic_amount = flt((raw_material_cost - scrap_material_cost), d.precision("basic_amount"))
- if (not d.basic_rate and self.work_order and
- frappe.db.get_single_value("Manufacturing Settings", "material_consumption")):
- d.basic_rate = get_valuation_rate_for_finished_good_entry(self.work_order) or 0
- d.basic_amount = d.basic_rate * d.qty
+ if self.work_order \
+ and frappe.db.get_single_value("Manufacturing Settings", "material_consumption"):
+ bom_items = self.get_bom_raw_materials(d.transfer_qty)
+ raw_material_cost = sum([flt(d.qty)*flt(d.rate) for d in bom_items.values()])
+
+ if raw_material_cost:
+ d.basic_rate = flt((raw_material_cost - scrap_material_cost) / flt(d.transfer_qty), d.precision("basic_rate"))
+ d.basic_amount = flt((raw_material_cost - scrap_material_cost), d.precision("basic_amount"))
def distribute_additional_costs(self):
if self.purpose == "Material Issue":
@@ -1403,30 +1405,6 @@
"additional_costs": get_additional_costs(work_order, fg_qty=pending_qty_to_produce, company=company)
}
-def get_additional_costs(work_order=None, bom_no=None, fg_qty=None, company=None):
- additional_costs = []
- operating_cost_per_unit = get_operating_cost_per_unit(work_order, bom_no)
- expenses_included_in_valuation = frappe.get_cached_value("Company", company, "expenses_included_in_valuation")
-
- if operating_cost_per_unit:
- additional_costs.append({
- "expense_account": expenses_included_in_valuation,
- "description": "Operating Cost as per Work Order / BOM",
- "amount": operating_cost_per_unit * flt(fg_qty)
- })
-
- if work_order and work_order.additional_operating_cost and work_order.qty:
- additional_operating_cost_per_unit = \
- flt(work_order.additional_operating_cost) / flt(work_order.qty)
-
- additional_costs.append({
- "expense_account": expenses_included_in_valuation,
- "description": "Additional Operating Cost",
- "amount": additional_operating_cost_per_unit * flt(fg_qty)
- })
-
- return additional_costs
-
def get_operating_cost_per_unit(work_order=None, bom_no=None):
operating_cost_per_unit = 0
if work_order:
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index b80f99d..2975f93 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -610,7 +610,7 @@
return frappe.db.sql(""" select name, price_list_rate, uom
from `tabItem Price` {conditions}
- order by uom desc, min_qty desc, valid_from desc """.format(conditions=conditions), args)
+ order by valid_from desc, min_qty desc, uom desc """.format(conditions=conditions), args)
def get_price_list_rate_for(args, item_code):
"""
@@ -632,7 +632,8 @@
"customer": args.get('customer'),
"supplier": args.get('supplier'),
"uom": args.get('uom'),
- "min_qty": args.get('qty'),
+ "min_qty": args.get('qty') if args.get('price_list_uom_dependant')\
+ else flt(args.get('qty')) * flt(args.get("conversion_factor", 1)),
"transaction_date": args.get('transaction_date'),
}
@@ -646,8 +647,8 @@
for field in ["customer", "supplier"]:
del item_price_args[field]
- general_price_list_rate = get_item_price(item_price_args, item_code, ignore_party=args.get("ignore_party"))
-
+ general_price_list_rate = get_item_price(item_price_args, item_code,
+ ignore_party=args.get("ignore_party"))
if not general_price_list_rate:
del item_price_args["min_qty"]
general_price_list_rate = get_item_price(item_price_args, item_code, ignore_party=args.get("ignore_party"))