fix: SO ordered qty on PO item removal (#38378)
* fix: update ordered_qty for SO when PO items removed
* refactor: use cached value
---------
Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 595722d..b446512 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -608,6 +608,20 @@
return result
+ def update_ordered_qty_in_so_for_removed_items(self, removed_items):
+ """
+ Updates ordered_qty in linked SO when item rows are removed using Update Items
+ """
+ if not self.is_against_so():
+ return
+ for item in removed_items:
+ prev_ordered_qty = frappe.get_cached_value(
+ "Sales Order Item", item.get("sales_order_item"), "ordered_qty"
+ )
+ frappe.db.set_value(
+ "Sales Order Item", item.get("sales_order_item"), "ordered_qty", prev_ordered_qty - item.qty
+ )
+
def auto_create_subcontracting_order(self):
if self.is_subcontracted and not self.is_old_subcontracting_flow:
if frappe.db.get_single_value("Buying Settings", "auto_create_subcontracting_order"):
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index f551133..414f98c 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -2958,6 +2958,9 @@
d.cancel()
d.delete()
+ if parent.doctype == "Purchase Order":
+ parent.update_ordered_qty_in_so_for_removed_items(deleted_children)
+
# need to update ordered qty in Material Request first
# bin uses Material Request Items to recalculate & update
parent.update_prevdoc_status()