Report & SQL Formats - ashish-greycube/help GitHub Wiki
1. Using '.format()'
def get_data(filters):
conditions = get_conditions(filters)
si_list = frappe.db.sql("""
SELECT
name,
DATE_FORMAT(posting_date, '%b') AS month,
YEAR(posting_date) AS year,
customer,
SUM(base_grand_total) as sales_amount,
(SUM(base_grand_total)- SUM(outstanding_amount)) as paid_amount
FROM
`tabSales Invoice`
WHERE
docstatus = 1
{0}
GROUP BY month
ORDER BY posting_date ASC
""".format(conditions),as_dict=1,debug=1)
return si_list
def get_conditions(filters):
conditions = ""
if filters.get("fiscal_year"):
conditions += " and YEAR(posting_date) = '{0}'".format(filters.get("fiscal_year"))
if filters.get("customer"):
conditions += " and customer = '{0}'".format(filters.get("customer"))
if filters.get("month"):
conditions += " and DATE_FORMAT(posting_date, '%b') = '{0}'".format(filters.get("month"))
return conditions
2. Using '%()s'
Type - 1
def get_data(filters):
conditions = get_conditions(filters)
query = frappe.db.sql(
""" SELECT
vd.parent vessel,
vd.customer_name customer ,
vd.item customer_item,
vd.tonnage_mt received_qty,
rrd.commercial_destination_item commercial_destination_item,
IFNULL(sum(rrd.rr_item_weight_mt), 0) dispatch_qty
FROM
`tabVessel Details` vd
left outer join `tabRailway Receipt Item Details` rrd on
vd.parent = rrd.vessel
and vd.item = rrd.commercial_destination_item
and rrd.docstatus < 2
{0}
group by
vd.parent,rrd.commercial_destination_item
""".format(conditions),filters,as_dict=1,debug=1)
def get_conditions(filters):
conditions = ""
if filters.customer:
conditions += " and vd.customer_name = %(customer)s"
return conditions
Type - 2
delivered_via_si = frappe.db.sql(
"""select sum(si_item.qty)
from `tabSales Invoice Item` si_item, `tabSales Invoice` si
where si_item.parent = si.name and si.update_stock = 1
and si_item.so_detail = %s and si.docstatus = 1
and si_item.sales_order = %s
and si.name != %s""",
(so_detail, so, current_docname),
)
Type - 3
def get_requested_qty(project_name,item_code):
values = {'project_name': project_name,'item_code':item_code}
data = frappe.db.sql("""
SELECT
sum(mri.qty) as mri_qty
FROM
`tabMaterial Request Item` as mri
where
mri.project = %(project_name)s
and mri.item_code=%(item_code)s
and mri.docstatus = 1
group by
mri.item_code
""", values=values, as_dict=1,debug=0)
print('data',data)
return data
Add Column as per Filter Dates Range:
def get_data(filters, columns):
data = []
conditions = get_conditions(filters)
data = frappe.db.sql(
"""SELECT
ppl.branch as branch, ppl.business_date as business_date, ppl.invoice_status as invoice_status, 1 as count_log
From `tabPet Pooja Log` as ppl
Where {0}""".format(conditions),filters,as_dict=1,debug=1)
result = make_report(data, filters, columns)
# print(result)
return result
def make_report(data, filters, columns):
from itertools import groupby
from frappe.utils import flt, date_diff, getdate, cstr, cint
import datetime
result = []
from_date, to_date = filters.get("from_date"), filters.get("to_date")
numdays = date_diff(to_date, from_date)
dates = [
(getdate(to_date) - datetime.timedelta(days=x)).strftime("%Y-%m-%d")
for x in range(numdays)
]
dates.append(filters.get("from_date"))
for dt in dates:
columns.append(
{
"fieldname": dt,
"label": dt,
"fieldtype": "Data",
"width": 150,
}
)
grouping_key = lambda o: (o["branch"], o["invoice_status"])
for (branch, invoice_status), rows in groupby(
sorted(data, key=grouping_key), key=grouping_key
):
_rows = list(rows)
row = {
"branch": branch,
"invoice_status": invoice_status,
}
result.append(row)
return result