From 3b12d60877e5a26fa75b78c421dba6b3773f3856 Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Thu, 29 Jan 2026 15:42:18 +0530 Subject: [PATCH] fix(subcontracting): include item bom in supplied items grouping key (cherry picked from commit 0d372a62a1b9c2f0233f3c55a02725cfca970433) # Conflicts: # erpnext/controllers/subcontracting_controller.py --- .../controllers/subcontracting_controller.py | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index 07d4fd31387..6d7d5d5d579 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -254,10 +254,14 @@ class SubcontractingController(StockController): ): for row in frappe.get_all( f"{self.subcontract_data.order_doctype} Item", +<<<<<<< HEAD fields=["item_code", "(qty - received_qty) as qty", "parent", "name"], +======= + fields=["item_code", {"SUB": ["qty", "received_qty"], "as": "qty"}, "parent", "bom"], +>>>>>>> 0d372a62a1 (fix(subcontracting): include item bom in supplied items grouping key) filters={"docstatus": 1, "parent": ("in", self.subcontract_orders)}, ): - self.qty_to_be_received[(row.item_code, row.parent)] += row.qty + self.qty_to_be_received[(row.item_code, row.parent, row.bom)] += row.qty def __get_transferred_items(self): se = frappe.qb.DocType("Stock Entry") @@ -829,13 +833,17 @@ class SubcontractingController(StockController): self.__set_serial_nos(item_row, rm_obj) def __get_qty_based_on_material_transfer(self, item_row, transfer_item): - key = (item_row.item_code, item_row.get(self.subcontract_data.order_field)) + key = ( + item_row.item_code, + item_row.get(self.subcontract_data.order_field), + item_row.get("bom"), + ) if self.qty_to_be_received == item_row.qty: return transfer_item.qty - if self.qty_to_be_received: - qty = (flt(item_row.qty) * flt(transfer_item.qty)) / flt(self.qty_to_be_received.get(key, 0)) + if self.qty_to_be_received.get(key): + qty = (flt(item_row.qty) * flt(transfer_item.qty)) / flt(self.qty_to_be_received.get(key)) transfer_item.item_details.required_qty = transfer_item.qty if transfer_item.serial_no or frappe.get_cached_value( @@ -880,7 +888,11 @@ class SubcontractingController(StockController): if self.qty_to_be_received: self.qty_to_be_received[ - (row.item_code, row.get(self.subcontract_data.order_field)) + ( + row.item_code, + row.get(self.subcontract_data.order_field), + row.get("bom"), + ) ] -= row.qty def __set_rate_for_serial_and_batch_bundle(self):