fix: Lower deduction certificate not getting applied (#35667)
diff --git a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
index d8c0370..c2b7ff0 100644
--- a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
+++ b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
@@ -7,7 +7,7 @@
from frappe.model.document import Document
from frappe.query_builder import Criterion
from frappe.query_builder.functions import Abs, Sum
-from frappe.utils import cint, getdate
+from frappe.utils import cint, flt, getdate
class TaxWithholdingCategory(Document):
@@ -581,7 +581,12 @@
tds_amount = 0
limit_consumed = frappe.db.get_value(
"Purchase Invoice",
- {"supplier": ("in", parties), "apply_tds": 1, "docstatus": 1},
+ {
+ "supplier": ("in", parties),
+ "apply_tds": 1,
+ "docstatus": 1,
+ "posting_date": ("between", (ldc.valid_from, ldc.valid_upto)),
+ },
"sum(tax_withholding_net_total)",
)
@@ -596,10 +601,10 @@
def get_ltds_amount(current_amount, deducted_amount, certificate_limit, rate, tax_details):
- if current_amount < (certificate_limit - deducted_amount):
+ if certificate_limit - flt(deducted_amount) - flt(current_amount) >= 0:
return current_amount * rate / 100
else:
- ltds_amount = certificate_limit - deducted_amount
+ ltds_amount = certificate_limit - flt(deducted_amount)
tds_amount = current_amount - ltds_amount
return ltds_amount * rate / 100 + tds_amount * tax_details.rate / 100
@@ -610,9 +615,9 @@
):
valid = False
- if (
- getdate(valid_from) <= getdate(posting_date) <= getdate(valid_upto)
- ) and certificate_limit > deducted_amount:
+ available_amount = flt(certificate_limit) - flt(deducted_amount) - flt(current_amount)
+
+ if (getdate(valid_from) <= getdate(posting_date) <= getdate(valid_upto)) and available_amount > 0:
valid = True
return valid