Files
schuetz3-erpnext/erpnext/controllers/tests/test_item_wise_tax_details.py
David Arnold 2e04eeb661 fix: net_amount calculation (#44231)
fix: tax_item_rate calculation
2024-11-23 22:10:33 +00:00

105 lines
2.8 KiB
Python

import json
import frappe
from frappe.tests.utils import FrappeTestCase
from erpnext.controllers.taxes_and_totals import calculate_taxes_and_totals
class TestTaxesAndTotals(FrappeTestCase):
def setUp(self):
self.doc = frappe.get_doc(
{
"doctype": "Sales Invoice",
"customer": "_Test Customer",
"company": "_Test Company",
"currency": "INR",
"conversion_rate": 1,
"items": [
{
"item_code": "_Test Item",
"qty": 1,
"rate": 100,
"income_account": "Sales - _TC",
"expense_account": "Cost of Goods Sold - _TC",
"cost_center": "_Test Cost Center - _TC",
}
],
"taxes": [],
}
)
def test_item_wise_tax_detail(self):
# Test On Net Total
self.doc.append(
"taxes",
{
"charge_type": "On Net Total",
"account_head": "_Test Account VAT - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "VAT",
"rate": 10,
},
)
# Test On Previous Row Amount
self.doc.append(
"taxes",
{
"charge_type": "On Previous Row Amount",
"account_head": "_Test Account Service Tax - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Service Tax",
"rate": 14,
"row_id": 1,
},
)
# Test On Previous Row Total
self.doc.append(
"taxes",
{
"charge_type": "On Previous Row Total",
"account_head": "_Test Account Customs Duty - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Customs Duty",
"rate": 5,
"row_id": 2,
},
)
# Test On Item Quantity
self.doc.append(
"taxes",
{
"charge_type": "On Item Quantity",
"account_head": "_Test Account Shipping - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Shipping",
"rate": 50,
},
)
self.doc.set_missing_item_details()
calculate_taxes_and_totals(self.doc)
expected_values = {
"VAT": {"tax_rate": 10, "tax_amount": 10, "net_amount": 100},
"Service Tax": {"tax_rate": 14, "tax_amount": 1.4, "net_amount": 10},
"Customs Duty": {"tax_rate": 5, "tax_amount": 5.57, "net_amount": 111.4},
"Shipping": {"tax_rate": 50, "tax_amount": 50, "net_amount": 0.0}, # net_amount: here qty
}
for tax in self.doc.taxes:
self.assertIn(tax.description, expected_values)
item_wise_tax_detail = json.loads(tax.item_wise_tax_detail)
tax_detail = item_wise_tax_detail[self.doc.items[0].item_code]
self.assertAlmostEqual(tax_detail.get("tax_rate"), expected_values[tax.description]["tax_rate"])
self.assertAlmostEqual(
tax_detail.get("tax_amount"), expected_values[tax.description]["tax_amount"]
)
self.assertAlmostEqual(
tax_detail.get("net_amount"), expected_values[tax.description]["net_amount"]
)
# Check if net_total is set for each tax
self.assertEqual(tax.net_amount, expected_values[tax.description]["net_amount"])