[report] Item-wise Sales Register [issue] webnotes/erpnext#372
This commit is contained in:
parent
5491332772
commit
ac90542414
@ -1,10 +1,10 @@
|
||||
wn.query_reports["Item-wise Sales Register"] = {
|
||||
wn.query_reports["Item-wise Sales Register"] = wn.query_reports["Sales Register"] = {
|
||||
"filters": [
|
||||
{
|
||||
"fieldname":"from_date",
|
||||
"label": "From Date",
|
||||
"fieldtype": "Date",
|
||||
"default": wn.defaults.get_user_default("year_start_date"),
|
||||
"default": wn.defaults.get_default("year_start_date"),
|
||||
"width": "80"
|
||||
},
|
||||
{
|
||||
@ -13,27 +13,30 @@ wn.query_reports["Item-wise Sales Register"] = {
|
||||
"fieldtype": "Date",
|
||||
"default": get_today()
|
||||
},
|
||||
{
|
||||
"fieldname": "item_code",
|
||||
"label": "Item",
|
||||
"fieldtype": "Link",
|
||||
"options": "Item",
|
||||
},
|
||||
{
|
||||
"fieldname":"account",
|
||||
"label": "Account",
|
||||
"fieldtype": "Link",
|
||||
"options": "Account",
|
||||
"get_query": function() {
|
||||
var company = wn.query_report.filters_by_name.company.get_value();
|
||||
return {
|
||||
"query": "accounts.utils.get_account_list",
|
||||
"filters": {
|
||||
"is_pl_account": "No",
|
||||
"debit_or_credit": "Debit",
|
||||
"company": company,
|
||||
"master_type": "Customer"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"fieldname":"company",
|
||||
"label": "Company",
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": wn.defaults.get_default("company")
|
||||
}
|
||||
]
|
||||
}
|
@ -16,22 +16,30 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import webnotes
|
||||
from webnotes.utils import flt
|
||||
|
||||
def execute(filters=None):
|
||||
if not filters: filters = {}
|
||||
|
||||
columns = get_columns()
|
||||
last_col = len(columns) - 1
|
||||
|
||||
item_list = get_items(filters)
|
||||
item_tax, tax_accounts = get_tax_accounts(item_list, columns)
|
||||
|
||||
data = []
|
||||
for d in item_list:
|
||||
data.append([d.item_code, d.item_name, d.item_group, d.name, d.posting_date,
|
||||
row = [d.item_code, d.item_name, d.item_group, d.parent, d.posting_date,
|
||||
d.customer_name, d.debit_to, d.territory, d.project_name, d.company, d.sales_order,
|
||||
d.delivery_note, d.income_account, d.qty, d.basic_rate, d.amount])
|
||||
d.delivery_note, d.income_account, d.qty, d.basic_rate, d.amount]
|
||||
|
||||
for tax in tax_accounts:
|
||||
row.append(item_tax.get(d.parent, {}).get(d.item_code, {}).get(tax, 0))
|
||||
|
||||
row.append(sum(row[last_col:]))
|
||||
data.append(row)
|
||||
|
||||
return columns, data
|
||||
|
||||
|
||||
def get_columns():
|
||||
return [
|
||||
"Item Code:Link/Item:120", "Item Name::120", "Item Group:Link/Item Group:100",
|
||||
@ -46,21 +54,52 @@ def get_columns():
|
||||
def get_conditions(filters):
|
||||
conditions = ""
|
||||
|
||||
if filters.get("account"): conditions += " and si.debit_to = %(account)s"
|
||||
|
||||
if filters.get("item_code"): conditions += " and si_item.item_code = %(item_code)s"
|
||||
|
||||
if filters.get("from_date"): conditions += " and si.posting_date>=%(from_date)s"
|
||||
if filters.get("to_date"): conditions += " and si.posting_date<=%(to_date)s"
|
||||
for opts in (("company", " and company=%(company)s"),
|
||||
("account", " and si.debit_to = %(account)s"),
|
||||
("item_code", " and si_item.item_code = %(item_code)s"),
|
||||
("from_date", " and si.posting_date>=%(from_date)s"),
|
||||
("to_date", " and si.posting_date<=%(to_date)s")):
|
||||
if filters.get(opts[0]):
|
||||
conditions += opts[1]
|
||||
|
||||
return conditions
|
||||
|
||||
|
||||
def get_items(filters):
|
||||
conditions = get_conditions(filters)
|
||||
return webnotes.conn.sql("""select si.name, si.posting_date, si.debit_to, si.project_name,
|
||||
return webnotes.conn.sql("""select si_item.parent, si.posting_date, si.debit_to, si.project_name,
|
||||
si.customer, si.remarks, si.territory, si.company, si_item.item_code, si_item.item_name,
|
||||
si_item.item_group, si_item.sales_order, si_item.delivery_note, si_item.income_account,
|
||||
si_item.qty, si_item.basic_rate, si_item.amount, si.customer_name
|
||||
from `tabSales Invoice` si, `tabSales Invoice Item` si_item
|
||||
where si.name = si_item.parent and si.docstatus = 1 %s
|
||||
order by si.posting_date desc, si_item.item_code desc""" % conditions, filters, as_dict=1)
|
||||
order by si.posting_date desc, si_item.item_code desc""" % conditions, filters, as_dict=1)
|
||||
|
||||
def get_tax_accounts(item_list, columns):
|
||||
import json
|
||||
item_tax = {}
|
||||
tax_accounts = []
|
||||
|
||||
tax_details = webnotes.conn.sql("""select parent, account_head, item_wise_tax_detail
|
||||
from `tabSales Taxes and Charges` where parenttype = 'Sales Invoice'
|
||||
and docstatus = 1 and ifnull(account_head, '') != ''
|
||||
and parent in (%s)""" % ', '.join(['%s']*len(item_list)), tuple([item.parent for item in item_list]))
|
||||
|
||||
for parent, account_head, item_wise_tax_detail in tax_details:
|
||||
if account_head not in tax_accounts:
|
||||
tax_accounts.append(account_head)
|
||||
|
||||
invoice = item_tax.setdefault(parent, {})
|
||||
if item_wise_tax_detail:
|
||||
try:
|
||||
item_wise_tax_detail = json.loads(item_wise_tax_detail)
|
||||
for item, tax_amount in item_wise_tax_detail.items():
|
||||
invoice.setdefault(item, {})[account_head] = flt(tax_amount)
|
||||
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
tax_accounts.sort()
|
||||
columns += [account_head + ":Currency:80" for account_head in tax_accounts]
|
||||
columns.append("Total:Currency:80")
|
||||
|
||||
return item_tax, tax_accounts
|
Loading…
x
Reference in New Issue
Block a user