fix: include return invoice discount in discount validation

(cherry picked from commit fab1ef5d76)

# Conflicts:
#	erpnext/controllers/taxes_and_totals.py
This commit is contained in:
ravibharathi656
2025-12-05 15:40:34 +05:30
committed by Mergify
parent 6c53d31f2d
commit bf1c606610

View File

@@ -6,7 +6,12 @@ import json
import frappe
from frappe import _, scrub
<<<<<<< HEAD
from frappe.model.document import Document
=======
from frappe.model.document import Document, bulk_insert
from frappe.query_builder import functions
>>>>>>> fab1ef5d76 (fix: include return invoice discount in discount validation)
from frappe.utils import cint, flt, round_based_on_smallest_currency_fraction
from frappe.utils.deprecations import deprecated
@@ -685,6 +690,22 @@ class calculate_taxes_and_totals:
discount_amount = self.doc.discount_amount or 0
grand_total = self.doc.grand_total
if self.doc.get("is_return") and self.doc.get("return_against"):
doctype = frappe.qb.DocType(self.doc.doctype)
result = (
frappe.qb.from_(doctype)
.select(functions.Sum(doctype.discount_amount).as_("total_return_discount"))
.where(
(doctype.return_against == self.doc.return_against)
& (doctype.is_return == 1)
& (doctype.docstatus == 1)
)
).run(as_dict=True)
total_return_discount = abs(result[0].get("total_return_discount") or 0)
discount_amount += total_return_discount
# validate that discount amount cannot exceed the total before discount
if (
(grand_total >= 0 and discount_amount > grand_total)