From 94828e743da215e07f757ceb38f84291f40e66c5 Mon Sep 17 00:00:00 2001 From: Loic Oberle Date: Fri, 29 May 2026 14:00:41 +0200 Subject: [PATCH] =?UTF-8?q?refactor(sales=5Finvoice):=20replace=20sql=20wi?= =?UTF-8?q?th=20qb=20in=20update=5Fbilling=5Fstatus=E2=80=A6=20(#55380)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doctype/sales_invoice/sales_invoice.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 1dd15bf5f9a..781f1d0cada 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -2119,15 +2119,24 @@ class SalesInvoice(SellingController): def update_billing_status_in_dn(self, update_modified=True): if self.is_return and not self.update_billed_amount_in_delivery_note: return + updated_delivery_notes = [] + + SalesInvoiceItem = frappe.qb.DocType("Sales Invoice Item") + from frappe.query_builder.functions import Coalesce, Sum + for d in self.get("items"): if d.dn_detail: - billed_amt = frappe.db.sql( - """select sum(amount) from `tabSales Invoice Item` - where dn_detail=%s and docstatus=1""", - d.dn_detail, + query = ( + frappe.qb.from_(SalesInvoiceItem) + .select(Coalesce(Sum(SalesInvoiceItem.amount), 0)) + .where(SalesInvoiceItem.dn_detail == d.dn_detail) + .where(SalesInvoiceItem.docstatus == 1) ) - billed_amt = billed_amt and billed_amt[0][0] or 0 + + res = query.run() + billed_amt = res[0][0] if res else 0 + frappe.db.set_value( "Delivery Note Item", d.dn_detail,