From b3bcfd5a6496dabaa64d1394a107cceae4e1192b Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Thu, 19 Feb 2026 12:59:11 +0530 Subject: [PATCH 1/2] fix(manufacturing): update status for work order before calculating planned qty (cherry picked from commit 4d40c84a3131c1a6845f52f2a33ddd22828a2a0a) --- erpnext/manufacturing/doctype/work_order/work_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index a1347a8d901..782362c542b 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -1607,8 +1607,8 @@ def close_work_order(work_order, status): ) ) - work_order.on_close_or_cancel() work_order.update_status(status) + work_order.on_close_or_cancel() frappe.msgprint(_("Work Order has been {0}").format(status)) work_order.notify_update() return work_order.status From 76760c2ee34bbdced00674fb73329199d5fe3700 Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Mon, 23 Feb 2026 02:32:40 +0530 Subject: [PATCH 2/2] test(manufacturing): add test to validate the planned qty (cherry picked from commit cfbdfcf5156c323a4bc2f4f0d465893340869474) --- .../doctype/work_order/test_work_order.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py index f1c9b706ca0..c23db9aa682 100644 --- a/erpnext/manufacturing/doctype/work_order/test_work_order.py +++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py @@ -595,6 +595,33 @@ class TestWorkOrder(FrappeTestCase): work_order1.cancel() work_order.cancel() + def test_planned_qty_updates_after_closing_work_order(self): + item_code = "_Test FG Item" + fg_warehouse = "_Test Warehouse 1 - _TC" + + planned_before = ( + frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": fg_warehouse}, "planned_qty") + or 0 + ) + + wo = make_wo_order_test_record(item=item_code, fg_warehouse=fg_warehouse, qty=10) + + planned_after_submit = ( + frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": fg_warehouse}, "planned_qty") + or 0 + ) + self.assertEqual(planned_after_submit, planned_before + 10) + + close_work_order(wo.name, "Closed") + + self.assertEqual(frappe.db.get_value("Work Order", wo.name, "status"), "Closed") + + planned_after_close = ( + frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": fg_warehouse}, "planned_qty") + or 0 + ) + self.assertEqual(planned_after_close, planned_before) + def test_work_order_with_non_transfer_item(self): frappe.db.set_single_value("Manufacturing Settings", "backflush_raw_materials_based_on", "BOM")