fix: Grand total query fix

This commit is contained in:
deepeshgarg007
2020-01-11 16:37:46 +05:30
parent 30111e6403
commit ea5e0a9d5b
2 changed files with 16 additions and 11 deletions

View File

@@ -51,7 +51,7 @@ frappe.query_reports["Item-wise Sales Register"] = {
"label": __("Group By"), "label": __("Group By"),
"fieldname": "group_by", "fieldname": "group_by",
"fieldtype": "Select", "fieldtype": "Select",
"options": ["Customer", "Item Group", "Invoice"] "options": ["Customer", "Item Group", "Item", "Invoice"]
} }
], ],
"formatter": function(value, row, column, data, default_formatter) { "formatter": function(value, row, column, data, default_formatter) {

View File

@@ -54,10 +54,13 @@ def _execute(filters=None, additional_table_columns=None, additional_query_colum
if filters.get('group_by'): if filters.get('group_by'):
if filters.get('group_by') == 'Item': if filters.get('group_by') == 'Item':
group_by_field = 'item_code' group_by_field = 'item_code'
subtotal_display_field = 'customer'
elif filters.get('group_by') == 'Invoice': elif filters.get('group_by') == 'Invoice':
group_by_field = 'parent' group_by_field = 'parent'
subtotal_display_field = 'item_code'
else: else:
group_by_field = frappe.scrub(filters.get('group_by')) group_by_field = frappe.scrub(filters.get('group_by'))
subtotal_display_field = 'item_code'
if prev_group_by_value != d.get(group_by_field): if prev_group_by_value != d.get(group_by_field):
if prev_group_by_value: if prev_group_by_value:
@@ -68,7 +71,7 @@ def _execute(filters=None, additional_table_columns=None, additional_query_colum
prev_group_by_value = d.get(group_by_field) prev_group_by_value = d.get(group_by_field)
total_row = { total_row = {
'item_code': d.get(group_by_field), subtotal_display_field: d.get(group_by_field),
'stock_qty': 0.0, 'stock_qty': 0.0,
'amount': 0.0, 'amount': 0.0,
'bold': 1, 'bold': 1,
@@ -350,15 +353,17 @@ def get_conditions(filters):
and ifnull(`tabSales Invoice Item`.item_group, '') = %(item_group)s)""" and ifnull(`tabSales Invoice Item`.item_group, '') = %(item_group)s)"""
if not filters.get("group_by"): if not filters.get("group_by"):
conditions += "ORDER BY `tabSales Invoice`.posting_date desc, `tabSales Invoice Item`.item_code desc" conditions += "ORDER BY `tabSales Invoice`.posting_date desc, `tabSales Invoice Item`.item_group desc"
if filters.get("group_by"): if filters.get("group_by"):
if filters.get("group_by") == 'Invoice': if filters.get("group_by") == 'Invoice':
conditions += " ORDER BY `tabSales Invoice Item`.parent desc" conditions += " ORDER BY `tabSales Invoice Item`.parent desc"
elif filters.get("group_by") == 'Item': elif filters.get("group_by") == 'Item':
conditions += " ORDER BY `tabSales Invoice Item`.item_code desc" conditions += " ORDER BY `tabSales Invoice Item`.item_code"
else: elif filters.get("group_by") == 'Item Group':
conditions += " ORDER BY {0}".format(frappe.scrub(filters.get("group_by"))) conditions += " ORDER BY `tabSales Invoice Item`.`item_group`"
elif filters.get("group_by") == 'Customer':
conditions += " ORDER BY `tabSales Invoice`.customer"
return conditions return conditions
@@ -388,8 +393,8 @@ def get_items(filters, additional_query_columns):
`tabSales Invoice`.update_stock, `tabSales Invoice Item`.uom, `tabSales Invoice Item`.qty {0} `tabSales Invoice`.update_stock, `tabSales Invoice Item`.uom, `tabSales Invoice Item`.qty {0}
from `tabSales Invoice`, `tabSales Invoice Item` from `tabSales Invoice`, `tabSales Invoice Item`
where `tabSales Invoice`.name = `tabSales Invoice Item`.parent where `tabSales Invoice`.name = `tabSales Invoice Item`.parent
and `tabSales Invoice`.docstatus = 1 %s %s and `tabSales Invoice`.docstatus = 1 {1} {2}
""".format(additional_query_columns or '') % (conditions, match_conditions), filters, as_dict=1) """.format(additional_query_columns or '', conditions, match_conditions), filters, as_dict=1, debug=1)
def get_delivery_notes_against_sales_order(item_list): def get_delivery_notes_against_sales_order(item_list):
so_dn_map = frappe._dict() so_dn_map = frappe._dict()
@@ -409,13 +414,13 @@ def get_delivery_notes_against_sales_order(item_list):
return so_dn_map return so_dn_map
def get_grand_total(filters): def get_grand_total(filters):
conditions = get_conditions(filters)
return frappe.db.sql(""" SELECT return frappe.db.sql(""" SELECT
SUM(`tabSales Invoice`.grand_total) SUM(`tabSales Invoice`.grand_total)
FROM `tabSales Invoice` FROM `tabSales Invoice`
WHERE `tabSales Invoice`.docstatus = 1 %s WHERE `tabSales Invoice`.docstatus = 1
""" % (conditions), filters)[0][0] and posting_date between %s and %s
""", (filters.get('from_date'), filters.get('to_date')))[0][0]
def get_deducted_taxes(): def get_deducted_taxes():
return frappe.db.sql_list("select name from `tabPurchase Taxes and Charges` where add_deduct_tax = 'Deduct'") return frappe.db.sql_list("select name from `tabPurchase Taxes and Charges` where add_deduct_tax = 'Deduct'")