fix(subcontracting): include item bom in supplied items grouping key

(cherry picked from commit 0d372a62a1)
This commit is contained in:
Sudharsanan11
2026-01-29 15:42:18 +05:30
committed by Mergify
parent 81e65757ee
commit 95c4b8de06

View File

@@ -313,10 +313,10 @@ class SubcontractingController(StockController):
): ):
for row in frappe.get_all( for row in frappe.get_all(
f"{self.subcontract_data.order_doctype} Item", f"{self.subcontract_data.order_doctype} Item",
fields=["item_code", {"SUB": ["qty", "received_qty"], "as": "qty"}, "parent", "name"], fields=["item_code", {"SUB": ["qty", "received_qty"], "as": "qty"}, "parent", "bom"],
filters={"docstatus": 1, "parent": ("in", self.subcontract_orders)}, 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): def __get_transferred_items(self):
se = frappe.qb.DocType("Stock Entry") se = frappe.qb.DocType("Stock Entry")
@@ -923,13 +923,17 @@ class SubcontractingController(StockController):
self.__set_serial_nos(item_row, rm_obj) self.__set_serial_nos(item_row, rm_obj)
def __get_qty_based_on_material_transfer(self, item_row, transfer_item): 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: if self.qty_to_be_received == item_row.qty:
return transfer_item.qty return transfer_item.qty
if self.qty_to_be_received: 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, 0)) 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 transfer_item.item_details.required_qty = transfer_item.qty
if transfer_item.serial_no or frappe.get_cached_value( if transfer_item.serial_no or frappe.get_cached_value(
@@ -978,7 +982,11 @@ class SubcontractingController(StockController):
if self.qty_to_be_received: if self.qty_to_be_received:
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 ] -= row.qty
def __set_rate_for_serial_and_batch_bundle(self): def __set_rate_for_serial_and_batch_bundle(self):