fix(sales): reject sales returns where every item has zero quantity

validate_returned_items() set items_returned=True whenever a row matched
a valid item from the original document, even if its qty was 0. This let
a Sales Invoice, Delivery Note, or POS Invoice return be submitted with
every line at qty=0 - a no-op document with no stock or financial effect
that still consumed a document number and linked back to the original
transaction.

Scoped to the Sales side only: items_returned now flips to True for
Sales Invoice/Delivery Note/POS Invoice only when qty (or received_qty)
is actually negative, so an all-zero sales return correctly hits the
existing "At least one item should be entered with negative quantity"
check. Purchase Invoice, Purchase Receipt, and Subcontracting Receipt
are unchanged.

(cherry picked from commit a3e9d13da3)

# Conflicts:
#	erpnext/controllers/sales_and_purchase_return.py
This commit is contained in:
R-Jayaraman
2026-07-30 12:11:11 +05:30
committed by Mergify
parent 0f6c6d4df7
commit 48beb2ee23

View File

@@ -158,7 +158,22 @@ def validate_returned_items(doc):
):
frappe.throw(_("Warehouse is mandatory"))
<<<<<<< HEAD
items_returned = True
=======
if doc.doctype in (
"Purchase Invoice",
"Purchase Receipt",
"Subcontracting Receipt",
"Sales Invoice",
"Delivery Note",
"POS Invoice",
):
if flt(d.qty) < 0 or flt(d.get("received_qty")) < 0:
items_returned = True
else:
items_returned = True
>>>>>>> a3e9d13da3 (fix(sales): reject sales returns where every item has zero quantity)
elif d.item_name:
items_returned = True