refactor(supplier_scorecard_variable): replace sql with query builder (#55163)

This commit is contained in:
Loic Oberle
2026-05-22 12:36:04 +02:00
committed by GitHub
parent 82d19677ed
commit 2eb2defd90

View File

@@ -110,35 +110,32 @@ def get_cost_of_delayed_shipments(scorecard):
def get_cost_of_on_time_shipments(scorecard):
"""Gets the total cost of all on_time shipments in the period (based on Purchase Receipts)"""
supplier = frappe.get_doc("Supplier", scorecard.supplier)
# Look up all PO Items with delivery dates between our dates
from frappe.query_builder.functions import Sum
total_delivered_on_time_costs = frappe.db.sql(
"""
SELECT
SUM(pr_item.base_amount)
FROM
`tabPurchase Order Item` po_item,
`tabPurchase Receipt Item` pr_item,
`tabPurchase Order` po,
`tabPurchase Receipt` pr
WHERE
po.supplier = %(supplier)s
AND po_item.schedule_date BETWEEN %(start_date)s AND %(end_date)s
AND po_item.schedule_date >= pr.posting_date
AND pr_item.docstatus = 1
AND pr_item.purchase_order_item = po_item.name
AND po_item.parent = po.name
AND pr_item.parent = pr.name""",
{"supplier": supplier.name, "start_date": scorecard.start_date, "end_date": scorecard.end_date},
as_dict=0,
)[0][0]
PO = frappe.qb.DocType("Purchase Order")
PO_Item = frappe.qb.DocType("Purchase Order Item")
PR = frappe.qb.DocType("Purchase Receipt")
PR_Item = frappe.qb.DocType("Purchase Receipt Item")
if total_delivered_on_time_costs:
return total_delivered_on_time_costs
else:
return 0
query = (
frappe.qb.from_(PR_Item)
.join(PR)
.on(PR_Item.parent == PR.name)
.join(PO_Item)
.on(PR_Item.purchase_order_item == PO_Item.name)
.join(PO)
.on(PO_Item.parent == PO.name)
.select(Sum(PR_Item.base_amount))
.where(PO.supplier == scorecard.supplier)
.where(PO_Item.schedule_date[scorecard.start_date : scorecard.end_date])
.where(PO_Item.schedule_date >= PR.posting_date)
.where(PR_Item.docstatus == 1)
)
result = query.run(as_list=True)
total_costs = result[0][0] if result and result[0][0] is not None else 0
return total_costs
def get_total_days_late(scorecard):