fix: get suppliers for leaderboard

This commit is contained in:
barredterra 2023-12-11 19:34:54 +01:00
parent 2721ee3a8d
commit 65df4b6aa8

View File

@ -135,12 +135,14 @@ def get_all_items(date_range, company, field, limit=None):
@frappe.whitelist() @frappe.whitelist()
def get_all_suppliers(date_range, company, field, limit=None): def get_all_suppliers(date_range, company, field, limit=None):
filters = [["docstatus", "=", "1"], ["company", "=", company]]
from_date, to_date = parse_date_range(date_range)
if field == "outstanding_amount": if field == "outstanding_amount":
filters = [["docstatus", "=", "1"], ["company", "=", company]] if from_date and to_date:
if date_range: filters.append(["posting_date", "between", [from_date, to_date]])
date_range = frappe.parse_json(date_range)
filters.append(["posting_date", "between", [date_range[0], date_range[1]]]) return frappe.get_list(
return frappe.db.get_all(
"Purchase Invoice", "Purchase Invoice",
fields=["supplier as name", "sum(outstanding_amount) as value"], fields=["supplier as name", "sum(outstanding_amount) as value"],
filters=filters, filters=filters,
@ -150,29 +152,21 @@ def get_all_suppliers(date_range, company, field, limit=None):
) )
else: else:
if field == "total_purchase_amount": if field == "total_purchase_amount":
select_field = "sum(purchase_order_item.base_net_amount)" select_field = "base_net_total"
elif field == "total_qty_purchased": elif field == "total_qty_purchased":
select_field = "sum(purchase_order_item.stock_qty)" select_field = "total_qty"
date_condition = get_date_condition(date_range, "purchase_order.modified") if from_date and to_date:
filters.append(["transaction_date", "between", [from_date, to_date]])
return frappe.db.sql( return frappe.get_list(
""" "Purchase Order",
select purchase_order.supplier as name, {0} as value fields=["supplier as name", f"sum({select_field}) as value"],
FROM `tabPurchase Order` as purchase_order LEFT JOIN `tabPurchase Order Item` filters=filters,
as purchase_order_item ON purchase_order.name = purchase_order_item.parent group_by="supplier",
where order_by="value desc",
purchase_order.docstatus = 1 limit=limit,
{1} )
and purchase_order.company = %s
group by purchase_order.supplier
order by value DESC
limit %s""".format(
select_field, date_condition
),
(company, cint(limit)),
as_dict=1,
) # nosec
@frappe.whitelist() @frappe.whitelist()