refactor(supplier): Using query builder for get_total_shipments (#54875)

Use the query builder for get_total_shipments to assure compatibility with PostgreSQL.
This commit is contained in:
Loïc Oberle
2026-05-12 19:02:57 +02:00
committed by GitHub
parent 5b7f07ddb1
commit 24530fa349

View File

@@ -400,28 +400,21 @@ def get_total_accepted_items(scorecard):
def get_total_shipments(scorecard): def get_total_shipments(scorecard):
"""Gets the total number of ordered shipments to arrive in the period (based on Purchase Receipts)""" """Gets the total number of ordered shipments to arrive in the period (based on Purchase Receipts)"""
supplier = frappe.get_doc("Supplier", scorecard.supplier) po = frappe.qb.DocType("Purchase Order")
po_item = frappe.qb.DocType("Purchase Order Item")
# Look up all PO Items with delivery dates between our dates query = (
data = frappe.db.sql( frappe.qb.from_(po)
""" .join(po_item)
SELECT .on(po_item.parent == po.name)
COUNT(po_item.base_amount) .select(frappe.qb.fn.Count(po_item.base_amount))
FROM .where(po.supplier == scorecard.supplier)
`tabPurchase Order Item` po_item, .where(po_item.schedule_date[scorecard.start_date : scorecard.end_date])
`tabPurchase Order` po .where(po_item.docstatus == 1)
WHERE )
po.supplier = %(supplier)s
AND po_item.schedule_date BETWEEN %(start_date)s AND %(end_date)s
AND po_item.docstatus = 1
AND po_item.parent = po.name""",
{"supplier": supplier.name, "start_date": scorecard.start_date, "end_date": scorecard.end_date},
as_dict=0,
)[0][0]
if not data: result = query.run()
data = 0 return frappe.utils.cint(result[0][0]) if result else 0
return data
def get_ordered_qty(scorecard): def get_ordered_qty(scorecard):