diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index b0ddf29d18f..a6af04f989a 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -221,7 +221,7 @@ class SubcontractingController(StockController): and self._doc_before_save ): for row in self._doc_before_save.get("items"): - item_dict[row.name] = (row.item_code, row.qty) + item_dict[row.name] = (row.item_code, row.qty + (row.get("rejected_qty") or 0)) return item_dict @@ -245,7 +245,10 @@ class SubcontractingController(StockController): for row in self.items: self.__reference_name.append(row.name) - if (row.name not in item_dict) or (row.item_code, row.qty) != item_dict[row.name]: + if (row.name not in item_dict) or ( + row.item_code, + row.qty + (row.get("rejected_qty") or 0), + ) != item_dict[row.name]: self.__changed_name.append(row.name) if item_dict.get(row.name): @@ -934,7 +937,11 @@ class SubcontractingController(StockController): for bom_item in self._get_materials_from_bom( row.item_code, row.bom, row.get("include_exploded_items") ): - qty = flt(bom_item.qty_consumed_per_unit) * flt(row.qty) * row.conversion_factor + qty = ( + flt(bom_item.qty_consumed_per_unit) + * flt(row.qty + (row.get("rejected_qty") or 0)) + * row.conversion_factor + ) bom_item.main_item_code = row.item_code self.__update_reserve_warehouse(bom_item, row) self.__set_alternative_item(bom_item) diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py index 75dc06e16fc..6003978835b 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py @@ -600,7 +600,7 @@ class TestSubcontractingReceipt(IntegrationTestCase): scr.save() # consumed_qty should be (accepted_qty * qty_consumed_per_unit) = (6 * 1) = 6 - self.assertEqual(scr.supplied_items[0].consumed_qty, 6) + self.assertEqual(scr.supplied_items[0].consumed_qty, 10) # Do not transfer materials to the supplier warehouse and check whether system allows to consumed directly from the supplier's warehouse sco = get_subcontracting_order(service_items=service_items)