From afed7884d4360ab1f9e29bb423bbd154f16a7fa7 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Jun 2026 14:23:41 +0530 Subject: [PATCH] test(blanket_order): cover over-ordering aggregated across rows The over-order check sums the same item across multiple order rows. Add a test where one item is split into two Sales Order rows against the same blanket order and together exceed its quantity. --- .../blanket_order/test_blanket_order.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py b/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py index ac7c860dd1b..d6b94ca7bae 100644 --- a/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py +++ b/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py @@ -91,6 +91,29 @@ class TestBlanketOrder(ERPNextTestSuite): frappe.db.set_single_value("Buying Settings", "blanket_order_allowance", 10) po.submit() + def test_blanket_order_over_order_aggregated_across_rows(self): + # the over-order check should sum the same item across multiple order rows + frappe.db.set_single_value("Selling Settings", "blanket_order_allowance", 0) + bo = make_blanket_order(blanket_order_type="Selling", quantity=100) + + frappe.flags.args.doctype = "Sales Order" + so = make_order(bo.name) + so.currency = get_company_currency(so.company) + so.delivery_date = today() + so.items[0].qty = 60 + so.append( + "items", + { + "item_code": so.items[0].item_code, + "qty": 50, # 60 + 50 = 110 > 100 blanket qty + "rate": so.items[0].rate, + "delivery_date": today(), + "against_blanket_order": 1, + "blanket_order": bo.name, + }, + ) + self.assertRaises(frappe.ValidationError, so.submit) + def test_party_item_code(self): item_doc = make_item("_Test Item 1 for Blanket Order") item_code = item_doc.name