refactor: use frappe.qb instead of sql

(cherry picked from commit 0a9ec9f591f8b4d0e630a3c902b69c9996f080dd)
This commit is contained in:
Sagar Sharma 2022-01-14 19:21:52 +05:30 committed by mergify-bot
parent edbf52ab95
commit ce0b84f54d

View File

@ -339,27 +339,35 @@ class DeliveryNote(SellingController):
frappe.throw(_("Could not create Credit Note automatically, please uncheck 'Issue Credit Note' and submit again")) frappe.throw(_("Could not create Credit Note automatically, please uncheck 'Issue Credit Note' and submit again"))
def update_billed_amount_based_on_so(so_detail, update_modified=True): def update_billed_amount_based_on_so(so_detail, update_modified=True):
from frappe.query_builder.functions import Sum
# Billed against Sales Order directly # Billed against Sales Order directly
billed_against_so = frappe.db.sql("""select sum(si_item.amount) si = frappe.qb.DocType("Sales Invoice").as_("si")
from `tabSales Invoice Item` si_item, `tabSales Invoice` si si_item = frappe.qb.DocType("Sales Invoice Item").as_("si_item")
where sum_amount = Sum(si_item.amount).as_("amount")
si_item.parent = si.name
and si_item.so_detail=%s billed_against_so = frappe.qb.from_(si).from_(si_item).select(sum_amount).where(
and (si_item.dn_detail is null or si_item.dn_detail = '') (si_item.parent == si.name) &
and si_item.docstatus=1 (si_item.so_detail == so_detail) &
and si.update_stock = 0 ((si_item.dn_detail.isnull()) | (si_item.dn_detail == '')) &
""", so_detail) (si_item.docstatus == 1) &
(si.update_stock == 0)
).run()
billed_against_so = billed_against_so and billed_against_so[0][0] or 0 billed_against_so = billed_against_so and billed_against_so[0][0] or 0
# Get all Delivery Note Item rows against the Sales Order Item row # Get all Delivery Note Item rows against the Sales Order Item row
dn_details = frappe.db.sql("""select dn_item.name, dn_item.amount, dn_item.si_detail, dn_item.parent, dn_item.stock_qty, dn_item.returned_qty
from `tabDelivery Note Item` dn_item, `tabDelivery Note` dn dn = frappe.qb.DocType("Delivery Note").as_("dn")
where dn_item = frappe.qb.DocType("Delivery Note Item").as_("dn_item")
dn.name = dn_item.parent
and dn_item.so_detail=%s dn_details = frappe.qb.from_(dn).from_(dn_item).select(dn_item.name, dn_item.amount, dn_item.si_detail, dn_item.parent, dn_item.stock_qty, dn_item.returned_qty).where(
and dn.docstatus=1 (dn.name == dn_item.parent) &
and dn.is_return = 0 (dn_item.so_detail == so_detail) &
order by dn.posting_date asc, dn.posting_time asc, dn.name asc""", so_detail, as_dict=1) (dn.docstatus == 1) &
(dn.is_return == 0)
).orderby(
dn.posting_date, dn.posting_time, dn.name
).run(as_dict=True)
updated_dn = [] updated_dn = []
for dnd in dn_details: for dnd in dn_details: