From bc6f69ad540b0ea205e808ec87fa7522b3ff5625 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 15 Jul 2025 11:55:03 +0530 Subject: [PATCH] perf: optimize code for subcontracting --- erpnext/controllers/subcontracting_controller.py | 6 +++--- .../subcontracting_order/subcontracting_order.py | 12 ++++++++---- .../subcontracting_receipt/subcontracting_receipt.py | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index a6cb7fa5349..ecdac114d1a 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -959,7 +959,7 @@ class SubcontractingController(StockController): ) sco_doc.update_ordered_qty_for_subcontracting(sco_item_rows) - sco_doc.update_reserved_qty_for_subcontracting() + sco_doc.update_reserved_qty_for_subcontracting(sco_item_rows) def make_sl_entries_for_supplier_warehouse(self, sl_entries): if hasattr(self, "supplied_items"): @@ -1052,7 +1052,7 @@ class SubcontractingController(StockController): return supplied_items_cost - def set_subcontracting_order_status(self): + def set_subcontracting_order_status(self, update_bin=True): if self.doctype == "Subcontracting Order": self.update_status() elif self.doctype == "Subcontracting Receipt": @@ -1061,7 +1061,7 @@ class SubcontractingController(StockController): if self.subcontract_orders: for sco in set(self.subcontract_orders): sco_doc = frappe.get_doc("Subcontracting Order", sco) - sco_doc.update_status() + sco_doc.update_status(update_bin=update_bin) def calculate_additional_costs(self): self.total_additional_costs = sum(flt(item.amount) for item in self.get("additional_costs")) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index afc9673003d..02f3e6c952f 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -236,8 +236,11 @@ class SubcontractingOrder(SubcontractingController): return flt(query[0][0]) if query else 0 - def update_reserved_qty_for_subcontracting(self): + def update_reserved_qty_for_subcontracting(self, sco_item_rows=None): for item in self.supplied_items: + if sco_item_rows and item.reference_name not in sco_item_rows: + continue + if item.rm_item_code: stock_bin = get_bin(item.rm_item_code, item.reserve_warehouse) stock_bin.update_reserved_qty_for_sub_contracting() @@ -299,7 +302,7 @@ class SubcontractingOrder(SubcontractingController): self.set_missing_values() - def update_status(self, status=None, update_modified=True): + def update_status(self, status=None, update_modified=True, update_bin=True): if self.status == "Closed" and self.status != status: check_on_hold_or_closed_status("Purchase Order", self.purchase_order) @@ -329,8 +332,9 @@ class SubcontractingOrder(SubcontractingController): self.db_set("status", status, update_modified=update_modified) self.update_requested_qty() - self.update_ordered_qty_for_subcontracting() - self.update_reserved_qty_for_subcontracting() + if update_bin: + self.update_ordered_qty_for_subcontracting() + self.update_reserved_qty_for_subcontracting() def update_subcontracted_quantity_in_po(self, cancel=False): for service_item in self.service_items: diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py index e2a1730bcaa..81c5adc16ef 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py @@ -153,7 +153,7 @@ class SubcontractingReceipt(SubcontractingController): self.validate_available_qty_for_consumption() self.update_status_updater_args() self.update_prevdoc_status() - self.set_subcontracting_order_status() + self.set_subcontracting_order_status(update_bin=False) self.set_consumed_qty_in_subcontract_order() for table_name in ["items", "supplied_items"]: @@ -181,7 +181,7 @@ class SubcontractingReceipt(SubcontractingController): self.update_status_updater_args() self.update_prevdoc_status() self.set_consumed_qty_in_subcontract_order() - self.set_subcontracting_order_status() + self.set_subcontracting_order_status(update_bin=False) self.update_stock_ledger() self.make_gl_entries_on_cancel() self.repost_future_sle_and_gle()