Merge pull request #23076 from deepeshgarg007/hsn_wise_outward_v13
fix: Tax amounts in HSN Wise Outward summary
This commit is contained in:
commit
1fb1c08872
@ -7,6 +7,8 @@ from frappe import _
|
|||||||
from frappe.utils import flt
|
from frappe.utils import flt
|
||||||
from frappe.model.meta import get_field_precision
|
from frappe.model.meta import get_field_precision
|
||||||
from frappe.utils.xlsxutils import handle_html
|
from frappe.utils.xlsxutils import handle_html
|
||||||
|
from six import iteritems
|
||||||
|
import json
|
||||||
|
|
||||||
def execute(filters=None):
|
def execute(filters=None):
|
||||||
return _execute(filters)
|
return _execute(filters)
|
||||||
@ -21,21 +23,24 @@ def _execute(filters=None):
|
|||||||
itemised_tax, tax_columns = get_tax_accounts(item_list, columns, company_currency)
|
itemised_tax, tax_columns = get_tax_accounts(item_list, columns, company_currency)
|
||||||
|
|
||||||
data = []
|
data = []
|
||||||
|
added_item = []
|
||||||
for d in item_list:
|
for d in item_list:
|
||||||
|
if (d.parent, d.item_code) not in added_item:
|
||||||
row = [d.gst_hsn_code, d.description, d.stock_uom, d.stock_qty]
|
row = [d.gst_hsn_code, d.description, d.stock_uom, d.stock_qty]
|
||||||
total_tax = 0
|
total_tax = 0
|
||||||
for tax in tax_columns:
|
for tax in tax_columns:
|
||||||
item_tax = itemised_tax.get(d.name, {}).get(tax, {})
|
item_tax = itemised_tax.get((d.parent, d.item_code), {}).get(tax, {})
|
||||||
total_tax += flt(item_tax.get("tax_amount"))
|
total_tax += flt(item_tax.get("tax_amount", 0))
|
||||||
|
|
||||||
row += [d.base_net_amount + total_tax]
|
row += [d.base_net_amount + total_tax]
|
||||||
row += [d.base_net_amount]
|
row += [d.base_net_amount]
|
||||||
|
|
||||||
for tax in tax_columns:
|
for tax in tax_columns:
|
||||||
item_tax = itemised_tax.get(d.name, {}).get(tax, {})
|
item_tax = itemised_tax.get((d.parent, d.item_code), {}).get(tax, {})
|
||||||
row += [item_tax.get("tax_amount", 0)]
|
row += [item_tax.get("tax_amount", 0)]
|
||||||
|
|
||||||
data.append(row)
|
data.append(row)
|
||||||
|
added_item.append((d.parent, d.item_code))
|
||||||
if data:
|
if data:
|
||||||
data = get_merged_data(columns, data) # merge same hsn code data
|
data = get_merged_data(columns, data) # merge same hsn code data
|
||||||
return columns, data
|
return columns, data
|
||||||
@ -103,7 +108,7 @@ def get_items(filters):
|
|||||||
match_conditions = " and {0} ".format(match_conditions)
|
match_conditions = " and {0} ".format(match_conditions)
|
||||||
|
|
||||||
|
|
||||||
return frappe.db.sql("""
|
items = frappe.db.sql("""
|
||||||
select
|
select
|
||||||
`tabSales Invoice Item`.name, `tabSales Invoice Item`.base_price_list_rate,
|
`tabSales Invoice Item`.name, `tabSales Invoice Item`.base_price_list_rate,
|
||||||
`tabSales Invoice Item`.gst_hsn_code, `tabSales Invoice Item`.stock_qty,
|
`tabSales Invoice Item`.gst_hsn_code, `tabSales Invoice Item`.stock_qty,
|
||||||
@ -118,10 +123,9 @@ def get_items(filters):
|
|||||||
|
|
||||||
""" % (conditions, match_conditions), filters, as_dict=1)
|
""" % (conditions, match_conditions), filters, as_dict=1)
|
||||||
|
|
||||||
|
return items
|
||||||
|
|
||||||
def get_tax_accounts(item_list, columns, company_currency,
|
def get_tax_accounts(item_list, columns, company_currency, doctype="Sales Invoice", tax_doctype="Sales Taxes and Charges"):
|
||||||
doctype="Sales Invoice", tax_doctype="Sales Taxes and Charges"):
|
|
||||||
import json
|
|
||||||
item_row_map = {}
|
item_row_map = {}
|
||||||
tax_columns = []
|
tax_columns = []
|
||||||
invoice_item_row = {}
|
invoice_item_row = {}
|
||||||
@ -171,7 +175,7 @@ def get_tax_accounts(item_list, columns, company_currency,
|
|||||||
for d in item_row_map.get(parent, {}).get(item_code, []):
|
for d in item_row_map.get(parent, {}).get(item_code, []):
|
||||||
item_tax_amount = tax_amount
|
item_tax_amount = tax_amount
|
||||||
if item_tax_amount:
|
if item_tax_amount:
|
||||||
itemised_tax.setdefault(d.name, {})[description] = frappe._dict({
|
itemised_tax.setdefault((parent, item_code), {})[description] = frappe._dict({
|
||||||
"tax_amount": flt(item_tax_amount, tax_amount_precision)
|
"tax_amount": flt(item_tax_amount, tax_amount_precision)
|
||||||
})
|
})
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@ -179,42 +183,32 @@ def get_tax_accounts(item_list, columns, company_currency,
|
|||||||
|
|
||||||
tax_columns.sort()
|
tax_columns.sort()
|
||||||
for desc in tax_columns:
|
for desc in tax_columns:
|
||||||
columns.append(desc + " Amount:Currency/currency:160")
|
columns.append({
|
||||||
|
"label": desc,
|
||||||
|
"fieldname": frappe.scrub(desc),
|
||||||
|
"fieldtype": "Float",
|
||||||
|
"width": 110
|
||||||
|
})
|
||||||
|
|
||||||
# columns += ["Total Amount:Currency/currency:110"]
|
|
||||||
return itemised_tax, tax_columns
|
return itemised_tax, tax_columns
|
||||||
|
|
||||||
def get_merged_data(columns, data):
|
def get_merged_data(columns, data):
|
||||||
merged_hsn_dict = {} # to group same hsn under one key and perform row addition
|
merged_hsn_dict = {} # to group same hsn under one key and perform row addition
|
||||||
add_column_index = [] # store index of columns that needs to be added
|
result = []
|
||||||
tax_col = len(get_columns())
|
|
||||||
fields_to_merge = ["stock_qty", "total_amount", "taxable_amount"] # columns for which index needs to be found
|
|
||||||
|
|
||||||
for i,d in enumerate(columns):
|
|
||||||
# check if fieldname in to_merge list and ignore tax-columns
|
|
||||||
if i < tax_col and d["fieldname"] in fields_to_merge:
|
|
||||||
add_column_index.append(i)
|
|
||||||
|
|
||||||
for row in data:
|
for row in data:
|
||||||
if row[0] in merged_hsn_dict:
|
merged_hsn_dict.setdefault(row[0], {})
|
||||||
to_add_row = merged_hsn_dict.get(row[0])
|
for i, d in enumerate(columns):
|
||||||
|
if d['fieldtype'] not in ('Int', 'Float', 'Currency'):
|
||||||
# add columns from the add_column_index table
|
merged_hsn_dict[row[0]][d['fieldname']] = row[i]
|
||||||
for k in add_column_index:
|
|
||||||
to_add_row[k] += row[k]
|
|
||||||
|
|
||||||
# add tax columns
|
|
||||||
for k in range(len(columns)):
|
|
||||||
if tax_col <= k < len(columns):
|
|
||||||
to_add_row[k] += row[k]
|
|
||||||
|
|
||||||
# update hsn dict with the newly added data
|
|
||||||
merged_hsn_dict[row[0]] = to_add_row
|
|
||||||
else:
|
else:
|
||||||
merged_hsn_dict[row[0]] = row
|
if merged_hsn_dict.get(row[0], {}).get(d['fieldname'], ''):
|
||||||
|
merged_hsn_dict[row[0]][d['fieldname']] += row[i]
|
||||||
|
else:
|
||||||
|
merged_hsn_dict[row[0]][d['fieldname']] = row[i]
|
||||||
|
|
||||||
# extract data rows to be displayed in report
|
for key, value in iteritems(merged_hsn_dict):
|
||||||
data = [merged_hsn_dict[d] for d in merged_hsn_dict]
|
result.append(value)
|
||||||
|
|
||||||
return data
|
return result
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user