Merge pull request #39787 from GursheenK/duplicates-in-tax-category-bpv15
fix: remove duplicates from tax category map
This commit is contained in:
commit
a5ad318a37
@ -63,16 +63,14 @@ def get_result(
|
|||||||
tax_amount += entry.credit - entry.debit
|
tax_amount += entry.credit - entry.debit
|
||||||
# infer tax withholding category from the account if it's the single account for this category
|
# infer tax withholding category from the account if it's the single account for this category
|
||||||
tax_withholding_category = tds_accounts.get(entry.account)
|
tax_withholding_category = tds_accounts.get(entry.account)
|
||||||
rate = tax_rate_map.get(tax_withholding_category)
|
|
||||||
# or else the consolidated value from the voucher document
|
# or else the consolidated value from the voucher document
|
||||||
if not tax_withholding_category:
|
if not tax_withholding_category:
|
||||||
# or else from the party default
|
|
||||||
tax_withholding_category = tax_category_map.get(name)
|
tax_withholding_category = tax_category_map.get(name)
|
||||||
rate = tax_rate_map.get(tax_withholding_category)
|
# or else from the party default
|
||||||
if not tax_withholding_category:
|
if not tax_withholding_category:
|
||||||
tax_withholding_category = party_map.get(party, {}).get("tax_withholding_category")
|
tax_withholding_category = party_map.get(party, {}).get("tax_withholding_category")
|
||||||
rate = tax_rate_map.get(tax_withholding_category)
|
|
||||||
|
|
||||||
|
rate = tax_rate_map.get(tax_withholding_category)
|
||||||
if net_total_map.get(name):
|
if net_total_map.get(name):
|
||||||
if voucher_type == "Journal Entry":
|
if voucher_type == "Journal Entry":
|
||||||
# back calcalute total amount from rate and tax_amount
|
# back calcalute total amount from rate and tax_amount
|
||||||
@ -295,7 +293,7 @@ def get_tds_docs(filters):
|
|||||||
tds_accounts = {}
|
tds_accounts = {}
|
||||||
for tds_acc in _tds_accounts:
|
for tds_acc in _tds_accounts:
|
||||||
# if it turns out not to be the only tax withholding category, then don't include in the map
|
# if it turns out not to be the only tax withholding category, then don't include in the map
|
||||||
if tds_accounts.get(tds_acc["account"]):
|
if tds_acc["account"] in tds_accounts:
|
||||||
tds_accounts[tds_acc["account"]] = None
|
tds_accounts[tds_acc["account"]] = None
|
||||||
else:
|
else:
|
||||||
tds_accounts[tds_acc["account"]] = tds_acc["parent"]
|
tds_accounts[tds_acc["account"]] = tds_acc["parent"]
|
||||||
@ -408,7 +406,7 @@ def get_doc_info(vouchers, doctype, tax_category_map, net_total_map=None):
|
|||||||
"paid_amount_after_tax",
|
"paid_amount_after_tax",
|
||||||
"base_paid_amount",
|
"base_paid_amount",
|
||||||
],
|
],
|
||||||
"Journal Entry": ["tax_withholding_category", "total_amount"],
|
"Journal Entry": ["total_amount"],
|
||||||
}
|
}
|
||||||
|
|
||||||
entries = frappe.get_all(
|
entries = frappe.get_all(
|
||||||
|
@ -5,7 +5,6 @@ import frappe
|
|||||||
from frappe.tests.utils import FrappeTestCase
|
from frappe.tests.utils import FrappeTestCase
|
||||||
from frappe.utils import today
|
from frappe.utils import today
|
||||||
|
|
||||||
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
|
|
||||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
|
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
|
||||||
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
|
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
|
||||||
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
||||||
@ -17,36 +16,63 @@ from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
|
|||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
|
|
||||||
|
|
||||||
class TestTdsPayableMonthly(AccountsTestMixin, FrappeTestCase):
|
class TestTaxWithholdingDetails(AccountsTestMixin, FrappeTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.create_company()
|
self.create_company()
|
||||||
self.clear_old_entries()
|
self.clear_old_entries()
|
||||||
create_tax_accounts()
|
create_tax_accounts()
|
||||||
create_tcs_category()
|
|
||||||
|
|
||||||
def test_tax_withholding_for_customers(self):
|
def test_tax_withholding_for_customers(self):
|
||||||
|
create_tax_category(cumulative_threshold=300)
|
||||||
|
frappe.db.set_value("Customer", "_Test Customer", "tax_withholding_category", "TCS")
|
||||||
si = create_sales_invoice(rate=1000)
|
si = create_sales_invoice(rate=1000)
|
||||||
pe = create_tcs_payment_entry()
|
pe = create_tcs_payment_entry()
|
||||||
|
jv = create_tcs_journal_entry()
|
||||||
|
|
||||||
filters = frappe._dict(
|
filters = frappe._dict(
|
||||||
company="_Test Company", party_type="Customer", from_date=today(), to_date=today()
|
company="_Test Company", party_type="Customer", from_date=today(), to_date=today()
|
||||||
)
|
)
|
||||||
result = execute(filters)[1]
|
result = execute(filters)[1]
|
||||||
expected_values = [
|
expected_values = [
|
||||||
|
# Check for JV totals using back calculation logic
|
||||||
|
[jv.name, "TCS", 0.075, -10000.0, -7.5, -10000.0],
|
||||||
[pe.name, "TCS", 0.075, 2550, 0.53, 2550.53],
|
[pe.name, "TCS", 0.075, 2550, 0.53, 2550.53],
|
||||||
[si.name, "TCS", 0.075, 1000, 0.52, 1000.52],
|
[si.name, "TCS", 0.075, 1000, 0.52, 1000.52],
|
||||||
]
|
]
|
||||||
self.check_expected_values(result, expected_values)
|
self.check_expected_values(result, expected_values)
|
||||||
|
|
||||||
|
def test_single_account_for_multiple_categories(self):
|
||||||
|
create_tax_category("TDS - 1", rate=10, account="TDS - _TC")
|
||||||
|
inv_1 = make_purchase_invoice(rate=1000, do_not_submit=True)
|
||||||
|
inv_1.tax_withholding_category = "TDS - 1"
|
||||||
|
inv_1.submit()
|
||||||
|
|
||||||
|
create_tax_category("TDS - 2", rate=20, account="TDS - _TC")
|
||||||
|
inv_2 = make_purchase_invoice(rate=1000, do_not_submit=True)
|
||||||
|
inv_2.tax_withholding_category = "TDS - 2"
|
||||||
|
inv_2.submit()
|
||||||
|
result = execute(
|
||||||
|
frappe._dict(company="_Test Company", party_type="Supplier", from_date=today(), to_date=today())
|
||||||
|
)[1]
|
||||||
|
expected_values = [
|
||||||
|
[inv_1.name, "TDS - 1", 10, 5000, 500, 5500],
|
||||||
|
[inv_2.name, "TDS - 2", 20, 5000, 1000, 6000],
|
||||||
|
]
|
||||||
|
self.check_expected_values(result, expected_values)
|
||||||
|
|
||||||
def check_expected_values(self, result, expected_values):
|
def check_expected_values(self, result, expected_values):
|
||||||
for i in range(len(result)):
|
for i in range(len(result)):
|
||||||
voucher = frappe._dict(result[i])
|
voucher = frappe._dict(result[i])
|
||||||
voucher_expected_values = expected_values[i]
|
voucher_expected_values = expected_values[i]
|
||||||
self.assertEqual(voucher.ref_no, voucher_expected_values[0])
|
voucher_actual_values = (
|
||||||
self.assertEqual(voucher.section_code, voucher_expected_values[1])
|
voucher.ref_no,
|
||||||
self.assertEqual(voucher.rate, voucher_expected_values[2])
|
voucher.section_code,
|
||||||
self.assertEqual(voucher.base_total, voucher_expected_values[3])
|
voucher.rate,
|
||||||
self.assertAlmostEqual(voucher.tax_amount, voucher_expected_values[4])
|
voucher.base_total,
|
||||||
self.assertAlmostEqual(voucher.grand_total, voucher_expected_values[5])
|
voucher.tax_amount,
|
||||||
|
voucher.grand_total,
|
||||||
|
)
|
||||||
|
self.assertSequenceEqual(voucher_actual_values, voucher_expected_values)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.clear_old_entries()
|
self.clear_old_entries()
|
||||||
@ -67,24 +93,20 @@ def create_tax_accounts():
|
|||||||
).insert(ignore_if_duplicate=True)
|
).insert(ignore_if_duplicate=True)
|
||||||
|
|
||||||
|
|
||||||
def create_tcs_category():
|
def create_tax_category(category="TCS", rate=0.075, account="TCS - _TC", cumulative_threshold=0):
|
||||||
fiscal_year = get_fiscal_year(today(), company="_Test Company")
|
fiscal_year = get_fiscal_year(today(), company="_Test Company")
|
||||||
from_date = fiscal_year[1]
|
from_date = fiscal_year[1]
|
||||||
to_date = fiscal_year[2]
|
to_date = fiscal_year[2]
|
||||||
|
|
||||||
tax_category = create_tax_withholding_category(
|
create_tax_withholding_category(
|
||||||
category_name="TCS",
|
category_name=category,
|
||||||
rate=0.075,
|
rate=rate,
|
||||||
from_date=from_date,
|
from_date=from_date,
|
||||||
to_date=to_date,
|
to_date=to_date,
|
||||||
account="TCS - _TC",
|
account=account,
|
||||||
cumulative_threshold=300,
|
cumulative_threshold=cumulative_threshold,
|
||||||
)
|
)
|
||||||
|
|
||||||
customer = frappe.get_doc("Customer", "_Test Customer")
|
|
||||||
customer.tax_withholding_category = "TCS"
|
|
||||||
customer.save()
|
|
||||||
|
|
||||||
|
|
||||||
def create_tcs_payment_entry():
|
def create_tcs_payment_entry():
|
||||||
payment_entry = create_payment_entry(
|
payment_entry = create_payment_entry(
|
||||||
@ -109,3 +131,32 @@ def create_tcs_payment_entry():
|
|||||||
)
|
)
|
||||||
payment_entry.submit()
|
payment_entry.submit()
|
||||||
return payment_entry
|
return payment_entry
|
||||||
|
|
||||||
|
|
||||||
|
def create_tcs_journal_entry():
|
||||||
|
jv = frappe.new_doc("Journal Entry")
|
||||||
|
jv.posting_date = today()
|
||||||
|
jv.company = "_Test Company"
|
||||||
|
jv.set(
|
||||||
|
"accounts",
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"account": "Debtors - _TC",
|
||||||
|
"party_type": "Customer",
|
||||||
|
"party": "_Test Customer",
|
||||||
|
"credit_in_account_currency": 10000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"account": "Debtors - _TC",
|
||||||
|
"party_type": "Customer",
|
||||||
|
"party": "_Test Customer",
|
||||||
|
"debit_in_account_currency": 9992.5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"account": "TCS - _TC",
|
||||||
|
"debit_in_account_currency": 7.5,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
jv.insert()
|
||||||
|
return jv.submit()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user