From e897c4d82d5d102036c44f878b4b0e9df2522cd1 Mon Sep 17 00:00:00 2001 From: R-Jayaraman Date: Tue, 4 Aug 2026 19:05:51 +0530 Subject: [PATCH 1/2] fix: validate Blanket Order item quantity is greater than zero --- erpnext/manufacturing/doctype/blanket_order/blanket_order.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.py b/erpnext/manufacturing/doctype/blanket_order/blanket_order.py index 003df602aa1..d7ef3ce2acc 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.py +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.py @@ -120,8 +120,8 @@ class BlanketOrder(Document): def validate_item_qty(self): for d in self.items: - if flt(d.qty) < 0: - frappe.throw(_("Row {0}: Quantity cannot be negative.").format(d.idx)) + if flt(d.qty) <= 0: + frappe.throw(_("Row {0}: Quantity must be greater than zero.").format(d.idx)) @frappe.whitelist() From d80b0f67ccc72692fef1f8bdcb6525935fdd00ee Mon Sep 17 00:00:00 2001 From: R-Jayaraman Date: Tue, 4 Aug 2026 19:06:25 +0530 Subject: [PATCH 2/2] test: add regression test for zero quantity Blanket Order --- .../blanket_order/test_blanket_order.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py b/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py index a2babf8d845..284dffc91b7 100644 --- a/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py +++ b/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py @@ -162,6 +162,26 @@ class TestBlanketOrder(ERPNextTestSuite): bo = make_blanket_order(blanket_order_type="Purchasing", supplier=supplier, item_code=item_code) self.assertEqual(bo.items[0].party_item_code, "SUPP-PART-1") + def test_blanket_order_zero_quantity(self): + bo = frappe.new_doc("Blanket Order") + bo.blanket_order_type = "Selling" + bo.company = "_Test Company" + bo.customer = "_Test Customer" + bo.from_date = today() + bo.to_date = add_months(today(), 12) + + bo.append( + "items", + { + "item_code": "_Test Item", + "qty": 0, + "rate": 100, + }, + ) + + with self.assertRaises(frappe.ValidationError): + bo.insert() + def make_blanket_order(**args): args = frappe._dict(args)