From 57d1f27e84d1ed0dab7a5c3ad379e157055e1e93 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 20 May 2026 11:19:00 +0530 Subject: [PATCH] refactor: ppcv select with for update and skip locked (cherry picked from commit eba58b28372721e2c8c7563a19e10afa7d8bc5ca) --- .../process_period_closing_voucher.py | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py index af9faeb396f..2269c4e3194 100644 --- a/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py +++ b/erpnext/accounts/doctype/process_period_closing_voucher/process_period_closing_voucher.py @@ -90,12 +90,16 @@ class ProcessPeriodClosingVoucher(Document): def start_pcv_processing(docname: str): if frappe.db.get_value("Process Period Closing Voucher", docname, "status") in ["Queued", "Running"]: frappe.db.set_value("Process Period Closing Voucher", docname, "status", "Running") - if normal_balances := frappe.db.get_all( - "Process Period Closing Voucher Detail", - filters={"parent": docname, "status": "Queued"}, - fields=["processing_date", "report_type", "parentfield"], - order_by="parentfield, idx, processing_date", - limit=4, + + ppcvd = qb.DocType("Process Period Closing Voucher Detail") + if normal_balances := ( + qb.from_(ppcvd) + .select(ppcvd.processing_date, ppcvd.report_type, ppcvd.parentfield) + .where(ppcvd.parent.eq(docname) & ppcvd.status.eq("Queued")) + .orderby(ppcvd.parentfield, ppcvd.idx, ppcvd.processing_date) + .limit(4) + .for_update(skip_locked=True) + .run(as_dict=True) ): if not is_scheduler_inactive(): for x in normal_balances: @@ -235,12 +239,15 @@ def get_gle_for_closing_account(pcv, dimension_balance, dimensions): @frappe.whitelist() def schedule_next_date(docname: str): - if to_process := frappe.db.get_all( - "Process Period Closing Voucher Detail", - filters={"parent": docname, "status": "Queued"}, - fields=["processing_date", "report_type", "parentfield"], - order_by="parentfield, idx, processing_date", - limit=1, + ppcvd = qb.DocType("Process Period Closing Voucher Detail") + if to_process := ( + qb.from_(ppcvd) + .select(ppcvd.processing_date, ppcvd.report_type, ppcvd.parentfield) + .where(ppcvd.parent.eq(docname) & ppcvd.status.eq("Queued")) + .orderby(ppcvd.parentfield, ppcvd.idx, ppcvd.processing_date) + .limit(1) + .for_update(skip_locked=True) + .run(as_dict=True) ): if not is_scheduler_inactive(): frappe.db.set_value(