mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-01 11:19:09 +00:00
fix: tax breakup test fix, eway bill hsn fix
This commit is contained in:
@@ -1439,15 +1439,22 @@ class TestSalesInvoice(unittest.TestCase):
|
|||||||
itemised_tax, itemised_taxable_amount = get_itemised_tax_breakup_data(si)
|
itemised_tax, itemised_taxable_amount = get_itemised_tax_breakup_data(si)
|
||||||
|
|
||||||
expected_itemised_tax = {
|
expected_itemised_tax = {
|
||||||
"999800": {
|
"_Test Item": {
|
||||||
"Service Tax": {
|
"Service Tax": {
|
||||||
"tax_rate": 10.0,
|
"tax_rate": 10.0,
|
||||||
"tax_amount": 1500.0
|
"tax_amount": 1000.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"_Test Item 2": {
|
||||||
|
"Service Tax": {
|
||||||
|
"tax_rate": 10.0,
|
||||||
|
"tax_amount": 500.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
expected_itemised_taxable_amount = {
|
expected_itemised_taxable_amount = {
|
||||||
"999800": 15000.0
|
"_Test Item": 10000.0,
|
||||||
|
"_Test Item 2": 5000.0
|
||||||
}
|
}
|
||||||
|
|
||||||
self.assertEqual(itemised_tax, expected_itemised_tax)
|
self.assertEqual(itemised_tax, expected_itemised_tax)
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ def get_itemised_tax_breakup_header(item_doctype, tax_accounts):
|
|||||||
else:
|
else:
|
||||||
return [_("Item"), _("Taxable Amount")] + tax_accounts
|
return [_("Item"), _("Taxable Amount")] + tax_accounts
|
||||||
|
|
||||||
def get_itemised_tax_breakup_data(doc, account_wise=False):
|
def get_itemised_tax_breakup_data(doc, account_wise=False, hsn_wise=False):
|
||||||
itemised_tax = get_itemised_tax(doc.taxes, with_tax_account=account_wise)
|
itemised_tax = get_itemised_tax(doc.taxes, with_tax_account=account_wise)
|
||||||
|
|
||||||
itemised_taxable_amount = get_itemised_taxable_amount(doc.items)
|
itemised_taxable_amount = get_itemised_taxable_amount(doc.items)
|
||||||
@@ -125,22 +125,29 @@ def get_itemised_tax_breakup_data(doc, account_wise=False):
|
|||||||
if not frappe.get_meta(doc.doctype + " Item").has_field('gst_hsn_code'):
|
if not frappe.get_meta(doc.doctype + " Item").has_field('gst_hsn_code'):
|
||||||
return itemised_tax, itemised_taxable_amount
|
return itemised_tax, itemised_taxable_amount
|
||||||
|
|
||||||
|
if hsn_wise:
|
||||||
|
item_hsn_map = frappe._dict()
|
||||||
|
for d in doc.items:
|
||||||
|
item_hsn_map.setdefault(d.item_code or d.item_name, d.get("gst_hsn_code"))
|
||||||
|
|
||||||
hsn_tax = {}
|
hsn_tax = {}
|
||||||
for item, taxes in itemised_tax.items():
|
for item, taxes in itemised_tax.items():
|
||||||
hsn_tax.setdefault(item, frappe._dict())
|
item_or_hsn = item if not hsn_wise else item_hsn_map.get(item)
|
||||||
|
hsn_tax.setdefault(item_or_hsn, frappe._dict())
|
||||||
for tax_desc, tax_detail in taxes.items():
|
for tax_desc, tax_detail in taxes.items():
|
||||||
key = tax_desc
|
key = tax_desc
|
||||||
if account_wise:
|
if account_wise:
|
||||||
key = tax_detail.get('tax_account')
|
key = tax_detail.get('tax_account')
|
||||||
hsn_tax[item].setdefault(key, {"tax_rate": 0, "tax_amount": 0})
|
hsn_tax[item_or_hsn].setdefault(key, {"tax_rate": 0, "tax_amount": 0})
|
||||||
hsn_tax[item][key]["tax_rate"] = tax_detail.get("tax_rate")
|
hsn_tax[item_or_hsn][key]["tax_rate"] = tax_detail.get("tax_rate")
|
||||||
hsn_tax[item][key]["tax_amount"] += tax_detail.get("tax_amount")
|
hsn_tax[item_or_hsn][key]["tax_amount"] += tax_detail.get("tax_amount")
|
||||||
|
|
||||||
# set taxable amount
|
# set taxable amount
|
||||||
hsn_taxable_amount = frappe._dict()
|
hsn_taxable_amount = frappe._dict()
|
||||||
for item in itemised_taxable_amount:
|
for item in itemised_taxable_amount:
|
||||||
hsn_taxable_amount.setdefault(item, 0)
|
item_or_hsn = item if not hsn_wise else item_hsn_map.get(item)
|
||||||
hsn_taxable_amount[item] += itemised_taxable_amount.get(item)
|
hsn_taxable_amount.setdefault(item_or_hsn, 0)
|
||||||
|
hsn_taxable_amount[item_or_hsn] += itemised_taxable_amount.get(item)
|
||||||
|
|
||||||
return hsn_tax, hsn_taxable_amount
|
return hsn_tax, hsn_taxable_amount
|
||||||
|
|
||||||
@@ -434,7 +441,7 @@ def get_ewb_data(dt, dn):
|
|||||||
data.itemList = []
|
data.itemList = []
|
||||||
data.totalValue = doc.total
|
data.totalValue = doc.total
|
||||||
|
|
||||||
data = get_item_list(data, doc)
|
data = get_item_list(data, doc, hsn_wise=True)
|
||||||
|
|
||||||
disable_rounded = frappe.db.get_single_value('Global Defaults', 'disable_rounded_total')
|
disable_rounded = frappe.db.get_single_value('Global Defaults', 'disable_rounded_total')
|
||||||
data.totInvValue = doc.grand_total if disable_rounded else doc.rounded_total
|
data.totInvValue = doc.grand_total if disable_rounded else doc.rounded_total
|
||||||
@@ -545,7 +552,7 @@ def get_address_details(data, doc, company_address, billing_address, dispatch_ad
|
|||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def get_item_list(data, doc):
|
def get_item_list(data, doc, hsn_wise=False):
|
||||||
for attr in ['cgstValue', 'sgstValue', 'igstValue', 'cessValue', 'OthValue']:
|
for attr in ['cgstValue', 'sgstValue', 'igstValue', 'cessValue', 'OthValue']:
|
||||||
data[attr] = 0
|
data[attr] = 0
|
||||||
|
|
||||||
@@ -557,7 +564,7 @@ def get_item_list(data, doc):
|
|||||||
'cess_account': ['cessRate', 'cessValue']
|
'cess_account': ['cessRate', 'cessValue']
|
||||||
}
|
}
|
||||||
item_data_attrs = ['sgstRate', 'cgstRate', 'igstRate', 'cessRate', 'cessNonAdvol']
|
item_data_attrs = ['sgstRate', 'cgstRate', 'igstRate', 'cessRate', 'cessNonAdvol']
|
||||||
hsn_wise_charges, hsn_taxable_amount = get_itemised_tax_breakup_data(doc, account_wise=True)
|
hsn_wise_charges, hsn_taxable_amount = get_itemised_tax_breakup_data(doc, account_wise=True, hsn_wise=hsn_wise)
|
||||||
for hsn_code, taxable_amount in hsn_taxable_amount.items():
|
for hsn_code, taxable_amount in hsn_taxable_amount.items():
|
||||||
item_data = frappe._dict()
|
item_data = frappe._dict()
|
||||||
if not hsn_code:
|
if not hsn_code:
|
||||||
|
|||||||
Reference in New Issue
Block a user