From 17e415d03aac4522a03c906e96accbe31e277d90 Mon Sep 17 00:00:00 2001 From: venkat102 Date: Mon, 29 Sep 2025 17:23:38 +0530 Subject: [PATCH 1/3] fix: update subcontracted_quantity with set_value (cherry picked from commit ea63bfc9afc18ae7bcd20548be745d55b6213502) --- .../subcontracting_order.py | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index e9848c88952..4f41a5ea4d2 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -338,13 +338,22 @@ class SubcontractingOrder(SubcontractingController): def update_subcontracted_quantity_in_po(self, cancel=False): for service_item in self.service_items: - doc = frappe.get_doc("Purchase Order Item", service_item.purchase_order_item) - doc.subcontracted_quantity = ( - (doc.subcontracted_quantity + service_item.qty) - if not cancel - else (doc.subcontracted_quantity - service_item.qty) + subcontracted_quantity = frappe.db.get_value( + "Purchase Order Item", service_item.purchase_order_item, "subcontracted_quantity" + ) + + subcontracted_quantity = ( + (subcontracted_quantity + service_item.qty) + if not cancel + else (subcontracted_quantity - service_item.qty) + ) + + frappe.db.set_value( + "Purchase Order Item", + service_item.purchase_order_item, + "subcontracted_quantity", + subcontracted_quantity, ) - doc.save() @frappe.whitelist() From f706811757792b3d445bcadf2551509dc5c5e8e7 Mon Sep 17 00:00:00 2001 From: venkat102 Date: Mon, 29 Sep 2025 17:25:06 +0530 Subject: [PATCH 2/3] fix: use get_value instead of get_doc (cherry picked from commit 89a603f20c3465ae6e84b96696c8fd7db3e13739) --- .../subcontracting_order/subcontracting_order.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index 4f41a5ea4d2..7b039ee16a9 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -252,14 +252,18 @@ class SubcontractingOrder(SubcontractingController): if si.fg_item: item = frappe.get_doc("Item", si.fg_item) - po_item = frappe.get_doc("Purchase Order Item", si.purchase_order_item) - available_qty = po_item.qty - po_item.subcontracted_quantity + qty, subcontracted_quantity, fg_item_qty = frappe.db.get_value( + "Purchase Order Item", + si.purchase_order_item, + ["qty", "subcontracted_quantity", "fg_item_qty"], + ) + available_qty = qty - subcontracted_quantity if available_qty == 0: continue si.qty = available_qty - conversion_factor = po_item.qty / po_item.fg_item_qty + conversion_factor = qty / fg_item_qty si.fg_item_qty = flt( available_qty / conversion_factor, frappe.get_precision("Purchase Order Item", "qty") ) From 3975627b33f6ef68cc3a56be0b2b304ddc7e95bb Mon Sep 17 00:00:00 2001 From: venkat102 Date: Mon, 29 Sep 2025 18:09:02 +0530 Subject: [PATCH 3/3] fix: convert with flt (cherry picked from commit 81614939aba5097e4523cec88447159c5e7c9695) --- .../subcontracting_order/subcontracting_order.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index 7b039ee16a9..2f9a04e7e93 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -257,13 +257,13 @@ class SubcontractingOrder(SubcontractingController): si.purchase_order_item, ["qty", "subcontracted_quantity", "fg_item_qty"], ) - available_qty = qty - subcontracted_quantity + available_qty = flt(qty) - flt(subcontracted_quantity) if available_qty == 0: continue si.qty = available_qty - conversion_factor = qty / fg_item_qty + conversion_factor = flt(qty) / flt(fg_item_qty) si.fg_item_qty = flt( available_qty / conversion_factor, frappe.get_precision("Purchase Order Item", "qty") ) @@ -342,8 +342,10 @@ class SubcontractingOrder(SubcontractingController): def update_subcontracted_quantity_in_po(self, cancel=False): for service_item in self.service_items: - subcontracted_quantity = frappe.db.get_value( - "Purchase Order Item", service_item.purchase_order_item, "subcontracted_quantity" + subcontracted_quantity = flt( + frappe.db.get_value( + "Purchase Order Item", service_item.purchase_order_item, "subcontracted_quantity" + ) ) subcontracted_quantity = (