From 8156d89903f7f30accca6bc10e1305a0e2f60be0 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 10 Jun 2025 17:36:47 +0530 Subject: [PATCH 1/2] fix: incorrect warehouse in MR (cherry picked from commit 2b9ca79291400205cedb338208e1f7348d051b43) # Conflicts: # erpnext/manufacturing/doctype/production_plan/production_plan.py --- .../production_plan/production_plan.py | 27 +++++++++++++++++++ .../doctype/sales_order/sales_order.py | 7 ++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index c6b6b7e1d9d..a74fb51d33f 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -1251,6 +1251,7 @@ def get_subitems( item_default.default_warehouse, item.purchase_uom, item_uom.conversion_factor, + bom.item.as_("main_bom_item"), ) .where( (bom.name == bom_no) @@ -1342,6 +1343,7 @@ def get_material_request_items( get_conversion_factor(row.item_code, item_details.purchase_uom).get("conversion_factor") or 1.0 ) +<<<<<<< HEAD if required_qty > 0: return { "item_code": row.item_code, @@ -1365,6 +1367,31 @@ def get_material_request_items( "description": row.get("description"), "uom": row.get("purchase_uom") or row.get("stock_uom"), } +======= + return { + "item_code": row.item_code, + "item_name": row.item_name, + "quantity": required_qty / conversion_factor, + "conversion_factor": conversion_factor, + "required_bom_qty": total_qty, + "stock_uom": row.get("stock_uom"), + "warehouse": warehouse + or row.get("source_warehouse") + or row.get("default_warehouse") + or item_group_defaults.get("default_warehouse"), + "safety_stock": row.safety_stock, + "actual_qty": bin_dict.get("actual_qty", 0), + "projected_qty": bin_dict.get("projected_qty", 0), + "ordered_qty": bin_dict.get("ordered_qty", 0), + "reserved_qty_for_production": bin_dict.get("reserved_qty_for_production", 0), + "min_order_qty": row["min_order_qty"], + "material_request_type": row.get("default_material_request_type"), + "sales_order": sales_order, + "description": row.get("description"), + "uom": row.get("purchase_uom") or row.get("stock_uom"), + "main_bom_item": row.get("main_bom_item"), + } +>>>>>>> 2b9ca79291 (fix: incorrect warehouse in MR) def get_sales_orders(self): diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index c7597c80fc6..66ffbba9e63 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1630,6 +1630,11 @@ def make_raw_material_request(items, company, sales_order, project=None): items.update({"company": company, "sales_order": sales_order}) + item_wh = {} + for item in items.get("items"): + if item.get("warehouse"): + item_wh[item.get("item_code")] = item.get("warehouse") + raw_materials = get_items_for_material_requests(items) if not raw_materials: frappe.msgprint(_("Material Request not created, as quantity for Raw Materials already available.")) @@ -1654,7 +1659,7 @@ def make_raw_material_request(items, company, sales_order, project=None): "item_code": item.get("item_code"), "qty": item.get("quantity"), "schedule_date": schedule_date, - "warehouse": item.get("warehouse"), + "warehouse": item_wh.get(item.get("main_bom_item")) or item.get("warehouse"), "sales_order": sales_order, "project": project, }, From 60de0474a116ab4276a625f44f60a5539ea11036 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 10 Jun 2025 18:19:27 +0530 Subject: [PATCH 2/2] chore: fix conflicts --- .../production_plan/production_plan.py | 27 +------------------ 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index a74fb51d33f..e4ed92e7d3d 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -1343,7 +1343,6 @@ def get_material_request_items( get_conversion_factor(row.item_code, item_details.purchase_uom).get("conversion_factor") or 1.0 ) -<<<<<<< HEAD if required_qty > 0: return { "item_code": row.item_code, @@ -1366,32 +1365,8 @@ def get_material_request_items( "sales_order": sales_order, "description": row.get("description"), "uom": row.get("purchase_uom") or row.get("stock_uom"), + "main_bom_item": row.get("main_bom_item"), } -======= - return { - "item_code": row.item_code, - "item_name": row.item_name, - "quantity": required_qty / conversion_factor, - "conversion_factor": conversion_factor, - "required_bom_qty": total_qty, - "stock_uom": row.get("stock_uom"), - "warehouse": warehouse - or row.get("source_warehouse") - or row.get("default_warehouse") - or item_group_defaults.get("default_warehouse"), - "safety_stock": row.safety_stock, - "actual_qty": bin_dict.get("actual_qty", 0), - "projected_qty": bin_dict.get("projected_qty", 0), - "ordered_qty": bin_dict.get("ordered_qty", 0), - "reserved_qty_for_production": bin_dict.get("reserved_qty_for_production", 0), - "min_order_qty": row["min_order_qty"], - "material_request_type": row.get("default_material_request_type"), - "sales_order": sales_order, - "description": row.get("description"), - "uom": row.get("purchase_uom") or row.get("stock_uom"), - "main_bom_item": row.get("main_bom_item"), - } ->>>>>>> 2b9ca79291 (fix: incorrect warehouse in MR) def get_sales_orders(self):