Merge pull request #40461 from ruthra-kumar/prevent_zero_qty_cr_note_on_stock_items
refactor: disallow '0' qty return invoices with stock effect
This commit is contained in:
@@ -1588,6 +1588,12 @@ class TestSalesInvoice(FrappeTestCase):
|
|||||||
self.assertEqual(frappe.db.get_value("Sales Invoice", si1.name, "outstanding_amount"), -1000)
|
self.assertEqual(frappe.db.get_value("Sales Invoice", si1.name, "outstanding_amount"), -1000)
|
||||||
self.assertEqual(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"), 2500)
|
self.assertEqual(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"), 2500)
|
||||||
|
|
||||||
|
def test_zero_qty_return_invoice_with_stock_effect(self):
|
||||||
|
cr_note = create_sales_invoice(qty=-1, rate=300, is_return=1, do_not_submit=True)
|
||||||
|
cr_note.update_stock = True
|
||||||
|
cr_note.items[0].qty = 0
|
||||||
|
self.assertRaises(frappe.ValidationError, cr_note.save)
|
||||||
|
|
||||||
def test_return_invoice_with_account_mismatch(self):
|
def test_return_invoice_with_account_mismatch(self):
|
||||||
debtors2 = create_account(
|
debtors2 = create_account(
|
||||||
parent_account="Accounts Receivable - _TC",
|
parent_account="Accounts Receivable - _TC",
|
||||||
|
|||||||
@@ -169,6 +169,13 @@ class AccountsController(TransactionBase):
|
|||||||
if not self.get("is_return") and not self.get("is_debit_note"):
|
if not self.get("is_return") and not self.get("is_debit_note"):
|
||||||
self.validate_qty_is_not_zero()
|
self.validate_qty_is_not_zero()
|
||||||
|
|
||||||
|
if (
|
||||||
|
self.doctype in ["Sales Invoice", "Purchase Invoice"]
|
||||||
|
and self.get("is_return")
|
||||||
|
and self.get("update_stock")
|
||||||
|
):
|
||||||
|
self.validate_zero_qty_for_return_invoices_with_stock()
|
||||||
|
|
||||||
if self.get("_action") and self._action != "update_after_submit":
|
if self.get("_action") and self._action != "update_after_submit":
|
||||||
self.set_missing_values(for_validate=True)
|
self.set_missing_values(for_validate=True)
|
||||||
|
|
||||||
@@ -1045,6 +1052,18 @@ class AccountsController(TransactionBase):
|
|||||||
else:
|
else:
|
||||||
return flt(args.get(field, 0) / self.get("conversion_rate", 1))
|
return flt(args.get(field, 0) / self.get("conversion_rate", 1))
|
||||||
|
|
||||||
|
def validate_zero_qty_for_return_invoices_with_stock(self):
|
||||||
|
rows = []
|
||||||
|
for item in self.items:
|
||||||
|
if not flt(item.qty):
|
||||||
|
rows.append(item)
|
||||||
|
if rows:
|
||||||
|
frappe.throw(
|
||||||
|
_(
|
||||||
|
"For Return Invoices with Stock effect, '0' qty Items are not allowed. Following rows are affected: {0}"
|
||||||
|
).format(frappe.bold(comma_and(["#" + str(x.idx) for x in rows])))
|
||||||
|
)
|
||||||
|
|
||||||
def validate_qty_is_not_zero(self):
|
def validate_qty_is_not_zero(self):
|
||||||
for item in self.items:
|
for item in self.items:
|
||||||
if self.doctype == "Purchase Receipt" and item.rejected_qty:
|
if self.doctype == "Purchase Receipt" and item.rejected_qty:
|
||||||
|
|||||||
Reference in New Issue
Block a user