diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index 0a9999df9df..ab5c1b3c69d 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -953,7 +953,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"): @@ -1046,7 +1046,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": @@ -1055,7 +1055,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 e8bee897840..e9848c88952 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 01f5df3b684..00c1c08cd5c 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py @@ -152,7 +152,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"]: @@ -179,7 +179,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()