mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-20 13:39:18 +00:00
Merge pull request #43271 from ljain112/fix-tcs
fix: deduct advances adjusted for threshold check for tcs
This commit is contained in:
@@ -327,7 +327,7 @@ def get_tax_amount(party_type, parties, inv, tax_details, posting_date, pan_no=N
|
|||||||
tax_amount = 0
|
tax_amount = 0
|
||||||
else:
|
else:
|
||||||
# if no TCS has been charged in FY,
|
# if no TCS has been charged in FY,
|
||||||
# then chargeable value is "prev invoices + advances" value which cross the threshold
|
# then chargeable value is "prev invoices + advances - advance_adjusted" value which cross the threshold
|
||||||
tax_amount = get_tcs_amount(parties, inv, tax_details, vouchers, advance_vouchers)
|
tax_amount = get_tcs_amount(parties, inv, tax_details, vouchers, advance_vouchers)
|
||||||
|
|
||||||
if cint(tax_details.round_off_tax_amount):
|
if cint(tax_details.round_off_tax_amount):
|
||||||
@@ -634,9 +634,12 @@ def get_tcs_amount(parties, inv, tax_details, vouchers, adv_vouchers):
|
|||||||
)
|
)
|
||||||
|
|
||||||
cumulative_threshold = tax_details.get("cumulative_threshold", 0)
|
cumulative_threshold = tax_details.get("cumulative_threshold", 0)
|
||||||
|
advance_adjusted = get_advance_adjusted_in_invoice(inv)
|
||||||
|
|
||||||
current_invoice_total = get_invoice_total_without_tcs(inv, tax_details)
|
current_invoice_total = get_invoice_total_without_tcs(inv, tax_details)
|
||||||
total_invoiced_amt = current_invoice_total + invoiced_amt + advance_amt - credit_note_amt
|
total_invoiced_amt = (
|
||||||
|
current_invoice_total + invoiced_amt + advance_amt - credit_note_amt - advance_adjusted
|
||||||
|
)
|
||||||
|
|
||||||
if cumulative_threshold and total_invoiced_amt >= cumulative_threshold:
|
if cumulative_threshold and total_invoiced_amt >= cumulative_threshold:
|
||||||
chargeable_amt = total_invoiced_amt - cumulative_threshold
|
chargeable_amt = total_invoiced_amt - cumulative_threshold
|
||||||
@@ -645,6 +648,14 @@ def get_tcs_amount(parties, inv, tax_details, vouchers, adv_vouchers):
|
|||||||
return tcs_amount
|
return tcs_amount
|
||||||
|
|
||||||
|
|
||||||
|
def get_advance_adjusted_in_invoice(inv):
|
||||||
|
advances_adjusted = 0
|
||||||
|
for row in inv.get("advances", []):
|
||||||
|
advances_adjusted += row.allocated_amount
|
||||||
|
|
||||||
|
return advances_adjusted
|
||||||
|
|
||||||
|
|
||||||
def get_invoice_total_without_tcs(inv, tax_details):
|
def get_invoice_total_without_tcs(inv, tax_details):
|
||||||
tcs_tax_row = [d for d in inv.taxes if d.account_head == tax_details.account_head]
|
tcs_tax_row = [d for d in inv.taxes if d.account_head == tax_details.account_head]
|
||||||
tcs_tax_row_amount = tcs_tax_row[0].base_tax_amount if tcs_tax_row else 0
|
tcs_tax_row_amount = tcs_tax_row[0].base_tax_amount if tcs_tax_row else 0
|
||||||
|
|||||||
@@ -219,6 +219,46 @@ class TestTaxWithholdingCategory(IntegrationTestCase):
|
|||||||
d.reload()
|
d.reload()
|
||||||
d.cancel()
|
d.cancel()
|
||||||
|
|
||||||
|
def test_tcs_on_allocated_advance_payments(self):
|
||||||
|
frappe.db.set_value(
|
||||||
|
"Customer", "Test TCS Customer", "tax_withholding_category", "Cumulative Threshold TCS"
|
||||||
|
)
|
||||||
|
|
||||||
|
vouchers = []
|
||||||
|
|
||||||
|
# create advance payment
|
||||||
|
pe = create_payment_entry(
|
||||||
|
payment_type="Receive", party_type="Customer", party="Test TCS Customer", paid_amount=30000
|
||||||
|
)
|
||||||
|
pe.paid_from = "Debtors - _TC"
|
||||||
|
pe.paid_to = "Cash - _TC"
|
||||||
|
pe.submit()
|
||||||
|
vouchers.append(pe)
|
||||||
|
|
||||||
|
si = create_sales_invoice(customer="Test TCS Customer", rate=50000)
|
||||||
|
advances = si.get_advance_entries()
|
||||||
|
si.append(
|
||||||
|
"advances",
|
||||||
|
{
|
||||||
|
"reference_type": advances[0].reference_type,
|
||||||
|
"reference_name": advances[0].reference_name,
|
||||||
|
"advance_amount": advances[0].amount,
|
||||||
|
"allocated_amount": 30000,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
si.submit()
|
||||||
|
vouchers.append(si)
|
||||||
|
|
||||||
|
# assert tax collection on total invoice ,advance payment adjusted should be excluded.
|
||||||
|
tcs_charged = sum([d.base_tax_amount for d in si.taxes if d.account_head == "TCS - _TC"])
|
||||||
|
# tcs = (inv amt)50000+(adv amt)30000-(adv adj) 30000 - threshold(30000) * rate 10%
|
||||||
|
self.assertEqual(tcs_charged, 2000)
|
||||||
|
|
||||||
|
# cancel invoice and payments to avoid clashing
|
||||||
|
for d in reversed(vouchers):
|
||||||
|
d.reload()
|
||||||
|
d.cancel()
|
||||||
|
|
||||||
def test_tds_calculation_on_net_total(self):
|
def test_tds_calculation_on_net_total(self):
|
||||||
frappe.db.set_value(
|
frappe.db.set_value(
|
||||||
"Supplier", "Test TDS Supplier4", "tax_withholding_category", "Cumulative Threshold TDS"
|
"Supplier", "Test TDS Supplier4", "tax_withholding_category", "Cumulative Threshold TDS"
|
||||||
|
|||||||
Reference in New Issue
Block a user